XWindow没有监听自己的属性/窗口管理器

时间:2016-02-12 18:53:59

标签: c++ x11 window-managers motif

问题: 我在Linux系统上的一个Window Manager C ++文件中有一个由XWindows控制的java窗口。某处有一个错误,如果你连续(并且快速)大约在7-35次之间打开HCI,通常至少有一次窗口在默认位置(0,0)打开而不是我设置的位置(430,300) )。失败后,如果我关闭HCI并重新打开它,它将在正确的位置打开,就像在bug之前一样。这些属性最初使用XMoveResizeWindow设置。

我添加了一个循环来检查HCI的位置(通过XTranslateAttributes和XGetWindowAttributes),并将X和Y与设置位置进行比较,如果不匹配则重置属性。

然而,当我打印它显示的属性(430,300)时,即使窗口实际上在(0,0)处打开。

具体问题: 这是XWindows的错误吗?读取一件事物的属性是否有意义,但是它与实际位置不匹配(即可能这些属性是建议,而不是要求)?是否有一种不同的方法可以返回更准确的HCI位置?

更新: 我已经尝试通过XMoveWindow将循环更改为连续移动15次。它似乎修复了它(尚未完成测试)。但肯定必须有比蛮力更好的方式。

1 个答案:

答案 0 :(得分:1)

您需要等待以确保在尝试更改其位置之前实际实现窗口等。尝试添加一个掩码为SubstructureRedirectMask的事件处理程序,并在事件类型为XMapRequestEvent时在事件处理程序中调用XMoveResizeWindow。