没有敲键的键盘 - 通过api设计?

时间:2017-01-19 01:37:31

标签: x11 xlib xcb

我正在使用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");

然而它似乎没有敲开钥匙。这是设计吗?

1 个答案:

答案 0 :(得分:1)

是的,这是设计上的。抓住钥匙并抓住键盘是相当不同的操作。抓住键盘并不意味着抓住所有按键。

实际上,抓住一把钥匙就是让钥匙启动键盘抓取。关键抓取通常用于实现热键。键盘抓取将所有关键事件转移到客户端。键盘抓取是暂时的(最后一次,例如弹出菜单显示),关键抓取是长期的(热键很少更改)。