comparison event.c @ 160:c8db0a825775

applied Sanders patches (numlock2)
author arg@10ksloc.org
date Wed, 02 Aug 2006 11:13:32 +0200
parents a5eab6aaf859
children f381e34158d9
comparison
equal deleted inserted replaced
159:a5eab6aaf859 160:c8db0a825775
17 Arg arg; 17 Arg arg;
18 } Key; 18 } Key;
19 19
20 KEYS 20 KEYS
21 21
22 static unsigned int valid_mask = 255 & ~(NUMLOCKMASK | LockMask); 22 #define CLEANMASK(mask) (mask & ~(NUMLOCKMASK | LockMask))
23 23
24 static void 24 static void
25 movemouse(Client *c) 25 movemouse(Client *c)
26 { 26 {
27 int x1, y1, ocx, ocy, di; 27 int x1, y1, ocx, ocy, di;
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 }