applied Peter Hartlich's initmodmap patch
2b4157ec
2 file(s) · +19 −13
| 7 | 7 | © 2007 Szabolcs Nagy <nszabolcs at gmail dot com> |
|
| 8 | 8 | © 2007 Christof Musik <christof at sendfax dot de> |
|
| 9 | 9 | © 2007-2008 Enno Gottox Boland <gottox at s01 dot de> |
|
| 10 | + | © 2007-2008 Peter Hartlich <sgkkr at hartlich dot com> |
|
| 10 | 11 | © 2008 Martin Hurton <martin dot hurton at gmail dot com> |
|
| 11 | 12 | ||
| 12 | 13 | Permission is hereby granted, free of charge, to any person obtaining a |
| 158 | 158 | static void grabbuttons(Client *c, Bool focused); |
|
| 159 | 159 | static void grabkeys(void); |
|
| 160 | 160 | static void initfont(const char *fontstr); |
|
| 161 | + | static void initmodmap(void); |
|
| 161 | 162 | static Bool isprotodel(Client *c); |
|
| 162 | 163 | static void keypress(XEvent *e); |
|
| 163 | 164 | static void killclient(const Arg *arg); |
|
| 753 | 754 | unsigned int i, j; |
|
| 754 | 755 | unsigned int modifiers[] = { 0, LockMask, numlockmask, numlockmask|LockMask }; |
|
| 755 | 756 | KeyCode code; |
|
| 756 | - | XModifierKeymap *modmap; |
|
| 757 | - | ||
| 758 | - | /* init modifier map */ |
|
| 759 | - | modmap = XGetModifierMapping(dpy); |
|
| 760 | - | for(i = 0; i < 8; i++) |
|
| 761 | - | for(j = 0; j < modmap->max_keypermod; j++) { |
|
| 762 | - | if(modmap->modifiermap[i * modmap->max_keypermod + j] == XKeysymToKeycode(dpy, XK_Num_Lock)) |
|
| 763 | - | numlockmask = (1 << i); |
|
| 764 | - | } |
|
| 765 | - | XFreeModifiermap(modmap); |
|
| 766 | 757 | ||
| 767 | 758 | XUngrabKey(dpy, AnyKey, AnyModifier, root); |
|
| 768 | 759 | for(i = 0; i < LENGTH(keys); i++) { |
|
| 813 | 804 | dc.font.height = dc.font.ascent + dc.font.descent; |
|
| 814 | 805 | } |
|
| 815 | 806 | ||
| 807 | + | void |
|
| 808 | + | initmodmap(void) { |
|
| 809 | + | unsigned int i, j; |
|
| 810 | + | XModifierKeymap *modmap; |
|
| 811 | + | ||
| 812 | + | modmap = XGetModifierMapping(dpy); |
|
| 813 | + | for(i = 0; i < 8; i++) |
|
| 814 | + | for(j = 0; j < modmap->max_keypermod; j++) |
|
| 815 | + | if(modmap->modifiermap[i * modmap->max_keypermod + j] == XKeysymToKeycode(dpy, XK_Num_Lock)) |
|
| 816 | + | numlockmask = (1 << i); |
|
| 817 | + | XFreeModifiermap(modmap); |
|
| 818 | + | } |
|
| 819 | + | ||
| 816 | 820 | Bool |
|
| 817 | 821 | isprotodel(Client *c) { |
|
| 818 | 822 | int i, n; |
|
| 925 | 929 | XMappingEvent *ev = &e->xmapping; |
|
| 926 | 930 | ||
| 927 | 931 | XRefreshKeyboardMapping(ev); |
|
| 928 | - | if(ev->request == MappingKeyboard) |
|
| 932 | + | if(ev->request == MappingKeyboard) { |
|
| 933 | + | initmodmap(); |
|
| 929 | 934 | grabkeys(); |
|
| 935 | + | } |
|
| 930 | 936 | } |
|
| 931 | 937 | ||
| 932 | 938 | void |
|
| 1373 | 1379 | XChangeWindowAttributes(dpy, root, CWEventMask|CWCursor, &wa); |
|
| 1374 | 1380 | XSelectInput(dpy, root, wa.event_mask); |
|
| 1375 | 1381 | ||
| 1376 | - | ||
| 1377 | - | /* grab keys */ |
|
| 1382 | + | initmodmap(); |
|
| 1378 | 1383 | grabkeys(); |
|
| 1379 | 1384 | } |
|
| 1380 | 1385 | ||