From: Reginald Kennedy Date: Fri, 8 Nov 2013 20:15:52 +0000 (+0800) Subject: Fix segfault when X keyboard map does not include Num_Lock. X-Git-Url: https://jasonwoof.com/gitweb/?p=spectrwm.git;a=commitdiff_plain;h=b2c1286094d53b3bab5abae50191c3d7d294960e Fix segfault when X keyboard map does not include Num_Lock. Fixes #21 --- diff --git a/spectrwm.c b/spectrwm.c index 113452f..00972db 100644 --- a/spectrwm.c +++ b/spectrwm.c @@ -6818,9 +6818,11 @@ updatenumlockmask(void) + j]; keycode = xcb_key_symbols_get_keycode(syms, XK_Num_Lock); - if (kc == *keycode) - numlockmask = (1 << i); - free(keycode); + if (keycode) { + if (kc == *keycode) + numlockmask = (1 << i); + free(keycode); + } } } free(modmap_r); @@ -8771,10 +8773,22 @@ mapnotify(xcb_map_notify_event_t *e) void mappingnotify(xcb_mapping_notify_event_t *e) { + struct ws_win *w; + int i, j, num_screens; + xcb_refresh_keyboard_mapping(syms, e); - if (e->request == XCB_MAPPING_KEYBOARD) + if (e->request == XCB_MAPPING_KEYBOARD) { grabkeys(); + + /* Regrab buttons on all managed windows. */ + num_screens = get_screen_count(); + for (i = 0; i < num_screens; i++) + for (j = 0; j < workspace_limit; j++) + TAILQ_FOREACH(w, &screens[i].ws[j].winlist, + entry) + grabbuttons(w); + } } void