capturar o mouse com o Xlib

Eu quero escrever um programa Xlib simples alterando o comportamento do mouse (para dar um exemplo, inverter o movimento vertical). Eu tenho um problema com a captura dos eventos.

Eu gostaria que o código

capturar alterações na posição dos controladores (movo o mouse para cima,MotionEvent)calcular a nova posição do cursor (new_x -= difference_x)definir a nova posição do cursor (mova o ponteiro para baixo,XWarpPointer, impedir a geração de eventos aqui)

O código abaixo deve capturar um evento de movimento toda vez que o mouse for movido, mas ele gera o evento somente quando o ponteiro se move de uma janela para outra ... Como capturar todos os eventos de movimento?

#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;
}

Relacionado:

X11: Como eu REALMENTE pego o ponteiro do mouse?