]> git.sur5r.net Git - i3/i3/commitdiff
i3bar: Simplify hide mode logic
authorTony Crisci <tony@dubstepdish.com>
Wed, 30 Oct 2013 04:16:13 +0000 (00:16 -0400)
committerMichael Stapelberg <michael@stapelberg.de>
Sat, 9 Nov 2013 13:34:00 +0000 (14:34 +0100)
When determining whether to hide or unhide the bar on redraw in hide
mode, use simpler rules. When the config specifies the 'show' state or a
workspace is urgent, or if the caller requests it, or the modifier is
pressed, show the bar. Otherwise, hide the bar.

i3bar/src/xcb.c

index 4564863363718801297e60bdb1c24ca80ea55e79..cec7ab82db8b43673345d6d3e23022be38006b15 100644 (file)
@@ -1626,9 +1626,6 @@ void draw_bars(bool unhide) {
 
     refresh_statusline();
 
-    static char *last_urgent_ws = NULL;
-    bool walks_away = true;
-
     i3_output *outputs_walk;
     SLIST_FOREACH(outputs_walk, outputs, slist) {
         if (!outputs_walk->active) {
@@ -1697,9 +1694,6 @@ void draw_bars(bool unhide) {
                         fg_color = colors.focus_ws_fg;
                         bg_color = colors.focus_ws_bg;
                         border_color = colors.focus_ws_border;
-                        if (last_urgent_ws && strcmp(i3string_as_utf8(ws_walk->name),
-                                                     last_urgent_ws) == 0)
-                            walks_away = false;
                     }
                 }
                 if (ws_walk->urgent) {
@@ -1708,10 +1702,6 @@ void draw_bars(bool unhide) {
                     bg_color = colors.urgent_ws_bg;
                     border_color = colors.urgent_ws_border;
                     unhide = true;
-                    if (!ws_walk->focused) {
-                        FREE(last_urgent_ws);
-                        last_urgent_ws = sstrdup(i3string_as_utf8(ws_walk->name));
-                    }
                 }
                 uint32_t mask = XCB_GC_FOREGROUND | XCB_GC_BACKGROUND;
                 uint32_t vals_border[] = { border_color, border_color };
@@ -1783,13 +1773,11 @@ void draw_bars(bool unhide) {
     }
 
     /* Assure the bar is hidden/unhidden according to the specified hidden_state and mode */
-    bool should_unhide = (config.hidden_state == S_SHOW || (unhide && config.hidden_state == S_HIDE));
-    bool should_hide = (config.hide_on_modifier == M_INVISIBLE);
-
-    if (mod_pressed || (should_unhide && !should_hide)) {
+    if (mod_pressed ||
+            config.hidden_state == S_SHOW ||
+            unhide) {
         unhide_bars();
-    } else if (!mod_pressed && (walks_away || should_hide)) {
-        FREE(last_urgent_ws);
+    } else if (config.hide_on_modifier == M_HIDE) {
         hide_bars();
     }