【发布时间】:2021-11-20 23:10:17
【问题描述】:
我正在编写一个重父窗口管理器,当我移动窗口时,某些应用程序(如 Firefox)会出现异常行为。例如,假设我将 firefox 映射到 (0, 0)。然后我把它移到 (5, 5)。当我打开一个菜单时,它会偏移 (5, 5),因为它认为应用程序的坐标是 (0, 0) 但实际框架窗口已移动到 (5, 5)。
我确实正确设置了 _NET_FRAME_EXTENTS 属性,但这仍然会发生。我如何告诉客户端应用程序它的 实际 x 和 y 坐标是什么,而不需要 configure_window'ing(因此实际上将它移动到框架内的某个偏移量,这会破坏整个事情)它?
也许还值得一提的是,在我移动窗口之后,如果我调整它的大小(当然还有框架);它显然工作正常。所以,我尝试了这个策略:
- 将其调整为我想要的高度 - 1 和我想要的宽度
- 调整到我想要的高度 我不知道为什么会这样,在宽度上做 -1 也可以。事实上我可以做任何操作,只是结果必须是调整窗口大小,无论多么小,并且Firefox接收新坐标。我是坚持这个技巧还是可以做得更好?
【问题讨论】: