hide-vacant-tags patch used to make all tags disappear when a certain
window is tagged with zero (all tags at once). This new patch doesn't
have that problem and behaves identically to the dwm patch it is trying
to mimic.
medanisjbara (1):
hide-vacant-tags: fix tag 0 is hiding all
contrib/hide-vacant-tags.patch | 54 +++++++++++++++++++++++-----------
1 file changed, 37 insertions(+), 17 deletions(-)
--
2.34.5
From: medanisjbara <anis2834133766619@gmail.com>
---
contrib/hide-vacant-tags.patch | 54 +++++++++++++++++++++++-----------
1 file changed, 37 insertions(+), 17 deletions(-)
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<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);
+ }
+ }
+
--
2.34.5