c++ - XWindow 不听自己的属性/窗口管理器

标签 c++ x11 window-managers motif

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

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

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

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

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

最佳答案

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

关于c++ - XWindow 不听自己的属性/窗口管理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35370135/

相关文章:

x11 - xauth 和 $DISPLAY 问题

为 Linux 创建一个窗口管理器

c++ - 使用 placement new、malloc 和 free

c++ - 如何在默认构造函数中初始化对空字符串的类成员引用

opengl - 如何在 C 中使用 GLX_EXT_texture_from_pixmap 将 X11 Pixmap 用作 OpenGL 纹理?

opengl - 无法设置GLXContext

java - 您可以将 Java 应用程序的窗口标题设置为命令行参数吗?

java - Android Studio IDE 在 Ubuntu 15.04 上不显示对话框内容

c++ - 基于策略的设计和最佳实践 - C++

c++ - 虚拟继承情况下类的大小