GUI工具包如何与Linux上的窗口管理器进行通信?

时间:2012-03-21 18:15:46

标签: linux xserver window-managers gui-toolkit

使GUI工具包(例如Qt,GTK)与窗口管理器一起工作的基本机制是什么?

据我所知,GUI工具包可以绘制自己的主窗口而无需任何窗口管理器。然而,令我困惑的一点是窗口管理器何时以及如何在x服务器中检测到“新窗口请求”并在此窗口周围绘制其框架,标题等?当然需要某种隐式协调。但是,从编码的角度来看,窗口管理器初始化似乎对GUI工具包完全透明。

是不是说GUI工具包和窗口管理器都是x window的2个对等客户端?调用(通知)窗口管理器参与新窗口创建过程是否是x-server的责任?如果是这种情况,谁在没有窗口管理器时确定“应用程序窗口”的位置?

2 个答案:

答案 0 :(得分:2)

主要的通信机制是通过 windows属性。查看它的起点是ICCCM,特别是Chapter 4。这包括窗户装饰和按钮等内容。

现代桌面大大扩展了ICCCM中描述的约定,有关详细信息,请参阅standards/freedesktop.org/wm-spec。这些扩展包括寻呼机和任务栏等内容。

此外,窗口管理器具有特殊权限,即它可以查看和拦截所有窗口配置,调整大小和映射请求。这称为重定向,参见例如here。我猜你主要对这种沟通感兴趣。

一次只有一个客户端可以执行重定向,此客户端已定义作为窗口管理器。在所有其他方面,客户都是同行。

所有窗口创建/配置请求都包含窗口坐标。窗口管理器可以拦截和修改这些坐标。如果没有窗口管理器,请求由X服务器执行,就像应用程序发送它们一样。

答案 1 :(得分:0)

嗯,一切都是通过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/