grabbuttons() and grabkeys() are now independent from prior numlockmask initialization 288cf78b
Anselm R Garbe · 2008-08-25 09:44 1 file(s) · +31 −23
dwm.c +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