Introduce a check to see if a group holds only 'sticky' clients and use

this check to decide if a group is virtually empty.  Rationale: if a
group contains *only* 'sticky' clients, it should be skipped while
cycling through groups.  Apply similar logic to the group menu.

Based on an idea from phessler@, who also tested another version.
This commit is contained in:
okan
2014-09-17 14:31:37 +00:00
parent 4b6dc96398
commit 74f4a1bad9
3 changed files with 16 additions and 3 deletions

15
group.c
View File

@@ -202,6 +202,19 @@ group_sticky_toggle_exit(struct client_ctx *cc)
client_draw_border(cc);
}
int
group_holds_only_sticky(struct group_ctx *gc)
{
struct client_ctx *cc;
/* Check if all clients in the group are 'sticky'. */
TAILQ_FOREACH(cc, &gc->clientq, group_entry) {
if (!(cc->flags & CLIENT_STICKY))
return(0);
}
return(1);
}
/*
* If all clients in a group are hidden, then the group state is hidden.
*/
@@ -283,7 +296,7 @@ group_cycle(struct screen_ctx *sc, int flags)
if (gc == sc->group_active)
break;
if (!TAILQ_EMPTY(&gc->clientq) && showgroup == NULL)
if (!group_holds_only_sticky(gc) && showgroup == NULL)
showgroup = gc;
else if (!group_hidden_state(gc))
group_hide(gc);