comparison event.c @ 145:774754477c35

applied Cedric's NumLock patch
author arg@10ksloc.org
date Tue, 01 Aug 2006 12:41:38 +0200
parents e61447a7f249
children f328ce9c558c
comparison
equal deleted inserted replaced
144:e61447a7f249 145:774754477c35
55 { MODKEY|ShiftMask, XK_g, spawn, { .argv = gimp } }, 55 { MODKEY|ShiftMask, XK_g, spawn, { .argv = gimp } },
56 { MODKEY|ShiftMask, XK_l, spawn, { .argv = xlock } }, 56 { MODKEY|ShiftMask, XK_l, spawn, { .argv = xlock } },
57 { MODKEY|ShiftMask, XK_w, spawn, { .argv = browse } }, 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 /* END CUSTOMIZE */ 63 /* END CUSTOMIZE */
61 64
62 /* static */ 65 /* static */
63 66
64 static void 67 static void
269 { 272 {
270 static unsigned int len = sizeof(key) / sizeof(key[0]); 273 static unsigned int len = sizeof(key) / sizeof(key[0]);
271 unsigned int i; 274 unsigned int i;
272 KeySym keysym; 275 KeySym keysym;
273 XKeyEvent *ev = &e->xkey; 276 XKeyEvent *ev = &e->xkey;
277 ev->state &= valid_mask;
274 278
275 keysym = XKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0); 279 keysym = XKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0);
276 for(i = 0; i < len; i++) 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 if(key[i].func) 282 if(key[i].func)
279 key[i].func(&key[i].arg); 283 key[i].func(&key[i].arg);
280 return; 284 return;
281 } 285 }
282 } 286 }
375 KeyCode code; 379 KeyCode code;
376 380
377 for(i = 0; i < len; i++) { 381 for(i = 0; i < len; i++) {
378 code = XKeysymToKeycode(dpy, key[i].keysym); 382 code = XKeysymToKeycode(dpy, key[i].keysym);
379 XUngrabKey(dpy, code, key[i].mod, root); 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 XGrabKey(dpy, code, key[i].mod, root, True, 389 XGrabKey(dpy, code, key[i].mod, root, True,
381 GrabModeAsync, GrabModeAsync); 390 GrabModeAsync, GrabModeAsync);
382 } 391 if (NumLockMask)
383 } 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 }
398 }
399 }