commit 2b4157eccd649682c200de837193dd0a24129dc7 from: Anselm R Garbe date: Sat Aug 23 08:26:11 2008 UTC applied Peter Hartlich's initmodmap patch commit - 0f26de991f742d548e024a2dadcbfa3a7db8d4b2 commit + 2b4157eccd649682c200de837193dd0a24129dc7 blob - 66c0f87bcec49a0c2867a672831101ec8cd12d5a blob + 9138fe2af9c194afd33aa89fe0d5f4fc60b5bf46 --- LICENSE +++ LICENSE @@ -7,6 +7,7 @@ MIT/X Consortium License © 2007 Szabolcs Nagy © 2007 Christof Musik © 2007-2008 Enno Gottox Boland +© 2007-2008 Peter Hartlich © 2008 Martin Hurton Permission is hereby granted, free of charge, to any person obtaining a blob - ec872285a4c05c8b8de3e71d6f4259fc2f3e22a3 blob + fa8344a0f52906b2366ab190f90bdbc1ff0ef2ed --- dwm.c +++ dwm.c @@ -158,6 +158,7 @@ static Bool gettextprop(Window w, Atom atom, char *tex 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,17 +754,7 @@ grabkeys(void) { 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++) { code = XKeysymToKeycode(dpy, keys[i].keysym); @@ -813,6 +804,19 @@ initfont(const char *fontstr) { 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 isprotodel(Client *c) { int i, n; @@ -925,8 +929,10 @@ mappingnotify(XEvent *e) { XMappingEvent *ev = &e->xmapping; XRefreshKeyboardMapping(ev); - if(ev->request == MappingKeyboard) + if(ev->request == MappingKeyboard) { + initmodmap(); grabkeys(); + } } void @@ -1373,8 +1379,7 @@ setup(void) { XChangeWindowAttributes(dpy, root, CWEventMask|CWCursor, &wa); XSelectInput(dpy, root, wa.event_mask); - - /* grab keys */ + initmodmap(); grabkeys(); }