grabbuttons() and grabkeys() are now independent from prior numlockmask initialization
288cf78b
1 file(s) · +31 −23
| 191 | 191 | static void unmapnotify(XEvent *e); |
|
| 192 | 192 | static void updatebar(void); |
|
| 193 | 193 | static void updategeom(void); |
|
| 194 | + | static void updatenumlockmask(void); |
|
| 194 | 195 | static void updatesizehints(Client *c); |
|
| 195 | 196 | static void updatetitle(Client *c); |
|
| 196 | 197 | static void updatewmhints(Client *c); |
|
| 735 | 736 | ||
| 736 | 737 | void |
|
| 737 | 738 | grabbuttons(Client *c, Bool focused) { |
|
| 738 | - | unsigned int i, j; |
|
| 739 | - | unsigned int modifiers[] = { 0, LockMask, numlockmask, numlockmask|LockMask }; |
|
| 740 | - | ||
| 741 | - | XUngrabButton(dpy, AnyButton, AnyModifier, c->win); |
|
| 742 | - | if(focused) { |
|
| 743 | - | for(i = 0; i < LENGTH(buttons); i++) |
|
| 744 | - | if(buttons[i].click == ClkClientWin) |
|
| 745 | - | for(j = 0; j < LENGTH(modifiers); j++) |
|
| 746 | - | XGrabButton(dpy, buttons[i].button, buttons[i].mask | modifiers[j], c->win, False, BUTTONMASK, GrabModeAsync, GrabModeSync, None, None); |
|
| 747 | - | } else |
|
| 748 | - | XGrabButton(dpy, AnyButton, AnyModifier, c->win, False, |
|
| 749 | - | BUTTONMASK, GrabModeAsync, GrabModeSync, None, None); |
|
| 739 | + | updatenumlockmask(); |
|
| 740 | + | { |
|
| 741 | + | unsigned int i, j; |
|
| 742 | + | unsigned int modifiers[] = { 0, LockMask, numlockmask, numlockmask|LockMask }; |
|
| 743 | + | XUngrabButton(dpy, AnyButton, AnyModifier, c->win); |
|
| 744 | + | if(focused) { |
|
| 745 | + | for(i = 0; i < LENGTH(buttons); i++) |
|
| 746 | + | if(buttons[i].click == ClkClientWin) |
|
| 747 | + | for(j = 0; j < LENGTH(modifiers); j++) |
|
| 748 | + | XGrabButton(dpy, buttons[i].button, buttons[i].mask | modifiers[j], c->win, False, BUTTONMASK, GrabModeAsync, GrabModeSync, None, None); |
|
| 749 | + | } else |
|
| 750 | + | XGrabButton(dpy, AnyButton, AnyModifier, c->win, False, |
|
| 751 | + | BUTTONMASK, GrabModeAsync, GrabModeSync, None, None); |
|
| 752 | + | } |
|
| 750 | 753 | } |
|
| 751 | 754 | ||
| 752 | 755 | void |
|
| 753 | 756 | grabkeys(void) { |
|
| 754 | - | unsigned int i, j; |
|
| 755 | - | XModifierKeymap *modmap; |
|
| 756 | - | ||
| 757 | - | /* update modifier map */ |
|
| 758 | - | modmap = XGetModifierMapping(dpy); |
|
| 759 | - | for(i = 0; i < 8; i++) |
|
| 760 | - | for(j = 0; j < modmap->max_keypermod; j++) |
|
| 761 | - | if(modmap->modifiermap[i * modmap->max_keypermod + j] == XKeysymToKeycode(dpy, XK_Num_Lock)) |
|
| 762 | - | numlockmask = (1 << i); |
|
| 763 | - | XFreeModifiermap(modmap); |
|
| 764 | - | ||
| 757 | + | updatenumlockmask(); |
|
| 765 | 758 | { /* grab keys */ |
|
| 759 | + | unsigned int i, j; |
|
| 766 | 760 | unsigned int modifiers[] = { 0, LockMask, numlockmask, numlockmask|LockMask }; |
|
| 767 | 761 | KeyCode code; |
|
| 768 | 762 | ||
| 1573 | 1567 | ||
| 1574 | 1568 | /* bar position */ |
|
| 1575 | 1569 | by = showbar ? (topbar ? wy - bh : wy + wh) : -bh; |
|
| 1570 | + | } |
|
| 1571 | + | ||
| 1572 | + | void |
|
| 1573 | + | updatenumlockmask(void) { |
|
| 1574 | + | unsigned int i, j; |
|
| 1575 | + | XModifierKeymap *modmap; |
|
| 1576 | + | ||
| 1577 | + | numlockmask = 0; |
|
| 1578 | + | modmap = XGetModifierMapping(dpy); |
|
| 1579 | + | for(i = 0; i < 8; i++) |
|
| 1580 | + | for(j = 0; j < modmap->max_keypermod; j++) |
|
| 1581 | + | if(modmap->modifiermap[i * modmap->max_keypermod + j] == XKeysymToKeycode(dpy, XK_Num_Lock)) |
|
| 1582 | + | numlockmask = (1 << i); |
|
| 1583 | + | XFreeModifiermap(modmap); |
|
| 1576 | 1584 | } |
|
| 1577 | 1585 | ||
| 1578 | 1586 | void |
|