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);