让我们假设一些窗口是可见的 - 我需要实现阻止所选窗口事件的机制,例如当用户单击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不能用于特定窗口的捕获鼠标事件。
您对如何实施此类机制有一些想法吗?
答案 0 :(得分:2)
抓住鼠标指针并将事件传递到目标窗口。