Also support xcb-keysyms < 0.3.4 when using bindsym (Thanks ch3ka)

This commit is contained in:
Michael Stapelberg 2009-11-02 23:15:08 +01:00
parent 0d327b7d17
commit 2a0b1adab9
1 changed files with 11 additions and 1 deletions

View File

@ -114,14 +114,23 @@ void grab_all_keys(xcb_connection_t *conn) {
continue; continue;
} }
#ifdef OLD_XCB_KEYSYMS_API
bind->number_keycodes = 1;
xcb_keycode_t code = xcb_key_symbols_get_keycode(keysyms, keysym);
LOG("Translated symbol \"%s\" to 1 keycode (%d)\n", bind->symbol, code);
grab_keycode_for_binding(conn, bind, code);
bind->translated_to = smalloc(sizeof(xcb_keycode_t));
memcpy(bind->translated_to, &code, sizeof(xcb_keycode_t));
#else
uint32_t last_keycode = 0;
xcb_keycode_t *keycodes = xcb_key_symbols_get_keycode(keysyms, keysym); xcb_keycode_t *keycodes = xcb_key_symbols_get_keycode(keysyms, keysym);
if (keycodes == NULL) { if (keycodes == NULL) {
LOG("Could not translate symbol \"%s\"\n", bind->symbol); LOG("Could not translate symbol \"%s\"\n", bind->symbol);
continue; continue;
} }
uint32_t last_keycode = 0;
bind->number_keycodes = 0; bind->number_keycodes = 0;
for (xcb_keycode_t *walk = keycodes; *walk != 0; walk++) { for (xcb_keycode_t *walk = keycodes; *walk != 0; walk++) {
/* We hope duplicate keycodes will be returned in order /* We hope duplicate keycodes will be returned in order
* and skip them */ * and skip them */
@ -135,6 +144,7 @@ void grab_all_keys(xcb_connection_t *conn) {
bind->translated_to = smalloc(bind->number_keycodes * sizeof(xcb_keycode_t)); bind->translated_to = smalloc(bind->number_keycodes * sizeof(xcb_keycode_t));
memcpy(bind->translated_to, keycodes, bind->number_keycodes * sizeof(xcb_keycode_t)); memcpy(bind->translated_to, keycodes, bind->number_keycodes * sizeof(xcb_keycode_t));
free(keycodes); free(keycodes);
#endif
} }
} }