如何从 xlib 中的事件中获取事件 window

How to get the event window from an event in xlib

我正在尝试实现一项功能,当用户将鼠标悬停在 child window 上时,该功能会更改它的颜色。为此,我需要接收特定 child windows 的 EnterNotify 事件。我得到的 EnterNotify 事件没有问题,但我不知道如何区分 EnterNotify 事件来自哪个 child window。如何从事件中获取事件 window?

if (event.type == EnterNotify && event.xcrossing.window == w11) {
            std::cout << "ENTER WINDOW" << std::endl;
        }

这就是我用 w11 作为 child window 尝试过的方法。当 EnterNotify 事件进入时,没有任何内容发送到输出,但是如果我将 event.xcrossing.window 等效项更改为 win(parent window),如下所示,它将产生作为 EnterNotify 的输出事件滚滚而来。谢谢。

if (event.type == EnterNotify && event.xcrossing.window == win) {
            std::cout << "ENTER WINDOW" << std::endl;
        }

事实证明,当您使用 XCreateSimpleWindow 创建 child window 时,parent window 的掩码输入不会转移到 child window。我所要做的就是更新每个 child window 以接收 EnterWindowMask 事件。