захват мыши с помощью Xlib

Я хочу написать простую программу Xlib, изменяющую поведение мыши (, чтобы привести пример, инвертировать вертикальное движение ). У меня проблема с записью событий.

Я хочу, чтобы код

  • фиксировал изменения в положении контроллеров (Я перемещаю мышь вверх,MotionEvent)
  • вычисляю новую позицию курсора(new_x -= difference_x)
  • задаю новую позицию курсора (перемещаю указатель вниз, XWarpPointer, предотвратить генерацию событий здесь)

Приведенный ниже код должен захватывать событие движения каждый раз, когда перемещается мышь, но генерирует событие только тогда, когда указатель перемещается из одного окна в другое... Как зафиксировать все события движения?

#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 :Как ДЕЙСТВИТЕЛЬНО захватить указатель мыши?

6
задан Community 23 May 2017 в 12:09
поделиться