Я пытаюсь прослушивать события касания (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, поэтому простите за очевидные ошибки)