【问题标题】:Set the actual x, y position of a window设置窗口的实际 x、y 位置
【发布时间】: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接收新坐标。我是坚持这个技巧还是可以做得更好?

【问题讨论】:

    标签: x11 xlib xcb


    【解决方案1】:

    我只能猜测。我的猜测是您没有遵循 ICCCM § 4.2.3:

    如果窗口管理器在不改变其大小的情况下移动顶层窗口,客户端将在移动之后收到一个合成的 ConfigureNotify 事件,该事件根据根坐标空间描述新位置。

    https://tronche.com/gui/x/icccm/sec-4.html#s-4.2.3

    当您只是移动框架窗口时,客户端不会收到通知。因此,需要这些合成的 ConfigureNotify 值。

    【讨论】:

    • 就这样,再次感谢!
    猜你喜欢
    • 2011-03-28
    • 2018-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多