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

时间:2015-05-14 13:04:38

标签: linux x11 xlib window-managers

让我们假设一些窗口是可见的 - 我需要实现阻止所选窗口事件的机制,例如当用户单击window_nr1中的按钮而window_nr2没有任何反应时,但是当用户单击window_nr3事件中的按钮时处理。合成窗口管理器渲染纹理和XServer实际的窗口位置可能不同,但这是某种解决方法,所以我们还假设窗口纹理在没有转换的情况下呈现。在Compiz中,XGrabPointer用于捕获鼠标事件:

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

其中抓取窗口的创建如下所示:

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

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

您对如何实施此类机制有一些想法吗?

1 个答案:

答案 0 :(得分:2)

抓住鼠标指针并将事件传递到目标窗口。