diff -r c4ecef7983b8 dwm.c --- a/dwm.c Mon Aug 18 19:28:34 2008 +0100 +++ b/dwm.c Tue Aug 19 15:36:05 2008 +0200 @@ -158,6 +158,7 @@ static void grabbuttons(Client *c, Bool focused); static void grabkeys(void); static void initfont(const char *fontstr); +static void initmodmap(void); static Bool isprotodel(Client *c); static void keypress(XEvent *e); static void killclient(const Arg *arg); @@ -753,16 +754,6 @@ unsigned int i, j; unsigned int modifiers[] = { 0, LockMask, numlockmask, numlockmask|LockMask }; KeyCode code; - XModifierKeymap *modmap; - - /* init modifier map */ - modmap = XGetModifierMapping(dpy); - for(i = 0; i < 8; i++) - for(j = 0; j < modmap->max_keypermod; j++) { - if(modmap->modifiermap[i * modmap->max_keypermod + j] == XKeysymToKeycode(dpy, XK_Num_Lock)) - numlockmask = (1 << i); - } - XFreeModifiermap(modmap); XUngrabKey(dpy, AnyKey, AnyModifier, root); for(i = 0; i < LENGTH(keys); i++) { @@ -811,6 +802,19 @@ dc.font.descent = dc.font.xfont->descent; } dc.font.height = dc.font.ascent + dc.font.descent; +} + +void +initmodmap(void) { + unsigned int i, j; + XModifierKeymap *modmap; + + modmap = XGetModifierMapping(dpy); + for(i = 0; i < 8; i++) + for(j = 0; j < modmap->max_keypermod; j++) + if(modmap->modifiermap[i * modmap->max_keypermod + j] == XKeysymToKeycode(dpy, XK_Num_Lock)) + numlockmask = (1 << i); + XFreeModifiermap(modmap); } Bool @@ -925,8 +929,10 @@ XMappingEvent *ev = &e->xmapping; XRefreshKeyboardMapping(ev); - if(ev->request == MappingKeyboard) + if(ev->request == MappingKeyboard) { + initmodmap(); grabkeys(); + } } void @@ -1373,8 +1379,7 @@ XChangeWindowAttributes(dpy, root, CWEventMask|CWCursor, &wa); XSelectInput(dpy, root, wa.event_mask); - - /* grab keys */ + initmodmap(); grabkeys(); }