about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--calmwm.h1
-rw-r--r--client.c3
-rw-r--r--conf.c30
3 files changed, 32 insertions, 2 deletions
diff --git a/calmwm.h b/calmwm.h
index 33b4949..0432817 100644
--- a/calmwm.h
+++ b/calmwm.h
@@ -424,6 +424,7 @@ void			 conf_bindname(struct conf *, char *, char *);
 void			 conf_unbind(struct conf *, struct keybinding *);
 void			 conf_mousebind(struct conf *, char *, char *);
 void			 conf_mouseunbind(struct conf *, struct mousebinding *);
+void			 conf_grab_mouse(struct client_ctx *);
 int			 conf_changed(char *);
 void			 conf_reload(struct conf *);
 void			 conf_font(struct conf *);
diff --git a/client.c b/client.c
index 0f5ac8d..957f16d 100644
--- a/client.c
+++ b/client.c
@@ -272,8 +272,7 @@ client_setactive(struct client_ctx *cc, int fg)
 		XInstallColormap(X_Dpy, cc->cmap);
 		XSetInputFocus(X_Dpy, cc->win,
 		    RevertToPointerRoot, CurrentTime);
-		xu_btn_grab(cc->pwin, Mod1Mask, AnyButton);
-		xu_btn_grab(cc->pwin, ControlMask|Mod1Mask, Button1);
+		conf_grab_mouse(cc);
 		/*
 		 * If we're in the middle of alt-tabbing, don't change
 		 * the order please.
diff --git a/conf.c b/conf.c
index 1767d14..1972287 100644
--- a/conf.c
+++ b/conf.c
@@ -474,3 +474,33 @@ conf_mouseunbind(struct conf *c, struct mousebinding *unbind)
 	}
 }
 
+/*
+ * Grab the mouse buttons that we need for bindings for this client
+ */
+void
+conf_grab_mouse(struct client_ctx *cc)
+{
+	struct mousebinding	*mb;
+	int			 button;
+	
+
+	TAILQ_FOREACH(mb, &Conf.mousebindingq, entry) {
+		if (mb->context != MOUSEBIND_CTX_WIN)
+ 			continue;
+
+		switch(mb->button) {
+		case 1:
+			button = Button1;
+			break;
+		case 2:
+			button = Button2;
+			break;
+		case 3:
+			button = Button3;
+			break;
+		default:
+			warnx("strange button in mousebinding\n");
+		}
+		xu_btn_grab(cc->pwin, mb->modmask, button);
+	}
+}