changed grabkeys, removed initmodmap 85da5378
Anselm R Garbe · 2008-08-23 09:31 1 file(s) · +21 −26
dwm.c +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