gpt4 book ai didi

c - 如何使用 libxcb-xinput 注册事件

转载 作者:太空狗 更新时间:2023-10-29 12:12:07 31 4
gpt4 key购买 nike

我正在尝试监听根窗口上的触摸事件(TOUCH_BEGIN、TOUCH_UPDATE、TOUCH_END 和 TOUCH_OWNERSHIP)。
触摸事件没有直接集成到 XCB 中,所以我必须使用输入扩展 (libxcb-xinput)。

我已经设法为来自输入扩展的事件设置了一个事件监听器,但我不知道如何注册我想监听的事件。

我尝试使用 xcb_input_xi_select_events(),但是该函数采用 xcb_input_event_mask_t 类型的参数,而包含事件掩码的枚举类型为 xcb_input_xi_event_mask_t 并且没有明显的方法来转换它们。

出于这个原因,我认为 xcb_input_xi_select_events() 是错误的函数,但我不知道应该使用哪个函数。

我的非工作代码目前看起来像这样:

xcb_input_event_mask_t mask[] = {
XCB_INPUT_XI_EVENT_MASK_TOUCH_BEGIN
| XCB_INPUT_XI_EVENT_MASK_TOUCH_END
| XCB_INPUT_XI_EVENT_MASK_TOUCH_UPDATE
| XCB_INPUT_XI_EVENT_MASK_TOUCH_OWNERSHIP
};
xcb_input_xi_select_events(dpy, root, 4, mask);

核心在编译时抛出“大整数隐式截断为无符号类型”警告,在运行时仅抛出“请求失败:(null),(null):0x000000D5”错误。

(我对 C 尤其是 XCB 很陌生,所以请原谅任何明显的错误)

最佳答案

需要xcb_input_event_mask_txcb_input_xi_event_mask_t一起使用,方法如下:

struct {
xcb_input_event_mask_t head; // describes the subsequent xcb_input_xi_event_mask_t (or an array thereof)
xcb_input_xi_event_mask_t mask;
} mask;

mask.head.deviceid = XCB_INPUT_DEVICE_ALL;
mask.head.mask_len = sizeof(mask.mask) / sizeof(uint32_t);

mask.mask = XCB_INPUT_XI_EVENT_MASK_TOUCH_BEGIN
| XCB_INPUT_XI_EVENT_MASK_TOUCH_END
| XCB_INPUT_XI_EVENT_MASK_TOUCH_UPDATE
| XCB_INPUT_XI_EVENT_MASK_TOUCH_OWNERSHIP;

xcb_input_xi_select_events(dpy, root, 1, &mask.head);

免责声明:我从未使用过这个。我在网上找到了一个使用示例 here .我试图根据 xcb_input_xi_select_events 的来源验证此用法 here但它的代码咒骂删除不可读。我完全不知道人们应该如何使用这个库。

关于c - 如何使用 libxcb-xinput 注册事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39641675/

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