event.c
changeset 145 774754477c35
parent 144 e61447a7f249
child 146 f328ce9c558c
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 }