【发布时间】:2015-08-27 10:33:34
【问题描述】:
我有两个顶级窗口,win1 和 win2。
我想让 win2 在 win1 移动时跟随 win1,以便 win2 相对于 win1 的位置(我称之为relpos)保持不变。 IOW,粘性窗口!
我的想法是把win2移到win1的ConfigureNotify中。为此,我需要知道relpos。
当 win2 被移动时,我可以在 win2 的 ConfigureNotify 中获取(并存储)relpos。
问题在于,当用户移动和以编程方式移动时,win2 都会获取 ConfigureNotify。有没有办法区分这两种情况?
如果没有,整个方法都是失败的,所以下一个问题是:还有其他方法吗?
谢谢。
注意:我不能只设置一个“moving_programmatically”标志,移动窗口然后检查 ConfigureNotify 上的标志,因为 X 是异步的(它最大的缺点之一 - 许多人认为这是一个特性)并且无法保证何时和我得到了多少个 ConfigureNotify 事件。尝试这样做,将 win1 移动得太快,看看 win2 是如何落后的。
【问题讨论】:
-
您正在以编程方式移动它,以便您知道何时发生这种情况......
-
@n.m.是的,如果 X 像任何理智的 API(winapi/cocoa)一样是同步的,我可以这样做。我添加了一个澄清说明。
-
如果您想知道为什么在移动子窗口(例如,使用弹性布局)时不会出现此问题,这是因为无法移动/调整子窗口的大小。由 WM 提供,仅由应用提供。
-
我现在想知道为什么谁移动了窗口会有所不同。相对偏移量是相对偏移量,无论如何。万一它确实对你有影响,当你移动一个窗口时,你知道你移动它的哪里,所以你知道要忽略哪个 ConfigureNotify。
-
因为当我移动 win2 时,我必须存储 relpos,但是当我移动 win1 时,我必须根据 relpos 移动 win2(这会触发 win2 的 ConfigureNotify,从而更改 relpos 等)。