设置a window的实际x,y位置
Set the actual x, y position of a window
我正在编写一个重新设置父级的 window 管理器,当我移动 window 时,某些应用程序(如 Firefox)行为不正常。例如,假设我将 firefox 映射到 (0, 0)。然后我将它移动到 (5, 5)。当我打开菜单时,它会偏移 (5, 5),因为它认为应用程序的坐标是 (0, 0) 但实际框架 window 已移动到 (5, 5).
我确实正确设置了 _NET_FRAME_EXTENTS 属性,但仍然出现这种情况。我如何告诉客户端应用程序它是什么 actual x 和 y 坐标,没有 configure_window'ing(因此实际上将它移动到一个框架内的某个偏移量,这打破了整体东西)呢?
也许还值得一提,在我移动 window 之后,如果我调整它的大小(当然还有框架);它显然工作正常。所以,我尝试了这个策略:
- 将其调整为我想要的高度 - 1 和我想要的宽度
- 调整到我想要的高度
我不知道为什么会这样,在宽度上做 -1 也可以。事实上我可以做任何操作,只是结果必须是调整 window 的大小,无论多么小,并且 firefox 收到新的坐标。我是受困于此技巧还是可以做得更好?
我只能猜测。我的猜测是您没有遵循 ICCCM § 4.2.3:
If the window manager moves a top-level window without changing its size, the client will receive a synthetic ConfigureNotify event following the move that describes the new location in terms of the root coordinate space.
https://tronche.com/gui/x/icccm/sec-4.html#s-4.2.3
当您只是移动框架时 windows,客户端不会收到通知。因此,需要这些合成的 ConfigureNotify 值。
我正在编写一个重新设置父级的 window 管理器,当我移动 window 时,某些应用程序(如 Firefox)行为不正常。例如,假设我将 firefox 映射到 (0, 0)。然后我将它移动到 (5, 5)。当我打开菜单时,它会偏移 (5, 5),因为它认为应用程序的坐标是 (0, 0) 但实际框架 window 已移动到 (5, 5).
我确实正确设置了 _NET_FRAME_EXTENTS 属性,但仍然出现这种情况。我如何告诉客户端应用程序它是什么 actual x 和 y 坐标,没有 configure_window'ing(因此实际上将它移动到一个框架内的某个偏移量,这打破了整体东西)呢?
也许还值得一提,在我移动 window 之后,如果我调整它的大小(当然还有框架);它显然工作正常。所以,我尝试了这个策略:
- 将其调整为我想要的高度 - 1 和我想要的宽度
- 调整到我想要的高度 我不知道为什么会这样,在宽度上做 -1 也可以。事实上我可以做任何操作,只是结果必须是调整 window 的大小,无论多么小,并且 firefox 收到新的坐标。我是受困于此技巧还是可以做得更好?
我只能猜测。我的猜测是您没有遵循 ICCCM § 4.2.3:
If the window manager moves a top-level window without changing its size, the client will receive a synthetic ConfigureNotify event following the move that describes the new location in terms of the root coordinate space.
https://tronche.com/gui/x/icccm/sec-4.html#s-4.2.3
当您只是移动框架时 windows,客户端不会收到通知。因此,需要这些合成的 ConfigureNotify 值。