applied Peter Hartlich's initmodmap patch 2b4157ec
Anselm R Garbe · 2008-08-23 09:26 2 file(s) · +19 −13
LICENSE +1 −0
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
dwm.c +18 −13
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