简单问题:如何考虑任何窗口管理器添加的装饰,如何在X11中设置窗口的位置?
我知道当我创建一个窗口时,窗口管理器会将它包装在另一个窗口中,这样如果我想获得窗口的“真实”位置,我必须做这样的事情
XGetGeometry(dpy, win, &root, &oldx, &oldy, &w, &h, &bw, &depth);
XTranslateCoordinates(dpy, win, root, oldx, oldy, &newx, &newy, &c);
然后,我如何正确使用XMoveWindow()
移动窗口,以便newx
和newy
成为我想要的?
感谢。
答案 0 :(得分:1)
正如已经指出的那样,你不能。主要原因是XServer将所有几何请求传递给窗口管理器(这就是为什么它被认为是不同的类型的客户端而你不能同时运行几个窗口管理器),谁决定它是否是否授予他们。如果是严格的窗口管理器,则根本不允许移动窗口。或者它可以以不同于您请求的方式移动窗口。
答案 1 :(得分:0)
你做不到。期。据我所知,你的X会话的窗口管理器可以添加它喜欢的任何装饰,所以你的窗口可以移动几个像素。或者它可能决定将原始窗口保留在原位并相应地抵消其装饰。
有些事情你可以像你所做的那样尝试和补偿,但不能保证它可以在所有窗口管理器上运行。
这当然引出了一个问题:你为什么要这样做?