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

X11: XRaiseWindow and XLowerWindow do the opposite of what is expected. Why?

在我的自定义 window 管理器中尝试实现点击聚焦时,我注意到 windows 在我点击它们时正在降低,而不是升高。有问题的行如下所示:

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);

现在 windows 在我点击它们时会出现,这是正确的。

根据手册页:"The XRaiseWindow function raises the specified window to the top of the stack so that no sibling window obscures it." XLowerWindow 反之亦然。我观察到的行为与所描述的恰恰相反; XRaiseWindow 将 windows 推到后台,而 XLowerWindow 将它们移到前台。

这是怎么回事?

(这是 Ubuntu 14.04.2 LTS,物有所值。)

问题原来是微不足道的,完全是我的错:上面的行在 switch() 语句中,break;下面的语句丢失了。下一个条件称为 XCirculateWindowsUp()。因此,聚焦并提高 window 会再次降低它。

糟糕。