gpt4 book ai didi

linux - X11 ConfigureNotify() 总是返回 x,y = (0,0)

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:56:37 26 4
gpt4 key购买 nike

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

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

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

最佳答案

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

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

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

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

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

关于linux - X11 ConfigureNotify() 总是返回 x,y = (0,0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25391791/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com