linux x11 window 管理器 - 阻止鼠标事件

linux x11 window manager - blocking mouse events

让我们假设一些 windows 是可见的 - 我需要实施机制来阻止选定 windows 的事件,例如当用户单击 window_nr1 中的按钮并且window_nr2 当用户单击 window_nr3 事件中的按钮时,什么也没有发生。合成 window 管理器渲染纹理和 XServer 实际的 window 位置可能不同,但这是某种解决方法,所以我们还假设 window 纹理在没有转换的情况下渲染。在 Compiz 中,XGrabPointer 用于捕获鼠标事件:

XGrabPointer (privateScreen.dpy, privateScreen.eventManager.getGrabWindow(), true,
              ButtonReleaseMask | ButtonPressMask | PointerMotionMask ,
              GrabModeAsync, GrabModeAsync, privateScreen.rootWindow(), 
              cursor, CurrentTime);

grab window 的创建如下所示:

grabWindow = XCreateWindow (dpy, root, -100, -100, 1, 1, 0,
                            CopyFromParent, InputOnly, CopyFromParent,
                            CWOverrideRedirect | CWEventMask,
                            attrib);

在那种情况下,整个屏幕的鼠标事件都被捕获(即仅重定向到 window 管理器事件循环),看起来 XGrabPointer 不能用于捕获特定鼠标事件window.

您对如何实施这种机制有一些想法吗?

抓住鼠标指针并将事件传递到目的地window。