Я хочу написать простую программу Xlib, изменяющую поведение мыши (чтобы привести пример, инвертируйте вертикальное движение). У меня проблема с захватом событий.захват мыши с Xlib
Я хотел бы код для
- изменения захвата в положение контроллеров (переместить мышь вверх,
MotionEvent
) - вычислить новое положение курсора (
new_x -= difference_x
) - установить новое положение курсора (перемещать указатель down,
XWarpPointer
, предотвратите создание событий здесь)
Код ниже должен фиксировать событие движения каждый т ime мышь перемещается, но она генерирует событие только тогда, когда указатель перемещается из одного окна в другое ... Как захватить все события движения?
#include "X11/Xlib.h"
#include "stdio.h"
int main(int argc, char *argv[])
{
Display *display;
Window root_window;
XEvent event;
display = XOpenDisplay(0);
root_window = XRootWindow(display, 0);
XSelectInput(display, root_window, PointerMotionMask);
while(1) {
XNextEvent(display, &event);
switch(event.type) {
case MotionNotify:
printf("x %d y %d\n", event.xmotion.x, event.xmotion.y);
break;
}
}
return 0;
}
Похожие:
X11: How do I REALLY grab the mouse pointer?
Спасибо. В идеальном случае я хотел бы захватить события мыши «раньше», они обрабатываются входным уровнем X (но беспорядок с драйверами мыши был бы слишком низким, вероятно). Знаете ли вы, возможно ли это? –
X11 обычно не обеспечивает такой уровень контроля; если вы не можете сделать это с помощью XInput API, вам действительно нужно будет сделать это на уровне драйвера или, по крайней мере, серверного плагина. X11 не очень гибкий в этом отношении. – geekosaur