X11:XRaiseWindow和XLowerWindow与预期相反。为什么?

时间:2015-05-03 14:21:07

标签: x11 xorg

在我的自定义窗口管理器中尝试实现单击焦点时,我注意到当我点击它们时窗口正​​在降低,而不是提升。有问题的行看起来像这样:

XSetInputFocus(this->display, this->event.xbutton.subwindow, RevertToParent, CurrentTime);
XRaiseWindow(this->display, this->event.xbutton.subwindow);

我把它改为

XSetInputFocus(this->display, this->event.xbutton.subwindow, RevertToParent, CurrentTime);
XLowerWindow(this->display, this->event.xbutton.subwindow);

现在,当我点击它们时,窗口正在被提升,这是正确的。

根据手册页:“XRaiseWindow函数将指定的窗口提升到堆栈的顶部,这样就不会让兄弟窗口遮挡它。”反之亦然,适用于XLowerWindow。我所观察到的行为恰恰与所描述的相反; XRaiseWindow将窗口推送到后台,而XLowerWindow将它们移动到前台。

这里发生了什么?

(这是Ubuntu 14.04.2 LTS的价值所在。)

1 个答案:

答案 0 :(得分:2)

问题结果是微不足道的,完全是我的错:上面的行是在switch()语句中,中断;下面的声明丢失了。下一个条件叫做XCirculateWindowsUp()。所以聚焦和抬高窗户会再次降低它。

糟糕。