hide-vacant-tags: fix tag 0 is hiding all

This commit is contained in:
medanisjbara 2022-12-28 20:03:05 +01:00 committed by Raphael Robatsch
parent ea9dbfe022
commit 624e92927b
1 changed files with 37 additions and 17 deletions

View File

@ -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<int>(_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<int>(_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);
}
}