设置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 之后,如果我调整它的大小(当然还有框架);它显然工作正常。所以,我尝试了这个策略:

我只能猜测。我的猜测是您没有遵循 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 值。