event.c
changeset 958 8b502be8b8e0
parent 956 484245788760
child 971 b2a0dfa22b1d
equal deleted inserted replaced
957:e61ca30d9474 958:8b502be8b8e0
   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 }