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 } |