From: Georgiy Tugai Date: Tue, 21 Apr 2015 02:58:43 +0000 (+0930) Subject: i3bar: fix flickering shortened status bar on other output(s) X-Git-Tag: 4.11~116^2 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=refs%2Fpull%2F1657%2Fhead;p=i3%2Fi3 i3bar: fix flickering shortened status bar on other output(s) --- diff --git a/i3bar/src/xcb.c b/i3bar/src/xcb.c index ba57b9fa..45705c07 100644 --- a/i3bar/src/xcb.c +++ b/i3bar/src/xcb.c @@ -1792,6 +1792,8 @@ void reconfig_windows(bool redraw_bars) { void draw_bars(bool unhide) { DLOG("Drawing bars...\n"); int workspace_width = 0; + /* Is the currently-rendered statusline using short_text items? */ + bool rendered_statusline_is_short = false; refresh_statusline(false); @@ -1941,8 +1943,15 @@ void draw_bars(bool unhide) { uint32_t max_statusline_width = outputs_walk->rect.w - workspace_width - tray_width - 2 * logical_px(sb_hoff_px); /* If the statusline is too long, try to use short texts. */ - if (statusline_width > max_statusline_width) + if (statusline_width > max_statusline_width) { + /* If the currently rendered statusline is long, render a short status line */ refresh_statusline(true); + rendered_statusline_is_short = true; + } else if (rendered_statusline_is_short) { + /* If the currently rendered statusline is short, render a long status line */ + refresh_statusline(false); + rendered_statusline_is_short = false; + } /* Luckily we already prepared a seperate pixmap containing the rendered * statusline, we just have to copy the relevant parts to the relevant