X11: Como realmente pego o ponteiro do mouse?

Implementei um widget de divisão horizontal no Xlib. Estou tentando pegar o mouse quando o usuário clica e arrasta a barra divisória (para que o usuário possa mover dinamicamente a divisão e redimensionar as janelas dos dois lados da barra divisória).

Eu useiXGrabPointer() depois de receber um clique esquerdo, na esperança de que todo o movimento futuro do mouse (arrastar) seja desviado para a janela divisória até que o botão esquerdo seja liberado.

Infelizmente, não parece funcionar assim. Se o usuário arrastar-se muito rapidamente e o ponteiro do mouse entrar em uma das janelas dos dois lados da divisão, as mensagens do MotionEvent serão desviadas para a janela (filho) em vez da janela do divisor.

O que eu fiz errado? MinhasXGrabPointer() chamada é a seguinte:

::XGrabPointer(mDisplay, window, True,
               ButtonPressMask |
                 ButtonReleaseMask |
                 PointerMotionMask |
                 FocusChangeMask |
                 EnterWindowMask |
                  LeaveWindowMask,
               GrabModeAsync,
               GrabModeAsync,
               RootWindow(mDisplay, DefaultScreen(mDisplay)),
               None,
               CurrentTime);

questionAnswers(1)

yourAnswerToTheQuestion