我正在嘗試收到任何指針動作的通知。由於我不想作爲窗口管理器運行,因此我需要在啓動時以及獲取創建通知事件時在所有窗口上設置XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY | XCB_EVENT_MASK_POINTER_MOTION
。XCB - 未收到所有窗口上的動作通知事件
這似乎是工作總體不錯,我收到議案上的所有窗口通知事件。但是,不管怎樣,Google Chrome瀏覽器窗口都不適用。我通過明確查詢事件掩碼來檢查事件掩碼並正確設置。我也沒有看到傳播掩模中的任何異常。
什麼會導致谷歌瀏覽器不報告議案通知的事件? AFAIK,X協議不允許這樣,除了Chrome肯定沒有的活動指針抓取。
這裏是我自己註冊的所有現有的窗口。我打電話register_events
根窗口上,每當我收到通知創建活動,以及:
static void register_events(xcb_window_t window) {
xcb_void_cookie_t cookie = xcb_change_window_attributes_checked(connection,
window, XCB_CW_EVENT_MASK, (uint32_t[]) { XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY | XCB_EVENT_MASK_POINTER_MOTION | XCB_EVENT_MASK_LEAVE_WINDOW });
xcb_generic_error_t *error = xcb_request_check(connection, cookie);
if (error != NULL) {
xcb_disconnect(connection);
errx(EXIT_FAILURE, "could not subscribe to events on a window, bailing out");
}
}
static void register_existing_windows(void) {
xcb_query_tree_reply_t *reply;
if ((reply = xcb_query_tree_reply(connection, xcb_query_tree(connection, root), 0)) == NULL) {
return;
}
int len = xcb_query_tree_children_length(reply);
xcb_window_t *children = xcb_query_tree_children(reply);
for (int i = 0; i < len; i++) {
register_events(children[i]);
}
xcb_flush(connection);
free(reply);
}
如果將其附加到Chome窗口,從xev獲得什麼? –
@AndrewHenle附加它有移動我的鼠標,移動它,讓它休息,再次離開窗口只給我輸入/ LeaveNotify,KeymapNotify和的focusIn /輸出(http://pastebin.com/XQ3ZkVhW) –
我也要指出在不同的機器上可以使用Chromium進行相同的觀察。 –