Tôi đang cố gắng được thông báo về bất kỳ chuyển động con trỏ nào. Vì tôi không muốn chạy như trình quản lý cửa sổ, tôi cần đặt XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY | XCB_EVENT_MASK_POINTER_MOTION
trên tất cả các cửa sổ mà tôi thực hiện cả khi khởi động và khi tôi nhận được thông báo tạo sự kiện.XCB - Không nhận được chuyển động thông báo sự kiện trên tất cả các cửa sổ
Điều này dường như hoạt động tốt nói chung và tôi nhận được chuyển động thông báo sự kiện trên tất cả các cửa sổ. Tuy nhiên, bằng cách nào đó, điều này không đúng đối với các cửa sổ Google Chrome. Tôi đã kiểm tra mặt nạ sự kiện bằng cách truy vấn nó một cách rõ ràng sau đó và nó được đặt chính xác. Tôi cũng không thấy bất cứ điều gì bất thường trong mặt nạ nhân giống.
Điều gì có thể khiến Google Chrome không báo cáo chuyển động thông báo cho các sự kiện? AFAIK, giao thức X không cho phép ngoại trừ con trỏ hoạt động mà Chrome chắc chắn không có.
Đây là cách tôi đăng ký bản thân trên tất cả các cửa sổ hiện có. Tôi gọi register_events
trên cửa sổ gốc và bất cứ khi nào tôi nhận được một sự kiện tạo thông báo cũng như:
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);
}
Bạn nhận được gì từ 'xev' nếu bạn đính kèm nó vào cửa sổ Chome? –
@AndrewHenle Gắn nó và di chuyển con chuột của tôi ở đó, di chuyển nó xung quanh, để cho nó nghỉ ngơi và rời khỏi cửa sổ một lần nữa chỉ mang lại cho tôi Enter/LeaveNotify, KeymapNotify và FocusIn/Out (http://pastebin.com/XQ3ZkVhW) –
Tôi cũng nên chỉ ra rằng cùng một quan sát có thể được thực hiện với Chromium trên một máy khác. –