diff -r d6ca0f0dd71c dwm.h --- a/dwm.h Tue Jan 16 12:38:08 2007 +0000 +++ b/dwm.h Tue Jan 16 12:41:15 2007 +0000 @@ -95,6 +95,7 @@ extern int wax, way, wah, waw; /* wind extern int wax, way, wah, waw; /* windowarea geometry */ extern unsigned int master, nmaster; /* master percent, number of master clients */ extern unsigned int ntags, numlockmask; /* number of tags, dynamic lock mask */ +extern unsigned int mastertag; /* which tag is the current 'master' tag */ extern void (*handler[LASTEvent])(XEvent *); /* event handler */ extern void (*arrange)(void); /* arrange function, indicates mode */ extern Atom wmatom[WMLast], netatom[NetLast]; diff -r d6ca0f0dd71c main.c --- a/main.c Tue Jan 16 12:38:08 2007 +0000 +++ b/main.c Tue Jan 16 12:41:15 2007 +0000 @@ -20,7 +20,7 @@ char stext[256]; char stext[256]; Bool *seltag; int bh, bmw, screen, sx, sy, sw, sh, wax, way, waw, wah; -unsigned int master, nmaster, ntags, numlockmask; +unsigned int master, nmaster, ntags, numlockmask, mastertag; Atom wmatom[WMLast], netatom[NetLast]; Bool running = True; Bool issel = True; @@ -120,6 +120,7 @@ setup(void) { for(ntags = 0; tags[ntags]; ntags++); seltag = emallocz(sizeof(Bool) * ntags); seltag[0] = True; + mastertag = 0; /* style */ dc.norm[ColBorder] = getcolor(NORMBORDERCOLOR); dc.norm[ColBG] = getcolor(NORMBGCOLOR); diff -r d6ca0f0dd71c tag.c --- a/tag.c Tue Jan 16 12:38:08 2007 +0000 +++ b/tag.c Tue Jan 16 12:41:15 2007 +0000 @@ -103,7 +103,7 @@ settags(Client *c, Client *trans) { } if(!matched) for(i = 0; i < ntags; i++) - c->tags[i] = seltag[i]; + c->tags[i] = mastertag == i; } void diff -r d6ca0f0dd71c view.c --- a/view.c Tue Jan 16 12:38:08 2007 +0000 +++ b/view.c Tue Jan 16 12:41:15 2007 +0000 @@ -225,9 +225,12 @@ toggleview(Arg *arg) { unsigned int i; seltag[arg->i] = !seltag[arg->i]; + for(i = 0; i < ntags && !seltag[i]; i++); if(i == ntags) seltag[arg->i] = True; /* cannot toggle last view */ + else + mastertag = (mastertag == arg->i) ? i : mastertag; /* check for new master */ arrange(); } @@ -239,6 +242,7 @@ view(Arg *arg) { seltag[i] = (arg->i == -1) ? True : False; if(arg->i >= 0 && arg->i < ntags) seltag[arg->i] = True; + mastertag = arg->i; arrange(); }