XWindow 不听自己的属性/ window 管理器

XWindow not listening to its own attributes/ window manager

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

设置的

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

然而,当我打印属性时它显示 (430, 300) 即使 window 实际上已经在 (0,0) 打开。

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

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

您需要等待以确保 window 在尝试更改其位置等之前实际实现。尝试添加一个事件处理程序来屏蔽 SubstructureRedirectMask 并在事件类型为时在事件处理程序中调用 XMoveResizeWindow XMapRequestEvent.