让我们假设有几个窗口是可见的——我需要实现一个机制来阻止选定窗口的事件,例如当用户单击 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 不能用于捕获特定窗口的鼠标事件。
您对如何实现这种机制有一些想法吗?
最佳答案
捕获鼠标指针并将事件传递到目标窗口。
关于linux x11 窗口管理器 - 阻止鼠标事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30238155/