From 69e13f1a98399a3c2d65af3b8e2283fe6cec512b Mon Sep 17 00:00:00 2001 From: okan Date: Sat, 19 Oct 2013 19:39:34 +0000 Subject: 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. --- calmwm.h | 4 ++-- client.c | 7 +------ conf.c | 4 +++- xutil.c | 9 +++------ 4 files changed, 9 insertions(+), 15 deletions(-) diff --git a/calmwm.h b/calmwm.h index 8c41c70..63308ee 100644 --- a/calmwm.h +++ b/calmwm.h @@ -15,7 +15,7 @@ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * - * $OpenBSD: calmwm.h,v 1.221 2013/10/03 13:51:57 okan Exp $ + * $OpenBSD: calmwm.h,v 1.222 2013/10/19 19:39:34 okan Exp $ */ #ifndef _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 5b3eb5c..2cc7db0 100644 --- a/client.c +++ b/client.c @@ -15,7 +15,7 @@ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * - * $OpenBSD: client.c,v 1.139 2013/10/19 18:59:22 okan Exp $ + * $OpenBSD: client.c,v 1.140 2013/10/19 19:39:34 okan Exp $ */ #include @@ -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 c6803a5..ae3fffa 100644 --- a/conf.c +++ b/conf.c @@ -15,7 +15,7 @@ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * - * $OpenBSD: conf.c,v 1.146 2013/10/07 13:40:26 okan Exp $ + * $OpenBSD: conf.c,v 1.147 2013/10/19 19:39:34 okan Exp $ */ #include @@ -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 ef492c3..7d7b13b 100644 --- a/xutil.c +++ b/xutil.c @@ -15,7 +15,7 @@ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * - * $OpenBSD: xutil.c,v 1.75 2013/10/03 13:52:00 okan Exp $ + * $OpenBSD: xutil.c,v 1.76 2013/10/19 19:39:34 okan Exp $ */ #include @@ -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 -- cgit v1.2.3-2-gb3c3