问题: 我在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次。它似乎修复了它(尚未完成测试)。但肯定必须有比蛮力更好的方式。
答案 0 :(得分:1)
您需要等待以确保在尝试更改其位置之前实际实现窗口等。尝试添加一个掩码为SubstructureRedirectMask的事件处理程序,并在事件类型为XMapRequestEvent时在事件处理程序中调用XMoveResizeWindow。