about summary refs log tree commit diff
diff options
context:
space:
mode:
authorokan <okan>2013-10-19 19:39:34 +0000
committerokan <okan>2013-10-19 19:39:34 +0000
commita2013ee9dd9b152c044f8120a89c3d5aa17af4ea (patch)
tree71597013b401f6ff79ba57672fe6b53ed10714ca
parent083a023f2c0f36676d1015e1713ccac1b99bad59 (diff)
downloadcwm-a2013ee9dd9b152c044f8120a89c3d5aa17af4ea.tar.gz
cwm-a2013ee9dd9b152c044f8120a89c3d5aa17af4ea.tar.xz
cwm-a2013ee9dd9b152c044f8120a89c3d5aa17af4ea.zip
Using xu_btn_ungrab() buttons during client_leave doesn't work (error
BadValue) when the modifier is already AnyModifier .  Instead alter
xu_btn_ungrab() to ungrab AnyButton/AnyModifier and call it only when a
client is coming into focus in client_setactive(), instead of iterating
over ignore mods - matches how we handle key grabs.
-rw-r--r--calmwm.h2
-rw-r--r--client.c5
-rw-r--r--conf.c2
-rw-r--r--xutil.c7
4 files changed, 5 insertions, 11 deletions
diff --git a/calmwm.h b/calmwm.h
index 07e223c..e888bac 100644
--- a/calmwm.h
+++ b/calmwm.h
@@ -511,7 +511,7 @@ void			 conf_screen(struct screen_ctx *);
 void			 xev_loop(void);
 
 void			 xu_btn_grab(Window, int, u_int);
-void			 xu_btn_ungrab(Window, int, u_int);
+void			 xu_btn_ungrab(Window);
 int			 xu_getprop(Window, Atom, Atom, long, unsigned char **);
 int			 xu_get_wm_state(Window, int *);
 int			 xu_getstrprop(Window, Atom, char **);
diff --git a/client.c b/client.c
index 0733f88..cd0732f 100644
--- a/client.c
+++ b/client.c
@@ -186,15 +186,10 @@ client_delete(struct client_ctx *cc)
 void
 client_leave(struct client_ctx *cc)
 {
-	struct screen_ctx	*sc;
-
 	if (cc == NULL)
 		cc = client_current();
 	if (cc == NULL)
 		return;
-
-	sc = cc->sc;
-	xu_btn_ungrab(sc->rootwin, AnyModifier, Button1);
 }
 
 void
diff --git a/conf.c b/conf.c
index ea657f1..ce3ee1e 100644
--- a/conf.c
+++ b/conf.c
@@ -649,6 +649,8 @@ conf_grab_mouse(Window win)
 {
 	struct mousebinding	*mb;
 
+	xu_btn_ungrab(win);
+
 	TAILQ_FOREACH(mb, &Conf.mousebindingq, entry) {
 		if (mb->flags != MOUSEBIND_CTX_WIN)
 			continue;
diff --git a/xutil.c b/xutil.c
index 543b8b0..f33fa9a 100644
--- a/xutil.c
+++ b/xutil.c
@@ -65,12 +65,9 @@ xu_btn_grab(Window win, int mask, u_int btn)
 }
 
 void
-xu_btn_ungrab(Window win, int mask, u_int btn)
+xu_btn_ungrab(Window win)
 {
-	u_int	i;
-
-	for (i = 0; i < nitems(ign_mods); i++)
-		XUngrabButton(X_Dpy, btn, (mask | ign_mods[i]), win);
+	XUngrabButton(X_Dpy, AnyButton, AnyModifier, win);
 }
 
 void