changed grabkeys, removed initmodmap
85da5378
1 file(s) · +21 −26
| 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); |
|
| 162 | 161 | static Bool isprotodel(Client *c); |
|
| 163 | 162 | static void keypress(XEvent *e); |
|
| 164 | 163 | static void killclient(const Arg *arg); |
|
| 752 | 751 | void |
|
| 753 | 752 | grabkeys(void) { |
|
| 754 | 753 | unsigned int i, j; |
|
| 755 | - | unsigned int modifiers[] = { 0, LockMask, numlockmask, numlockmask|LockMask }; |
|
| 756 | - | KeyCode code; |
|
| 754 | + | XModifierKeymap *modmap; |
|
| 755 | + | ||
| 756 | + | /* update modifier map */ |
|
| 757 | + | modmap = XGetModifierMapping(dpy); |
|
| 758 | + | for(i = 0; i < 8; i++) |
|
| 759 | + | for(j = 0; j < modmap->max_keypermod; j++) |
|
| 760 | + | if(modmap->modifiermap[i * modmap->max_keypermod + j] == XKeysymToKeycode(dpy, XK_Num_Lock)) |
|
| 761 | + | numlockmask = (1 << i); |
|
| 762 | + | XFreeModifiermap(modmap); |
|
| 763 | + | ||
| 764 | + | { /* grab keys */ |
|
| 765 | + | unsigned int modifiers[] = { 0, LockMask, numlockmask, numlockmask|LockMask }; |
|
| 766 | + | KeyCode code; |
|
| 757 | 767 | ||
| 758 | - | XUngrabKey(dpy, AnyKey, AnyModifier, root); |
|
| 759 | - | for(i = 0; i < LENGTH(keys); i++) { |
|
| 760 | - | code = XKeysymToKeycode(dpy, keys[i].keysym); |
|
| 761 | - | for(j = 0; j < LENGTH(modifiers); j++) |
|
| 762 | - | XGrabKey(dpy, code, keys[i].mod | modifiers[j], root, True, |
|
| 763 | - | GrabModeAsync, GrabModeAsync); |
|
| 768 | + | XUngrabKey(dpy, AnyKey, AnyModifier, root); |
|
| 769 | + | for(i = 0; i < LENGTH(keys); i++) { |
|
| 770 | + | code = XKeysymToKeycode(dpy, keys[i].keysym); |
|
| 771 | + | for(j = 0; j < LENGTH(modifiers); j++) |
|
| 772 | + | XGrabKey(dpy, code, keys[i].mod | modifiers[j], root, True, |
|
| 773 | + | GrabModeAsync, GrabModeAsync); |
|
| 774 | + | } |
|
| 764 | 775 | } |
|
| 765 | 776 | } |
|
| 766 | 777 | ||
| 802 | 813 | dc.font.descent = dc.font.xfont->descent; |
|
| 803 | 814 | } |
|
| 804 | 815 | dc.font.height = dc.font.ascent + dc.font.descent; |
|
| 805 | - | } |
|
| 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 | 816 | } |
|
| 819 | 817 | ||
| 820 | 818 | Bool |
|
| 929 | 927 | XMappingEvent *ev = &e->xmapping; |
|
| 930 | 928 | ||
| 931 | 929 | XRefreshKeyboardMapping(ev); |
|
| 932 | - | if(ev->request == MappingKeyboard) { |
|
| 933 | - | initmodmap(); |
|
| 930 | + | if(ev->request == MappingKeyboard) |
|
| 934 | 931 | grabkeys(); |
|
| 935 | - | } |
|
| 936 | 932 | } |
|
| 937 | 933 | ||
| 938 | 934 | void |
|
| 1379 | 1375 | XChangeWindowAttributes(dpy, root, CWEventMask|CWCursor, &wa); |
|
| 1380 | 1376 | XSelectInput(dpy, root, wa.event_mask); |
|
| 1381 | 1377 | ||
| 1382 | - | initmodmap(); |
|
| 1383 | 1378 | grabkeys(); |
|
| 1384 | 1379 | } |
|
| 1385 | 1380 | ||