Я реализовал виджет горизонтального разделителя в Xlib. Я пытаюсь схватить мышь, когда пользователь щелкает и перетаскивает полосу разделения (чтобы пользователь мог динамически перемещать разделение и, таким образом, изменять размер окон по обе стороны от полосы разделения).
Я использовал XGrabPointer()
после получения щелчка левой кнопкой мыши в надежде, что все будущие движения мыши (перетаскивание) будут перенаправляться в окно разделителя до тех пор, пока левая кнопка не будет отпущена.
К сожалению, похоже, это так не работает. Если пользователь перетаскивает слишком быстро и указатель мыши входит в одно из окон по обе стороны от разделения, сообщения MotionEvent перенаправляются в это (дочернее) окно, а не в окно-разделитель.
Что я сделал не так? Мой XGrabPointer()
вызов выглядит следующим образом:
::XGrabPointer(mDisplay, window, True,
ButtonPressMask |
ButtonReleaseMask |
PointerMotionMask |
FocusChangeMask |
EnterWindowMask |
LeaveWindowMask,
GrabModeAsync,
GrabModeAsync,
RootWindow(mDisplay, DefaultScreen(mDisplay)),
None,
CurrentTime);