Making more than one Modkey to work in keys.
authorChristoph Lohmann <20h@r-36.net>
Sat, 26 Jan 2013 15:00:52 +0000 (16:00 +0100)
committerChristoph Lohmann <20h@r-36.net>
Sat, 26 Jan 2013 15:00:52 +0000 (16:00 +0100)
config.def.h
surf.c

index 8a27a03..1cba4d7 100644 (file)
@@ -45,6 +45,10 @@ static Bool hidebackground  = FALSE;
 #define MODKEY GDK_CONTROL_MASK
 
 /* hotkeys */
+/*
+ * If you use anything else but MODKEY and GDK_SHIFT_MASK, don't forget to
+ * edit the CLEANMASK() macro.
+ */
 static Key keys[] = {
     /* modifier                    keyval      function    arg             Focus */
     { MODKEY|GDK_SHIFT_MASK,GDK_r,      reload,     { .b = TRUE } },
diff --git a/surf.c b/surf.c
index 14788e5..682c1e2 100644 (file)
--- a/surf.c
+++ b/surf.c
@@ -28,6 +28,7 @@
 char *argv0;
 
 #define LENGTH(x)               (sizeof x / sizeof x[0])
+#define CLEANMASK(mask)                (mask & (MODKEY|GDK_SHIFT_MASK))
 #define COOKIEJAR_TYPE          (cookiejar_get_type ())
 #define COOKIEJAR(obj)          (G_TYPE_CHECK_INSTANCE_CAST ((obj), COOKIEJAR_TYPE, CookieJar))
 
@@ -543,7 +544,7 @@ keypress(GtkWidget* w, GdkEventKey *ev, Client *c) {
        updatewinid(c);
        for(i = 0; i < LENGTH(keys); i++) {
                if(gdk_keyval_to_lower(ev->keyval) == keys[i].keyval
-                               && (ev->state & keys[i].mod) == keys[i].mod
+                               && CLEANMASK(ev->state) == keys[i].mod
                                && keys[i].func) {
                        keys[i].func(c, &(keys[i].arg));
                        processed = TRUE;