commit e2e18a8d766a2da36f0d480f8182acf2a27ef282
parent 4952030390aac9d2b8b8a7c1e76d45c2c8c2fb5c
Author: Anselm R. Garbe <garbeam@wmii.de>
Date: Wed, 15 Mar 2006 16:28:13 +0100
some other simplifications
Diffstat:
1 file changed, 24 insertions(+), 7 deletions(-)
diff --git a/cmd/wm/tag.c b/cmd/wm/tag.c
@@ -171,10 +171,20 @@ Createtag:
return t;
}
+static Bool
+hasclient(Tag *t)
+{
+ unsigned int i;
+ for(i = 0; i < t->narea; i++)
+ if(t->area[i]->nframe)
+ return True;
+ return False;
+}
+
void
select_tag(char *arg)
{
- int i, j, n;
+ int i;
Client *c;
Tag *t = get_tag(arg);
@@ -191,15 +201,12 @@ select_tag(char *arg)
}
focus_tag(t);
- for(i = 0; i < ntag; i++) {
- n = 0;
- for(j = 0; j < tag[i]->narea; j++)
- n += tag[i]->area[j]->nframe;
- if(!n) {
+ /* cleanup on select */
+ for(i = 0; i < ntag; i++)
+ if(!hasclient(tag[i])) {
destroy_tag(tag[i]);
i--;
}
- }
if((c = sel_client_of_tag(t)))
focus_client(c);
@@ -237,6 +244,16 @@ update_tags()
}
}
+ for(i = 0; i < ntag; i++)
+ if(hasclient(tag[i])) {
+ tags2str(buf, sizeof(buf), tag[i]->tag, tag[i]->ntag);
+ if(!istag(newctag, nnewctag, buf)) {
+ newctag = (char **)cext_array_attach((void **)newctag, strdup(client[i]->tag[j]),
+ sizeof(char *), &newctagsz);
+ nnewctag++;
+ }
+ }
+
/* propagate tagging events */
for(i = 0; i < nnewctag; i++)
if(!istag(ctag, nctag, newctag[i])) {