about summary refs log tree commit diff
path: root/conf.c
diff options
context:
space:
mode:
authorokan <okan>2013-05-23 16:52:39 +0000
committerokan <okan>2013-05-23 16:52:39 +0000
commitbe1a7a3f5c7c0777ba86d40c49425e97fbae62a1 (patch)
tree6caf5a6701ccfa50641a56cd616770e993ffa822 /conf.c
parent7cc1c7344fe74b91e528ea6792318d7af0d833ef (diff)
downloadcwm-be1a7a3f5c7c0777ba86d40c49425e97fbae62a1.tar.gz
cwm-be1a7a3f5c7c0777ba86d40c49425e97fbae62a1.tar.xz
cwm-be1a7a3f5c7c0777ba86d40c49425e97fbae62a1.zip
alter conf_grab(_kbd) to first ungrab AnyKey/AnyModifier, then proceed
to grab keys in keybindingq.  we don't need to ungrab/grab on every
addition to the queue, just once with a complete keybindingq; simplify
grabbing keys per screen (during init) and during a MappingNotify.

while here, change conf_grab_{kbd,mouse} to require only a Window.
Diffstat (limited to 'conf.c')
-rw-r--r--conf.c54
1 files changed, 15 insertions, 39 deletions
diff --git a/conf.c b/conf.c
index 5d005c1..763e364 100644
--- a/conf.c
+++ b/conf.c
@@ -98,7 +98,6 @@ static char *color_binds[CWM_COLOR_MAX] = {
 void
 conf_screen(struct screen_ctx *sc)
 {
-	struct keybinding	*kb;
 	int			 i;
 	XftColor		 xc;
 
@@ -141,8 +140,7 @@ conf_screen(struct screen_ctx *sc)
 	if (sc->xftdraw == NULL)
 		errx(1, "XftDrawCreate");
 
-	TAILQ_FOREACH(kb, &Conf.keybindingq, entry)
-		xu_key_grab(sc->rootwin, kb->modmask, kb->keysym);
+	conf_grab_kbd(sc->rootwin);
 }
 
 static struct {
@@ -436,37 +434,6 @@ static struct {
 	    {.i = CWM_TILE_VERT } },
 };
 
-/*
- * The following two functions are used when grabbing and ungrabbing keys for
- * bindings
- */
-
-/*
- * Grab key combination on all screens and add to the global queue
- */
-void
-conf_grab(struct conf *c, struct keybinding *kb)
-{
-	extern struct screen_ctx_q	 Screenq;
-	struct screen_ctx		*sc;
-
-	TAILQ_FOREACH(sc, &Screenq, entry)
-		xu_key_grab(sc->rootwin, kb->modmask, kb->keysym);
-}
-
-/*
- * Ungrab key combination from all screens and remove from global queue
- */
-void
-conf_ungrab(struct conf *c, struct keybinding *kb)
-{
-	extern struct screen_ctx_q	 Screenq;
-	struct screen_ctx		*sc;
-
-	TAILQ_FOREACH(sc, &Screenq, entry)
-		xu_key_ungrab(sc->rootwin, kb->modmask, kb->keysym);
-}
-
 static struct {
 	char	chr;
 	int	mask;
@@ -656,17 +623,26 @@ 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)
+conf_grab_mouse(Window win)
 {
 	struct mousebinding	*mb;
 
 	TAILQ_FOREACH(mb, &Conf.mousebindingq, entry) {
 		if (mb->context != MOUSEBIND_CTX_WIN)
 			continue;
-		xu_btn_grab(cc->win, mb->modmask, mb->button);
+		xu_btn_grab(win, mb->modmask, mb->button);
 	}
 }
+
+void
+conf_grab_kbd(Window win)
+{
+	struct keybinding	*kb;
+
+	XUngrabKey(X_Dpy, AnyKey, AnyModifier, win);
+
+	TAILQ_FOREACH(kb, &Conf.keybindingq, entry)
+		xu_key_grab(win, kb->modmask, kb->keysym);
+}
+