From 2e5838fb49f6e3ed2a0311dedcd73aaca64c0ed1 Mon Sep 17 00:00:00 2001 From: Quentin Glidic Date: Tue, 21 Aug 2012 13:49:48 +0200 Subject: [PATCH] i3bar: Rework unhide/hide on workspace urgency We now check globally for workspace urgency instead of per-output since the result is the same but we call unhide_bars/hide_bars only once this way --- i3bar/src/xcb.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/i3bar/src/xcb.c b/i3bar/src/xcb.c index 861925b9..aedf6392 100644 --- a/i3bar/src/xcb.c +++ b/i3bar/src/xcb.c @@ -1404,6 +1404,10 @@ void draw_bars(void) { refresh_statusline(); + static char *last_urgent_ws = NULL; + bool unhide = false; + bool walks_away = true; + i3_output *outputs_walk; SLIST_FOREACH(outputs_walk, outputs, slist) { if (!outputs_walk->active) { @@ -1460,8 +1464,6 @@ void draw_bars(void) { } i3_ws *ws_walk; - static char *last_urgent_ws = NULL; - bool has_urgent = false, walks_away = true; TAILQ_FOREACH(ws_walk, outputs_walk->workspaces, tailq) { DLOG("Drawing Button for WS %s at x = %d, len = %d\n", i3string_as_utf8(ws_walk->name), i, ws_walk->name_width); @@ -1486,13 +1488,11 @@ void draw_bars(void) { fg_color = colors.urgent_ws_fg; bg_color = colors.urgent_ws_bg; border_color = colors.urgent_ws_border; - has_urgent = true; + unhide = true; if (!ws_walk->focused) { FREE(last_urgent_ws); last_urgent_ws = sstrdup(i3string_as_utf8(ws_walk->name)); } - /* The urgent-hint should get noticed, so we unhide the bars shortly */ - unhide_bars(); } uint32_t mask = XCB_GC_FOREGROUND | XCB_GC_BACKGROUND; uint32_t vals_border[] = { border_color, border_color }; @@ -1522,12 +1522,17 @@ void draw_bars(void) { i += 10 + ws_walk->name_width + 1; } - if (!has_urgent && !mod_pressed && walks_away) { + i = 0; + } + + if (!mod_pressed) { + if (unhide) { + /* The urgent-hint should get noticed, so we unhide the bars shortly */ + unhide_bars(); + } else if (walks_away) { FREE(last_urgent_ws); hide_bars(); } - - i = 0; } redraw_bars();