]> git.sur5r.net Git - i3/i3/commitdiff
Move grab_all_keys to bindings.[ch]
authorTony Crisci <tony@dubstepdish.com>
Fri, 14 Feb 2014 23:38:01 +0000 (18:38 -0500)
committerMichael Stapelberg <michael@stapelberg.de>
Sat, 15 Feb 2014 11:55:38 +0000 (12:55 +0100)
Also add checks for binding input_type to filter bindings that are not
keyboard bindings.

include/bindings.h
include/config.h
src/bindings.c
src/config.c

index 49711a9f73c70be8f559c9d5aba0bc236c8e6f38..3e7f34b5b2f6c86e9d389a0921085c2824b0b2ad 100644 (file)
@@ -23,3 +23,9 @@ const char *DEFAULT_BINDING_MODE;
  */
 Binding *configure_binding(const char *bindtype, const char *modifiers, const char *input_code,
         const char *release, const char *command, const char *mode);
+
+/**
+ * Grab the bound keys (tell X to send us keypress events for those keycodes)
+ *
+ */
+void grab_all_keys(xcb_connection_t *conn, bool bind_mode_switch);
index b62599936dc9dd3c17fea0453a4ef2ee9f965df9..65eecd8aac482d57827f1f9f0c4ef3ca7243cba1 100644 (file)
@@ -321,12 +321,6 @@ void translate_keysyms(void);
  */
 void ungrab_all_keys(xcb_connection_t *conn);
 
-/**
- * Grab the bound keys (tell X to send us keypress events for those keycodes)
- *
- */
-void grab_all_keys(xcb_connection_t *conn, bool bind_mode_switch);
-
 /**
  * Switches the key bindings to the given mode, if the mode exists
  *
index 511e899656ef003d315110dc9f4306bb48dc04b6..c88a67730056c120d9851cbc69f5b0b9e9e7b1be 100644 (file)
@@ -69,3 +69,51 @@ Binding *configure_binding(const char *bindtype, const char *modifiers, const ch
 
     return new_binding;
 }
+
+static void grab_keycode_for_binding(xcb_connection_t *conn, Binding *bind, uint32_t keycode) {
+    if (bind->input_type != B_KEYBOARD)
+        return;
+
+    DLOG("Grabbing %d with modifiers %d (with mod_mask_lock %d)\n", keycode, bind->mods, bind->mods | XCB_MOD_MASK_LOCK);
+    /* Grab the key in all combinations */
+    #define GRAB_KEY(modifier) \
+        do { \
+            xcb_grab_key(conn, 0, root, modifier, keycode, \
+                         XCB_GRAB_MODE_SYNC, XCB_GRAB_MODE_ASYNC); \
+        } while (0)
+    int mods = bind->mods;
+    if ((bind->mods & BIND_MODE_SWITCH) != 0) {
+        mods &= ~BIND_MODE_SWITCH;
+        if (mods == 0)
+            mods = XCB_MOD_MASK_ANY;
+    }
+    GRAB_KEY(mods);
+    GRAB_KEY(mods | xcb_numlock_mask);
+    GRAB_KEY(mods | XCB_MOD_MASK_LOCK);
+    GRAB_KEY(mods | xcb_numlock_mask | XCB_MOD_MASK_LOCK);
+}
+
+
+/*
+ * Grab the bound keys (tell X to send us keypress events for those keycodes)
+ *
+ */
+void grab_all_keys(xcb_connection_t *conn, bool bind_mode_switch) {
+    Binding *bind;
+    TAILQ_FOREACH(bind, bindings, bindings) {
+        if (bind->input_type != B_KEYBOARD ||
+                (bind_mode_switch && (bind->mods & BIND_MODE_SWITCH) == 0) ||
+                (!bind_mode_switch && (bind->mods & BIND_MODE_SWITCH) != 0))
+            continue;
+
+        /* The easy case: the user specified a keycode directly. */
+        if (bind->keycode > 0) {
+            grab_keycode_for_binding(conn, bind, bind->keycode);
+            continue;
+        }
+
+        xcb_keycode_t *walk = bind->translated_to;
+        for (uint32_t i = 0; i < bind->number_keycodes; i++)
+            grab_keycode_for_binding(conn, bind, *walk++);
+    }
+}
index 4ce45ad6f496acbdf2f0ffc21ae9ee291ff0e4a5..e8596c7331281e0c5dd5ab1327054c71e6d44125 100644 (file)
@@ -30,26 +30,6 @@ void ungrab_all_keys(xcb_connection_t *conn) {
     xcb_ungrab_key(conn, XCB_GRAB_ANY, root, XCB_BUTTON_MASK_ANY);
 }
 
-static void grab_keycode_for_binding(xcb_connection_t *conn, Binding *bind, uint32_t keycode) {
-    DLOG("Grabbing %d with modifiers %d (with mod_mask_lock %d)\n", keycode, bind->mods, bind->mods | XCB_MOD_MASK_LOCK);
-    /* Grab the key in all combinations */
-    #define GRAB_KEY(modifier) \
-        do { \
-            xcb_grab_key(conn, 0, root, modifier, keycode, \
-                         XCB_GRAB_MODE_SYNC, XCB_GRAB_MODE_ASYNC); \
-        } while (0)
-    int mods = bind->mods;
-    if ((bind->mods & BIND_MODE_SWITCH) != 0) {
-        mods &= ~BIND_MODE_SWITCH;
-        if (mods == 0)
-            mods = XCB_MOD_MASK_ANY;
-    }
-    GRAB_KEY(mods);
-    GRAB_KEY(mods | xcb_numlock_mask);
-    GRAB_KEY(mods | XCB_MOD_MASK_LOCK);
-    GRAB_KEY(mods | xcb_numlock_mask | XCB_MOD_MASK_LOCK);
-}
-
 /*
  * Returns a pointer to the Binding with the specified modifiers and keycode
  * or NULL if no such binding exists.
@@ -157,29 +137,6 @@ void translate_keysyms(void) {
     }
 }
 
-/*
- * Grab the bound keys (tell X to send us keypress events for those keycodes)
- *
- */
-void grab_all_keys(xcb_connection_t *conn, bool bind_mode_switch) {
-    Binding *bind;
-    TAILQ_FOREACH(bind, bindings, bindings) {
-        if ((bind_mode_switch && (bind->mods & BIND_MODE_SWITCH) == 0) ||
-            (!bind_mode_switch && (bind->mods & BIND_MODE_SWITCH) != 0))
-            continue;
-
-        /* The easy case: the user specified a keycode directly. */
-        if (bind->keycode > 0) {
-            grab_keycode_for_binding(conn, bind, bind->keycode);
-            continue;
-        }
-
-        xcb_keycode_t *walk = bind->translated_to;
-        for (uint32_t i = 0; i < bind->number_keycodes; i++)
-            grab_keycode_for_binding(conn, bind, *walk++);
-    }
-}
-
 /*
  * Switches the key bindings to the given mode, if the mode exists
  *