summaryrefslogtreecommitdiff
path: root/app/cwm/conf.c
diff options
context:
space:
mode:
authorOkan Demirmen <okan@cvs.openbsd.org>2013-05-23 16:52:40 +0000
committerOkan Demirmen <okan@cvs.openbsd.org>2013-05-23 16:52:40 +0000
commitaeaf4a0c28d37047713c518c9916dc8ff776404b (patch)
tree12278a2044f5048536c4d277c52cbdd96c5b6fbf /app/cwm/conf.c
parentd9cfd45c7f840dd02e71a82e33b42ad920309f13 (diff)
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 'app/cwm/conf.c')
-rw-r--r--app/cwm/conf.c56
1 files changed, 16 insertions, 40 deletions
diff --git a/app/cwm/conf.c b/app/cwm/conf.c
index 8892a5085..c0e6314a9 100644
--- a/app/cwm/conf.c
+++ b/app/cwm/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.132 2013/05/22 20:23:21 okan Exp $
+ * $OpenBSD: conf.c,v 1.133 2013/05/23 16:52:39 okan Exp $
*/
#include <sys/param.h>
@@ -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);
+}
+