2017-01-19 15 views
0

Я схватив ключи с xcb_grab_key_checked:Ungrabbing клавиатура не отрывает ключи - от api design?

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"); 

И ungrab всех этих ключей я использую 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"); 

Однако он не кажется, ungrab ключей. Это по дизайну?

+1

Да, это так. Захват ключа и захват клавиатуры - это разные действия (захват клавиатуры не захватывает все клавиши). –

ответ

1

Да, это по дизайну. Захват ключа и захват клавиатуры - это разные операции. Захват клавиатуры не означает захват всех клавиш.

Ухватить ключ, фактически, заставляя этот ключ инициировать захват клавиатуры. Ключевые грейферы обычно используются для реализации горячих клавиш. Клавиатура захватывает все ключевые события клиенту. Клавиши захвата кратковременны (например, когда отображается всплывающее меню), а захват ключей длительный (горячие клавиши редко меняются).

+0

Спасибо @ н.м. очень всегда отвечаю! – Noitidart