在我的自定义窗口管理器中尝试实现单击焦点时,我注意到当我点击它们时窗口正在降低,而不是提升。有问题的行看起来像这样:
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的价值所在。)
答案 0 :(得分:2)
问题结果是微不足道的,完全是我的错:上面的行是在switch()语句中,中断;下面的声明丢失了。下一个条件叫做XCirculateWindowsUp()。所以聚焦和抬高窗户会再次降低它。
糟糕。