JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
does this preserve z order for anthony?
[dwm.git] / tag.c
diff --git a/tag.c b/tag.c
index ddffafa..fafc2c5 100644 (file)
--- a/tag.c
+++ b/tag.c
@@ -30,17 +30,6 @@ RULES
 static RReg *rreg = NULL;
 static unsigned int len = 0;
 
-static void
-applytag()
-{
-       /* asserts sel != NULL */
-       settitle(sel);
-       if(!isvisible(sel))
-               arrange(NULL);
-       else
-               drawstatus();
-}
-
 /* extern */
 
 Client *
@@ -87,15 +76,19 @@ initrregs()
 }
 
 void
-settags(Client *c)
+settags(Client *c, Client *trans)
 {
        char prop[512];
        unsigned int i, j;
        regmatch_t tmp;
-       Bool matched = False;
+       Bool matched = trans != NULL;
        XClassHint ch;
 
-       if(XGetClassHint(dpy, c->win, &ch)) {
+       if(matched) {
+               for(i = 0; i < ntags; i++)
+                       c->tags[i] = trans->tags[i];
+       }
+       else if(XGetClassHint(dpy, c->win, &ch)) {
                snprintf(prop, sizeof(prop), "%s:%s:%s",
                                ch.res_class ? ch.res_class : "",
                                ch.res_name ? ch.res_name : "", c->name);
@@ -117,8 +110,7 @@ settags(Client *c)
        if(!matched)
                for(i = 0; i < ntags; i++)
                        c->tags[i] = seltag[i];
-       for(i = 0; i < ntags && !c->tags[i]; i++);
-       c->weight = i;
+       for(c->weight = 0; c->weight < ntags && !c->tags[c->weight]; c->weight++);
 }
 
 void
@@ -132,7 +124,8 @@ tag(Arg *arg)
        for(i = 0; i < ntags; i++)
                sel->tags[i] = False;
        sel->tags[arg->i] = True;
-       applytag();
+       sel->weight = arg->i;
+       arrange(NULL);
 }
 
 void
@@ -147,5 +140,6 @@ toggletag(Arg *arg)
        for(i = 0; i < ntags && !sel->tags[i]; i++);
        if(i == ntags)
                sel->tags[arg->i] = True;
-       applytag();
+       sel->weight = (i == ntags) ? arg->i : i;
+       arrange(NULL);
 }