i3bar: Simplify hide mode logic
Patch status: merged
Patch by Tony Crisci
Long description:
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.
To apply this patch, use:
curl http://cr.i3wm.org/patch/287/raw.patch | git am
b/i3bar/src/xcb.c
17 |
@@ -1626,9 +1626,6 @@ void draw_bars(bool unhide) { |
18 |
|
19 |
refresh_statusline(); |
20 |
|
21 |
- static char *last_urgent_ws = NULL; |
22 |
- bool walks_away = true; |
23 |
- |
24 |
i3_output *outputs_walk; |
25 |
SLIST_FOREACH(outputs_walk, outputs, slist) { |
26 |
if (!outputs_walk->active) { |
27 |
@@ -1697,9 +1694,6 @@ void draw_bars(bool unhide) { |
28 |
fg_color = colors.focus_ws_fg; |
29 |
bg_color = colors.focus_ws_bg; |
30 |
border_color = colors.focus_ws_border; |
31 |
- if (last_urgent_ws && strcmp(i3string_as_utf8(ws_walk->name), |
32 |
- last_urgent_ws) == 0) |
33 |
- walks_away = false; |
34 |
} |
35 |
} |
36 |
if (ws_walk->urgent) { |
37 |
@@ -1708,10 +1702,6 @@ void draw_bars(bool unhide) { |
38 |
bg_color = colors.urgent_ws_bg; |
39 |
border_color = colors.urgent_ws_border; |
40 |
unhide = true; |
41 |
- if (!ws_walk->focused) { |
42 |
- FREE(last_urgent_ws); |
43 |
- last_urgent_ws = sstrdup(i3string_as_utf8(ws_walk->name)); |
44 |
- } |
45 |
} |
46 |
uint32_t mask = XCB_GC_FOREGROUND | XCB_GC_BACKGROUND; |
47 |
uint32_t vals_border[] = { border_color, border_color }; |
48 |
@@ -1783,13 +1773,11 @@ void draw_bars(bool unhide) { |
49 |
} |
50 |
|
51 |
/* Assure the bar is hidden/unhidden according to the specified hidden_state and mode */ |
52 |
- bool should_unhide = (config.hidden_state == S_SHOW || (unhide && config.hidden_state == S_HIDE)); |
53 |
- bool should_hide = (config.hide_on_modifier == M_INVISIBLE); |
54 |
- |
55 |
- if (mod_pressed || (should_unhide && !should_hide)) { |
56 |
+ if (mod_pressed || |
57 |
+ config.hidden_state == S_SHOW || |
58 |
+ unhide) { |
59 |
unhide_bars(); |
60 |
- } else if (!mod_pressed && (walks_away || should_hide)) { |
61 |
- FREE(last_urgent_ws); |
62 |
+ } else if (config.hide_on_modifier == M_HIDE) { |
63 |
hide_bars(); |
64 |
} |
65 |
|