使GUI工具包(如Qt、GTK)与窗口管理器协同工作的基本机制是什么?
据我所知,GUI工具包可以绘制自己的主窗口,而不需要任何窗口管理器。然而,让我困惑的是,窗口管理器何时以及如何检测到x-server中的“新窗口请求”,并在此窗口周围绘制其框架、标题等?当然,某种隐式的协调是必要的。然而,从编码的角度来看,窗口管理器初始化对于GUI工具包似乎是完全透明的。
GUI工具包和窗口管理器都是x window的两个对等客户端,这是真的吗?调用(通知)窗口管理器以参与新窗口创建过程是x-server的责任吗?如果是这样的话,当没有窗口管理器时,谁来决定“应用程序窗口”的位置?
发布于 2014-03-09 17:56:23
主要的通信机制是通过窗口属性。查看它的起点是ICCCM,特别是Chapter 4。这包括像窗口装饰和按钮这样的东西。
现代桌面极大地扩展了ICCCM中描述的约定,有关更多信息,请参阅standards/freedesktop.org/wm-spec。这些扩展包括诸如寻呼机和任务栏之类的东西。
此外,窗口管理器具有特殊权限,即它可以查看和拦截所有窗口配置、调整大小和映射请求。这称为重定向,参见例如here。我猜你主要对这种交流感兴趣。
一次只能有一个客户端执行重定向,此客户端被定义为窗口管理器。在所有其他方面,客户端都是同级。
所有窗口创建/配置请求都包含窗口坐标。窗口管理器可以拦截和修改这些坐标。如果没有窗口管理器,则请求将由X服务器执行,就像应用程序发送它们一样。
发布于 2012-04-02 07:04:35
一切最终都是通过X服务器来协调的。读一读,我相信你会找到你正在寻找的答案……
一些一般信息:
http://en.wikipedia.org/wiki/X_Window_System_protocols_and_architecture#Inter-client_communication
http://en.wikipedia.org/wiki/X_window_manager#How_X_window_managers_work
Xlib编程手册-特别是第9、10和14章:
http://tronche.com/gui/x/xlib/
https://stackoverflow.com/questions/9810448
复制相似问题