【问题标题】:XWindow not listening to its own attributes/ window managerXWindow 不听自己的属性/窗口管理器
【发布时间】:2016-05-24 01:08:16
【问题描述】:

问题: 我在 Linux 系统上的 Window Manager 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 次。它似乎已经修复它(尚未完成测试)。但肯定有比蛮力更好的方法。

【问题讨论】:

    标签: c++ x11 window-managers motif


    【解决方案1】:

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

    【讨论】:

    • 确实是这个问题,谢谢!我的解决方案是 0.02 秒的睡眠功能,不过您的修复方法会更好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-26
    • 2011-01-20
    • 1970-01-01
    • 2022-08-23
    • 1970-01-01
    相关资源
    最近更新 更多