我試圖在根窗口上偵聽觸摸事件(TOUCH_BEGIN,TOUCH_UPDATE,TOUCH_END和TOUCH_OWNERSHIP)。
觸摸事件不直接集成到XCB中,所以我必須使用輸入擴展名(libxcb-xinput)。如何使用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);
核心拋出一個「大整數隱截斷爲無符號類型」在編譯時,只是一個「失敗的請求警告:(空)(空):0x000000D5「運行時出錯。
(我很新的C,特別是XCB,所以請原諒任何明顯的錯誤)
通過閱讀關於鏈接示例的註釋(「使用XInput非侵入式抓取輸入事件」),我猜測這會註冊觸摸事件,而不會阻止其他窗口接收它們,而我的目標是抓取事件,所以其他窗口只有在我拒絕這些事件時纔會得到它們(對不起,我沒有在我的問題中說清楚)。 現在我已經找到了另一個解決方案,我將立即發佈。 此外,xcb-xinput代碼是不可讀的,因爲據我所知,它是通過協議規範以某種方式自動生成的;) – freundTech