XCreateWindow提供了一个与现有窗口冲突的窗口ID

时间:2009-03-02 06:31:42

标签: linux x11 xlib

我创建了一个使用XCreateWindow创建窗口的程序。这完全适用于我的系统和许多其他系统,但在很多方面,它会导致一些奇怪的问题。例如我从中获取的ID与启动程序的终端的ID冲突。在一个这样的情况下,gnome-terminal也有窗口ID 0x2400001(父是root),我的程序窗口ID也是0x2400001(它的父也是root)。有什么建议可能会出错?

3 个答案:

答案 0 :(得分:0)

窗口ID可能仅在与X服务器的每个连接中唯一(即连接到X服务器的不同进程可能获得相同的窗口ID,并且X服务器使用连接AND窗口ID在内部将它们分开)。

我认为X对窗口ID没有任何承诺,例如它们在流程或任何事物中都是独一无二的,因此最好不要将它们用于任何其他目的。

我不会惊讶地看到X实现只返回连续数字作为窗口ID,以每个连接的相同值(例如1)开始,这可以解释您的体验,例如每个客户端的第一个窗口似乎在该X实现上具有相同的窗口ID。

答案 1 :(得分:0)

Xserver为每个窗口创建一个唯一的opaque id。 您用于识别窗口ID的方法可能是错误的。

您的问题是另一个问题的症状。 你真的想解决什么问题?

答案 2 :(得分:0)

除了其他答案:运行xwininfo -root -all(阅读其手册页以获取更多信息)。检查gnome-terminal窗口ID和应用程序窗口ID。