applied Cedric's NumLock patch 57416bee
arg@10ksloc.org · 2006-08-01 12:41 1 file(s) · +17 −1
event.c +17 −1
57 57
	{ MODKEY|ShiftMask,	XK_w,		spawn,		{ .argv = browse } },
58 58
};
59 59
60 +
#define NumLockMask Mod2Mask
61 +
unsigned int valid_mask =  255 &  ~( NumLockMask | LockMask);
62 +
60 63
/* END CUSTOMIZE */
61 64
62 65
/* static */
271 274
	unsigned int i;
272 275
	KeySym keysym;
273 276
	XKeyEvent *ev = &e->xkey;
277 +
	ev->state &= valid_mask;
274 278
275 279
	keysym = XKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0);
276 280
	for(i = 0; i < len; i++)
277 -
		if((keysym == key[i].keysym) && (key[i].mod == ev->state)) {
281 +
		if((keysym == key[i].keysym) && ((key[i].mod & valid_mask) == ev->state)) {
278 282
			if(key[i].func)
279 283
				key[i].func(&key[i].arg);
280 284
			return;
377 381
	for(i = 0; i < len; i++) {
378 382
		code = XKeysymToKeycode(dpy, key[i].keysym);
379 383
		XUngrabKey(dpy, code, key[i].mod, root);
384 +
		if (NumLockMask)
385 +
		{
386 +
			XUngrabKey(dpy, code, key[i].mod | NumLockMask, root);
387 +
			XUngrabKey(dpy, code, key[i].mod | NumLockMask | LockMask, root);
388 +
		}
380 389
		XGrabKey(dpy, code, key[i].mod, root, True,
381 390
				GrabModeAsync, GrabModeAsync);
391 +
		if (NumLockMask)
392 +
		{
393 +
			XGrabKey(dpy, code, key[i].mod | NumLockMask, root, True,
394 +
					GrabModeAsync, GrabModeAsync);
395 +
			XGrabKey(dpy, code, key[i].mod | NumLockMask | LockMask, root, True,
396 +
					GrabModeAsync, GrabModeAsync);
397 +
		}
382 398
	}
383 399
}