2017-01-19 2 views
0

Je suis avec l'accaparement des clés xcb_grab_key_checked:Ungrabbing clavier n'est pas décrocher les clés - par 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"); 

Et ungrab toutes ces clés que j'utilise 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"); 

Cependant il ne semble pas à ungrab les clés. Est-ce par conception?

+1

Oui, c'est. Saisir une touche et saisir un clavier sont des actions assez différentes (saisir un clavier, ce n'est pas saisir toutes les touches). –

Répondre

1

Oui c'est voulu. Saisir une touche et saisir le clavier sont des opérations assez différentes. Saisir le clavier ne signifie pas saisir toutes les touches.

L'accrochage d'une touche fait, en fait, que cette touche déclenche une saisie au clavier. Les saisies de clés sont normalement utilisées pour implémenter des raccourcis clavier. Une saisie au clavier détourne tous les événements clés vers le client. Les saisies au clavier sont transitoires (par exemple, si un menu contextuel est affiché) et les saisies de touches sont à long terme (les raccourcis clavier sont rarement modifiés).

+0

Merci @ n.m. très souvent toujours répondre! – Noitidart