diff --git a/contrib/hide-vacant-tags.patch b/contrib/hide-vacant-tags.patch index 7d27ce1..055dd51 100644 --- a/contrib/hide-vacant-tags.patch +++ b/contrib/hide-vacant-tags.patch @@ -5,30 +5,50 @@ diff --git a/src/bar.cpp b/src/bar.cpp index fab5a8f..38e7b5f 100644 --- a/src/bar.cpp +++ b/src/bar.cpp -@@ -240,12 +240,22 @@ void Bar::render() +@@ -240,13 +240,36 @@ void Bar::render() void Bar::renderTags() { -+ bool focused; ++ // Check if all tags are active (Mod+0) ++ bool allActive = true; for (auto &tag : _tags) { -- setColorScheme( -- tag.state & TagState::Active ? colorActive : colorInactive, -- tag.state & TagState::Urgent); -- renderComponent(tag.component); -+ focused = false; - auto indicators = std::min(tag.numClients, static_cast(_bufs->height/2)); -+ for (auto ind = 0; ind < indicators; ind++) { -+ if (tag.focusedClient){ -+ focused = true; ++ if (tag.state & TagState::Active){ ++ if (!allActive){ ++ allActive = true; ++ break; + } ++ allActive = false; + } ++ } + -+ if (tag.state & TagState::Active || focused){ -+ setColorScheme( -+ tag.state & TagState::Active ? colorActive : colorInactive, -+ tag.state & TagState::Urgent); -+ renderComponent(tag.component); -+ } ++ bool renderThis; ++ for (auto &tag : _tags) { ++ renderThis = false; + setColorScheme( + tag.state & TagState::Active ? colorActive : colorInactive, + tag.state & TagState::Urgent); +- renderComponent(tag.component); ++ // Reder active tag if it's the only one active ++ if (!allActive && tag.state & TagState::Active) ++ renderThis = true; + auto indicators = std::min(tag.numClients, static_cast(_bufs->height/2)); for (auto ind = 0; ind < indicators; ind++) { ++ // render tags having indicators ++ if (tag.focusedClient == -1) ++ renderThis = true; ++ // render tags having the focused client ++ if (tag.focusedClient == 0){ ++ renderThis = true; ++ } auto w = ind == tag.focusedClient ? 7 : 1; cairo_move_to(_painter, tag.component.x, ind*2+0.5); + cairo_rel_line_to(_painter, w, 0); +@@ -254,6 +277,8 @@ void Bar::renderTags() + cairo_set_line_width(_painter, 1); + cairo_stroke(_painter); + } ++ if (renderThis) ++ renderComponent(tag.component); + } + } +