gpt4 book ai didi

pointers - X11:如何真正捕获鼠标指针?

转载 作者:行者123 更新时间:2023-12-02 20:36:13 25 4
gpt4 key购买 nike

我在 Xlib 中实现了一个水平分割器小部件。当用户单击并拖动分割栏时,我试图捕获鼠标(以便用户可以动态移动分割,从而调整分割栏两侧的窗口大小)。

我在收到左键单击后使用了XGrabPointer(),希望所有 future 的鼠标运动(拖动)都将转移到拆分窗口,直到释放左键。

不幸的是,它似乎并不是这样工作的。如果用户拖动速度太快并且鼠标指针进入拆分任一侧的一个窗口,则 MotionEvent 消息将转移到该(子)窗口而不是拆分窗口。

我做错了什么?我的 XGrabPointer() 调用如下:

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

最佳答案

我几乎不好意思承认这一点,但答案其实很简单,只需将第三个参数 (owner_events) 从 True 更改为 False 即可。

来自Xlib tutorial/reference at tronche.com :

If owner_events is False, all generated pointer events are reported with respect to grab_window and are reported only if selected by event_mask. If owner_events is True and if a generated pointer event would normally be reported to this client, it is reported as usual. Otherwise, the event is reported with respect to the grab_window and is reported only if selected by event_mask.

我仍然不确定我完全理解 True 情况的行为,但我的解释是,如果 True,其他 X 程序(即其他进程创建的窗口)将被禁止接收 XEvents,但那些会点击您的进程创建的任何窗口都会正常传递。在错误的情况下,将报告与您选择的特定窗口相关的所有事件。这就是我所追求的行为。

关于pointers - X11:如何真正捕获鼠标指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2792954/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com