Я пытаюсь написать плагин для игры, и мне нужно прочитать состояние кнопки мыши, а не блокировать или «съедать» события. Непосредственное чтение / dev / input не является опцией из-за доступа root. Чем ближе я подошел к тому, что мне нужно, так это следующий код:
#include <stdio.h>
#include <string.h>
#include <X11/Xlib.h>
int main (int argc, char **argv)
{
Display *display;
XEvent ev;
display = XOpenDisplay(NULL);
Window window = RootWindow(display, XDefaultScreen(display));
XSelectInput(display, window, ButtonPressMask | ButtonReleaseMask);
XGrabButton(display, Button1, AnyModifier, window, False, ButtonPressMask | ButtonReleaseMask, GrabModeSync, GrabModeAsync, None, None);
while(1) {
XAllowEvents(display, ReplayPointer, CurrentTime);
if(XCheckTypedEvent(display, ButtonPress ,&ev))
{
printf("Button pressed\n");
}
else if(XCheckTypedEvent(display, ButtonRelease ,&ev))
{
printf("Button relised\n");
}
}
return 0;
}
Проблема в том, что, установив GrabModeSyn c и используя XAllowEvents с ReplayPointer, я могу передать событие, но получаю только ButtonPress , ButtonRelease никогда не захватывается, но мне это нужно. GrabModeAsyn c фиксирует оба события, но «съедает» щелчки. Кто-нибудь может предложить решение? 10x