Xlibに水平スプリッターウィジェットを実装しました。ユーザーがスプリッターバーをクリックしてドラッグしたときにマウスをつかもうとしています(ユーザーがスプリットを動的に移動して、スプリッターバーの両側のウィンドウのサイズを変更できるようにするため)。
XGrabPointer()
左ボタンが離されるまで、今後のすべてのマウスの動き(ドラッグ)がスプリッターウィンドウに転送されることを期待して、左クリックを受け取った後 に使用しました。
残念ながら、そのようには機能しないようです。ユーザーがドラッグする速度が速すぎて、マウスポインターが分割のいずれかの側にあるウィンドウのいずれかに入ると、MotionEventメッセージはスプリッターウィンドウではなく、その(子)ウィンドウに転送されます。
私は何を間違えましたか?私のXGrabPointer()
電話は次のとおりです。
::XGrabPointer(mDisplay, window, True,
ButtonPressMask |
ButtonReleaseMask |
PointerMotionMask |
FocusChangeMask |
EnterWindowMask |
LeaveWindowMask,
GrabModeAsync,
GrabModeAsync,
RootWindow(mDisplay, DefaultScreen(mDisplay)),
None,
CurrentTime);