hide-vacant-tags: fix tag 0 is hiding all
This commit is contained in:
		
				
					committed by
					
						 Raphael Robatsch
						Raphael Robatsch
					
				
			
			
				
	
			
			
			
						parent
						
							ea9dbfe022
						
					
				
				
					commit
					624e92927b
				
			| @@ -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); | ||||
|  	} | ||||
|  } | ||||
|   | ||||
|   | ||||
		Reference in New Issue
	
	Block a user