summary refs log tree commit diff
path: root/conf.c
diff options
context:
space:
mode:
authorokan <okan>2016-09-30 18:28:06 +0000
committerokan <okan>2016-09-30 18:28:06 +0000
commit2d8f621b8d285b1cf8e29feb383fa2268e57ee5a (patch)
tree411cf317c0c58cf39c2503d99c89913d6ee3c11d /conf.c
parent8b26a43bf17b3834de3127408e7274e8effc9beb (diff)
downloadcwm-2d8f621b8d285b1cf8e29feb383fa2268e57ee5a.tar.gz
cwm-2d8f621b8d285b1cf8e29feb383fa2268e57ee5a.tar.xz
cwm-2d8f621b8d285b1cf8e29feb383fa2268e57ee5a.zip
Use instinsic X11 functions for key/btn/ptr grab/ungrab/regrab requests;
the one line wrappers provided no value and limited altering calls where
needed; additionally, most of them had but one caller.
Diffstat (limited to 'conf.c')
-rw-r--r--conf.c32
1 files changed, 26 insertions, 6 deletions
diff --git a/conf.c b/conf.c
index c0c7b41..e03b337 100644
--- a/conf.c
+++ b/conf.c
@@ -655,28 +655,48 @@ conf_cursor(struct conf *c)
 		c->cursor[i] = XCreateFontCursor(X_Dpy, cursor_binds[i]);
 }
 
+static unsigned int ign_mods[] = { 0, LockMask, Mod2Mask, Mod2Mask | LockMask };
+
 void
 conf_grab_mouse(Window win)
 {
 	struct binding	*mb;
+	unsigned int	i;
 
-	xu_btn_ungrab(win);
+	XUngrabButton(X_Dpy, AnyButton, AnyModifier, win);
 
 	TAILQ_FOREACH(mb, &Conf.mousebindingq, entry) {
-		if (mb->context == CWM_CONTEXT_CLIENT)
-			xu_btn_grab(win, mb->modmask, mb->press.button);
+		if (mb->context != CWM_CONTEXT_CLIENT)
+			continue;
+		for (i = 0; i < nitems(ign_mods); i++) {
+			XGrabButton(X_Dpy, mb->press.button,
+			    (mb->modmask | ign_mods[i]), win, False,
+			    BUTTONMASK, GrabModeAsync, GrabModeSync,
+			    None, None);
+		}
 	}
+
 }
 
 void
 conf_grab_kbd(Window win)
 {
 	struct binding	*kb;
+	KeyCode		 kc;
+	unsigned int	 i;
 
-	xu_key_ungrab(win);
+	XUngrabKey(X_Dpy, AnyKey, AnyModifier, win);
 
-	TAILQ_FOREACH(kb, &Conf.keybindingq, entry)
-		xu_key_grab(win, kb->modmask, kb->press.keysym);
+	TAILQ_FOREACH(kb, &Conf.keybindingq, entry) {
+		kc = XKeysymToKeycode(X_Dpy, kb->press.keysym);
+		if ((XkbKeycodeToKeysym(X_Dpy, kc, 0, 0) != kb->press.keysym) &&
+		    (XkbKeycodeToKeysym(X_Dpy, kc, 0, 1) == kb->press.keysym))
+			kb->modmask |= ShiftMask;
+
+		for (i = 0; i < nitems(ign_mods); i++)
+			XGrabKey(X_Dpy, kc, (kb->modmask | ign_mods[i]), win,
+			    True, GrabModeAsync, GrabModeAsync);
+	}
 }
 
 static char *cwmhints[] = {