227 { |
227 { |
228 static unsigned int len = sizeof(key) / sizeof(key[0]); |
228 static unsigned int len = sizeof(key) / sizeof(key[0]); |
229 unsigned int i; |
229 unsigned int i; |
230 KeySym keysym; |
230 KeySym keysym; |
231 XKeyEvent *ev = &e->xkey; |
231 XKeyEvent *ev = &e->xkey; |
232 ev->state &= valid_mask; |
|
233 |
232 |
234 keysym = XKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0); |
233 keysym = XKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0); |
235 for(i = 0; i < len; i++) |
234 for(i = 0; i < len; i++) |
236 if((keysym == key[i].keysym) && ((key[i].mod & valid_mask) == ev->state)) { |
235 if(keysym == key[i].keysym && |
|
236 CLEANMASK(key[i].mod) == CLEANMASK(ev->state)) { |
237 if(key[i].func) |
237 if(key[i].func) |
238 key[i].func(&key[i].arg); |
238 key[i].func(&key[i].arg); |
239 return; |
239 return; |
240 } |
240 } |
241 } |
241 } |
333 unsigned int i; |
333 unsigned int i; |
334 KeyCode code; |
334 KeyCode code; |
335 |
335 |
336 for(i = 0; i < len; i++) { |
336 for(i = 0; i < len; i++) { |
337 code = XKeysymToKeycode(dpy, key[i].keysym); |
337 code = XKeysymToKeycode(dpy, key[i].keysym); |
|
338 /* normal */ |
338 XUngrabKey(dpy, code, key[i].mod, root); |
339 XUngrabKey(dpy, code, key[i].mod, root); |
339 XUngrabKey(dpy, code, key[i].mod | NUMLOCKMASK, root); |
|
340 XUngrabKey(dpy, code, key[i].mod | NUMLOCKMASK | LockMask, root); |
|
341 XGrabKey(dpy, code, key[i].mod, root, True, |
340 XGrabKey(dpy, code, key[i].mod, root, True, |
342 GrabModeAsync, GrabModeAsync); |
341 GrabModeAsync, GrabModeAsync); |
|
342 /* capslock */ |
|
343 XUngrabKey(dpy, code, key[i].mod | LockMask, root); |
|
344 XGrabKey(dpy, code, key[i].mod | LockMask, root, True, |
|
345 GrabModeAsync, GrabModeAsync); |
|
346 /* numlock */ |
|
347 XUngrabKey(dpy, code, key[i].mod | NUMLOCKMASK, root); |
343 XGrabKey(dpy, code, key[i].mod | NUMLOCKMASK, root, True, |
348 XGrabKey(dpy, code, key[i].mod | NUMLOCKMASK, root, True, |
344 GrabModeAsync, GrabModeAsync); |
349 GrabModeAsync, GrabModeAsync); |
|
350 /* capslock & numlock */ |
|
351 XUngrabKey(dpy, code, key[i].mod | NUMLOCKMASK | LockMask, root); |
345 XGrabKey(dpy, code, key[i].mod | NUMLOCKMASK | LockMask, root, True, |
352 XGrabKey(dpy, code, key[i].mod | NUMLOCKMASK | LockMask, root, True, |
346 GrabModeAsync, GrabModeAsync); |
353 GrabModeAsync, GrabModeAsync); |
347 } |
354 } |
348 } |
355 } |