diff options
author | oga <oga> | 2008-07-22 20:26:12 +0000 |
---|---|---|
committer | oga <oga> | 2008-07-22 20:26:12 +0000 |
commit | 20052e024894b7cc2196c43076cfb441a57a99a6 (patch) | |
tree | 2ef5d448a24ec976cde1592809bd55447df1e1cf | |
parent | 13b640ea29cc07d725b25635617daeb1e8839dd3 (diff) | |
download | cwm-20052e024894b7cc2196c43076cfb441a57a99a6.tar.gz cwm-20052e024894b7cc2196c43076cfb441a57a99a6.tar.xz cwm-20052e024894b7cc2196c43076cfb441a57a99a6.zip |
Add xu_key_ungrab() and a mirror to xu_key_ungrab(). a couple of changes
that are coming up depend on it. ok okan.
-rw-r--r-- | calmwm.h | 1 | ||||
-rw-r--r-- | xutil.c | 20 |
2 files changed, 18 insertions, 3 deletions
diff --git a/calmwm.h b/calmwm.h index f00cc0b..93d99f7 100644 --- a/calmwm.h +++ b/calmwm.h @@ -391,6 +391,7 @@ void xu_ptr_ungrab(void); void xu_ptr_setpos(Window, int, int); void xu_ptr_getpos(Window, int *, int *); void xu_key_grab(Window, int, int); +void xu_key_ungrab(Window, int, int); void xu_sendmsg(struct client_ctx *, Atom, long); int xu_getprop(struct client_ctx *, Atom, Atom, long, u_char **); diff --git a/xutil.c b/xutil.c index 2c6ad65..11cde2f 100644 --- a/xutil.c +++ b/xutil.c @@ -90,9 +90,23 @@ xu_key_grab(Window win, int mask, int keysym) mask |= ShiftMask; for (i = 0; i < sizeof(ign_mods)/sizeof(*ign_mods); i++) - XGrabKey(X_Dpy, XKeysymToKeycode(X_Dpy, keysym), - (mask | ign_mods[i]), win, True, GrabModeAsync, - GrabModeAsync); + XGrabKey(X_Dpy, code, (mask | ign_mods[i]), win, + True, GrabModeAsync, GrabModeAsync); +} + +void +xu_key_ungrab(Window win, int mask, int keysym) +{ + KeyCode code; + int i; + + code = XKeysymToKeycode(X_Dpy, keysym); + if ((XKeycodeToKeysym(X_Dpy, code, 0) != keysym) && + (XKeycodeToKeysym(X_Dpy, code, 1) == keysym)) + mask |= ShiftMask; + + for (i = 0; i < sizeof(ign_mods)/sizeof(*ign_mods); i++) + XUngrabKey(X_Dpy, code, (mask | ign_mods[i]), win); } void |