250 } |
250 } |
251 |
251 |
252 static void |
252 static void |
253 keypress(XEvent *e) { |
253 keypress(XEvent *e) { |
254 KEYS |
254 KEYS |
255 unsigned int len = sizeof key / sizeof key[0]; |
255 unsigned int len = sizeof keys / sizeof keys[0]; |
256 unsigned int i; |
256 unsigned int i; |
257 KeySym keysym; |
257 KeySym keysym; |
258 XKeyEvent *ev = &e->xkey; |
258 XKeyEvent *ev = &e->xkey; |
259 |
259 |
260 keysym = XKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0); |
260 keysym = XKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0); |
261 for(i = 0; i < len; i++) |
261 for(i = 0; i < len; i++) |
262 if(keysym == key[i].keysym |
262 if(keysym == keys[i].keysym |
263 && CLEANMASK(key[i].mod) == CLEANMASK(ev->state)) |
263 && CLEANMASK(keys[i].mod) == CLEANMASK(ev->state)) |
264 { |
264 { |
265 if(key[i].func) |
265 if(keys[i].func) |
266 key[i].func(key[i].arg); |
266 keys[i].func(keys[i].arg); |
267 } |
267 } |
268 } |
268 } |
269 |
269 |
270 static void |
270 static void |
271 leavenotify(XEvent *e) { |
271 leavenotify(XEvent *e) { |
356 }; |
356 }; |
357 |
357 |
358 void |
358 void |
359 grabkeys(void) { |
359 grabkeys(void) { |
360 KEYS |
360 KEYS |
361 unsigned int len = sizeof key / sizeof key[0]; |
361 unsigned int len = sizeof keys / sizeof keys[0]; |
362 unsigned int i; |
362 unsigned int i; |
363 KeyCode code; |
363 KeyCode code; |
364 |
364 |
365 XUngrabKey(dpy, AnyKey, AnyModifier, root); |
365 XUngrabKey(dpy, AnyKey, AnyModifier, root); |
366 for(i = 0; i < len; i++) { |
366 for(i = 0; i < len; i++) { |
367 code = XKeysymToKeycode(dpy, key[i].keysym); |
367 code = XKeysymToKeycode(dpy, keys[i].keysym); |
368 XGrabKey(dpy, code, key[i].mod, root, True, |
368 XGrabKey(dpy, code, keys[i].mod, root, True, |
369 GrabModeAsync, GrabModeAsync); |
369 GrabModeAsync, GrabModeAsync); |
370 XGrabKey(dpy, code, key[i].mod | LockMask, root, True, |
370 XGrabKey(dpy, code, keys[i].mod | LockMask, root, True, |
371 GrabModeAsync, GrabModeAsync); |
371 GrabModeAsync, GrabModeAsync); |
372 XGrabKey(dpy, code, key[i].mod | numlockmask, root, True, |
372 XGrabKey(dpy, code, keys[i].mod | numlockmask, root, True, |
373 GrabModeAsync, GrabModeAsync); |
373 GrabModeAsync, GrabModeAsync); |
374 XGrabKey(dpy, code, key[i].mod | numlockmask | LockMask, root, True, |
374 XGrabKey(dpy, code, keys[i].mod | numlockmask | LockMask, root, True, |
375 GrabModeAsync, GrabModeAsync); |
375 GrabModeAsync, GrabModeAsync); |
376 } |
376 } |
377 } |
377 } |