3

使 GUI 工具包(如 Qt、GTK)与窗口管理器协同工作的基本机制是什么?

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

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

4

2 回答 2

2

主要的通信机制是通过windows 属性。查看它的起点是ICCCM,尤其是第 4 章。这包括窗户装饰和按钮之类的东西。

现代桌面极大地扩展了 ICCCM 中描述的约定,有关更多信息,请参阅standards/freedesktop.org/wm-spec。这些扩展涵盖了寻呼机和任务栏之类的东西。

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

一次只有一个客户端可以执行重定向,这个客户端被定义为窗口管理器。在所有其他方面,客户都是对等的。

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

于 2014-03-09T09:56:23.153 回答
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/

于 2012-04-01T23:04:35.100 回答