From 7f2718bf2a6c814e138f4f70d5b04ef20a46eb8a Mon Sep 17 00:00:00 2001 From: David Hill Date: Thu, 12 Jul 2012 22:40:07 -0400 Subject: [PATCH] convert updatenumlockmask to XCB --- spectrwm.c | 37 +++++++++++++++++++++++++++---------- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/spectrwm.c b/spectrwm.c index cdaaebc..9e35632 100644 --- a/spectrwm.c +++ b/spectrwm.c @@ -5527,19 +5527,36 @@ setkeymapping(char *selector, char *value, int flags) void updatenumlockmask(void) { - unsigned int i, j; - XModifierKeymap *modmap; + unsigned int i, j; + xcb_get_modifier_mapping_reply_t *modmap_r; + xcb_keycode_t *modmap, kc; + xcb_key_symbols_t *syms; DNPRINTF(SWM_D_MISC, "updatenumlockmask\n"); numlockmask = 0; - modmap = XGetModifierMapping(display); - for (i = 0; i < 8; i++) - for (j = 0; j < modmap->max_keypermod; j++) - if (modmap->modifiermap[i * modmap->max_keypermod + j] - == XKeysymToKeycode(display, XK_Num_Lock)) - numlockmask = (1 << i); - - XFreeModifiermap(modmap); + + syms = xcb_key_symbols_alloc(conn); + if (!syms) + return; + + modmap_r = xcb_get_modifier_mapping_reply(conn, + xcb_get_modifier_mapping(conn), + NULL); + if (modmap_r) { + modmap = xcb_get_modifier_mapping_keycodes(modmap_r); + for (i = 0; i < 8; i++) { + for (j = 0; j < modmap_r->keycodes_per_modifier; j++) { + kc = modmap[i * modmap_r->keycodes_per_modifier + + j]; + + if (kc == *((xcb_keycode_t *)xcb_key_symbols_get_keycode(syms, + XK_Num_Lock))) + numlockmask = (1 << i); + } + } + free(modmap_r); + } + xcb_key_symbols_free(syms); } void -- 1.7.10.4