]> git.sur5r.net Git - i3/i3/blobdiff - i3bar/src/xcb.c
Allow different modifier keys for showing hidden i3bar.
[i3/i3] / i3bar / src / xcb.c
index d907d083e433d5010858617b4231582f3593da21..1317b4755aaa753bd8bba4045324c5e491210ba7 100644 (file)
@@ -104,13 +104,13 @@ int _xcb_request_failed(xcb_void_cookie_t cookie, char *err_msg, int line) {
  *
  */
 void refresh_statusline() {
-    int glyph_count;
+    size_t glyph_count;
 
     if (statusline == NULL) {
         return;
     }
 
-    xcb_char2b_t *text = (xcb_char2b_t*) convert_utf8_to_ucs2(statusline, &glyph_count);
+    xcb_char2b_t *text = (xcb_char2b_t*)convert_utf8_to_ucs2(statusline, &glyph_count);
     uint32_t old_statusline_width = statusline_width;
     statusline_width = predict_text_width((char*)text, glyph_count, true);
     /* If the statusline is bigger than our screen we need to make sure that
@@ -684,19 +684,47 @@ void xkb_io_cb(struct ev_loop *loop, ev_io *watcher, int revents) {
         }
 
         unsigned int mods = ev.state.mods;
-        modstate = mods & Mod4Mask;
+        modstate = mods & config.modifier;
     }
 
+#define DLOGMOD(modmask, status, barfunc) \
+    do { \
+        switch (modmask) { \
+            case ShiftMask: \
+                DLOG("ShiftMask got " #status "!\n"); \
+                break; \
+            case ControlMask: \
+                DLOG("ControlMask got " #status "!\n"); \
+                break; \
+            case Mod1Mask: \
+                DLOG("Mod1Mask got " #status "!\n"); \
+                break; \
+            case Mod2Mask: \
+                DLOG("Mod2Mask got " #status "!\n"); \
+                break; \
+            case Mod3Mask: \
+                DLOG("Mod3Mask got " #status "!\n"); \
+                break; \
+            case Mod4Mask: \
+                DLOG("Mod4Mask got " #status "!\n"); \
+                break; \
+            case Mod5Mask: \
+                DLOG("Mod5Mask got " #status "!\n"); \
+                break; \
+        } \
+        barfunc(); \
+    } while (0)
+
     if (modstate != mod_pressed) {
         if (modstate == 0) {
-            DLOG("Mod4 got released!\n");
-            hide_bars();
+            DLOGMOD(config.modifier, released, hide_bars);
         } else {
-            DLOG("Mod4 got pressed!\n");
-            unhide_bars();
+            DLOGMOD(config.modifier, pressed, unhide_bars);
         }
         mod_pressed = modstate;
     }
+
+#undef DLOGMOD
 }
 
 /*