我正在使用xcb_grab_key_checked
抓取密钥:
xcb_void_cookie_t grabc = xcb_grab_key_checked(connection, 1, rootwin, grabmodflag, keycode, XCB_GRAB_MODE_ASYNC, XCB_GRAB_MODE_ASYNC);
xcb_generic_error_t *grabe = xcb_request_check(connection, grabc);
if (grabe == NULL) debug_log("succeessfully grabbed");
为了取消所有这些键,我使用xcb_ungrab_keyboard_checked
:
xcb_void_cookie_t ungrabc = xcb_ungrab_keyboard_checked(connection, XCB_CURRENT_TIME);
xcb_generic_error_t* ungrabe = xcb_request_check(connection, ungrabc);
if (ungrabe == NULL) debug_log("succesfully ungrabbed");
然而它似乎没有敲开钥匙。这是设计吗?
答案 0 :(得分:1)
是的,这是设计上的。抓住钥匙并抓住键盘是相当不同的操作。抓住键盘并不意味着抓住所有按键。
实际上,抓住一把钥匙就是让钥匙启动键盘抓取。关键抓取通常用于实现热键。键盘抓取将所有关键事件转移到客户端。键盘抓取是暂时的(最后一次,例如弹出菜单显示),关键抓取是长期的(热键很少更改)。