【问题标题】:X11 ConfigureNotify() always returning x,y = (0,0)X11 ConfigureNotify() 总是返回 x,y = (0,0)
【发布时间】:2014-08-20 04:58:50
【问题描述】:

我有一个使用 XCreateWindow 创建的 X11 窗口,其父窗口设置为 DefaultRootWindow(dpy)。该窗口接收 ConfigureNotify 事件。但是,无论窗口移动到哪里,ConfigureNotify 都会将位置报告为 0,0。对 XGetWindowAttributes() 的调用也是如此。这是怎么回事?

还有其他一些事情让我发疯。我告诉 CreateWindow 将窗口放置在特定坐标处。但任何人都可以猜测窗口实际出现的位置。很烦人。对此有何想法?

(不,我不能使用 Qt 或其他 API。这是 Xlib。)

【问题讨论】:

    标签: linux x11 xlib


    【解决方案1】:

    您的窗口管理器负责这两种现象。

    第一个是因为重新养育。 WM 可以重新定义顶级窗口,因此它们不再是根的直接子级。它这样做是为了创建窗户装饰等。您的窗口成为装饰窗口的子或孙子。因此,顶层窗口的相对位置是无用的。你需要绝对位置。使用XTranslateCoordinates获取它们。

    第二个是因为 WM 知道得更好。不完全是。这是 WM。它应该是聪明的。它属于用户。用户(至少在理论上)以他认为合适的方式配置他的 WM。应用程序编写者不应该关心。如果用户希望他的窗口始终居中显示,那就这样吧。如果他想让它们出现在随机位置,那是他的选择。

    在极少数情况下,窗口应该出现在固定位置,并且此类窗口几乎应该总是被覆盖重定向。

    在更罕见的情况下,您必须将托管窗口定位在已知坐标处。在这种情况下,请参阅this answer 的相关问题(无耻的插头:这是我的)。您要指定PPositionPSize

    【讨论】:

    • XTranslateCoordinates 似乎已经解决了这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-13
    • 1970-01-01
    • 1970-01-01
    • 2010-12-15
    • 2012-06-22
    相关资源
    最近更新 更多