我有一个x11窗口,它是使用xcreatewindow创建的,父窗口设置为defaultrootwindow(dpy)。窗口接收configurenotify事件。但是,无论窗口移动到哪里,configurenotify都会将位置报告为0,0。对xGetWindowAttributes()的调用也是如此。怎么回事?
还有别的事情让我发疯。我告诉createwindow把窗口放在一个特定的坐标。但谁也猜不到窗户到底出现在哪里。很烦人。有什么想法吗?
(不,我不能使用qt或其他api。这是xlib。)
最佳答案
您的窗口管理器对这两种现象负责。
第一个是因为重新租房。wm可以重新分配顶级窗口,使它们不再是根的直接子窗口。这样做是为了创造窗户装饰等。你的窗户变成了装饰窗户的孩子或孙子。因此,顶层窗口的相对位置是无用的。你需要绝对的位置。使用XTranslateCoordinates
获取它们。
第二个是因为西医更清楚。不,真的。是西医。应该很聪明。它属于用户。用户(至少在理论上)在他认为合适的情况下配置他的wm。应用程序编写人员不应该在意。如果用户希望他的窗口总是居中显示,那么就这样。如果他想让它们随机出现,那是他的选择。
在极少数情况下,窗口应该出现在固定的位置,这样的窗口几乎总是被重写重定向。
在更为罕见的情况下,必须将托管窗口定位在已知坐标处。在这种情况下,请参见相关问题(不知羞耻的插头:它是我的)。您需要指定PPosition
和PSize
。
关于linux - X11 ConfigureNotify()始终返回x,y =(0,0),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25391791/