diff -r 6365c9425b48 config.default.h --- a/config.default.h Wed Feb 14 09:35:48 2007 +0100 +++ b/config.default.h Wed Feb 14 14:12:21 2007 +0100 @@ -19,6 +19,8 @@ const char *tags[] = { "1", "2", "3", "4 #define SELFGCOLOR "#ffffff" #define MASTER 600 /* per thousand */ +#define MASTERTAGS \ +unsigned int mastertags[] = { 200, 800, MASTER, MASTER, MASTER, MASTER, MASTER, MASTER, MASTER }; #define MODKEY Mod1Mask #define NMASTER 1 /* clients in master area */ #define SNAP 20 /* pixel */ diff -r 6365c9425b48 dwm.h --- a/dwm.h Wed Feb 14 09:35:48 2007 +0100 +++ b/dwm.h Wed Feb 14 14:36:25 2007 +0100 @@ -87,6 +87,8 @@ extern int screen, sx, sy, sw, sh; /* s extern int screen, sx, sy, sw, sh; /* screen geometry */ extern int wax, way, wah, waw; /* windowarea geometry */ extern unsigned int master, nmaster; /* master percent, number of master clients */ +extern unsigned int mastermore; /* master percent for when viewing more tags at once */ +extern unsigned int *mastertag; /* mastertag is array of master percents for individual tags */ extern unsigned int ntags, numlockmask; /* number of tags, dynamic lock mask */ extern void (*handler[LASTEvent])(XEvent *); /* event handler */ extern void (*arrange)(void); /* arrange function, indicates mode */ diff -r 6365c9425b48 main.c --- a/main.c Wed Feb 14 09:35:48 2007 +0100 +++ b/main.c Wed Feb 14 14:13:42 2007 +0100 @@ -19,7 +19,7 @@ char stext[256]; int bh, bmw, screen, sx, sy, sw, sh, wax, way, waw, wah; -unsigned int master, nmaster, ntags, numlockmask; +unsigned int master, nmaster, mastermore, *mastertag, ntags, numlockmask; Atom wmatom[WMLast], netatom[NetLast]; Bool running = True; Bool *seltag; @@ -33,6 +33,8 @@ Window root, barwin; Window root, barwin; /* static */ + +MASTERTAGS static int (*xerrorxlib)(Display *, XErrorEvent *); static Bool otherwm, readin; @@ -58,6 +60,7 @@ cleanup(void) { XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime); XSync(dpy, False); free(seltag); + free(mastertag); } static void @@ -132,7 +135,11 @@ setup(void) { sx = sy = 0; sw = DisplayWidth(dpy, screen); sh = DisplayHeight(dpy, screen); - master = MASTER; + master = mastertags[0]; + mastermore = MASTER; + mastertag = emallocz(sizeof(unsigned int) * ntags); + for(i =0; i < ntags; i++) + mastertag[i] = mastertags[i]; nmaster = NMASTER; bmw = textw(TILESYMBOL) > textw(FLOATSYMBOL) ? textw(TILESYMBOL) : textw(FLOATSYMBOL); /* bar */ diff -r 6365c9425b48 view.c --- a/view.c Wed Feb 14 09:35:48 2007 +0100 +++ b/view.c Wed Feb 14 13:42:44 2007 +0100 @@ -33,6 +33,20 @@ togglemax(Client *c) { } resize(c, True); while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); +} + +static void +doresize(unsigned int *pmaster, unsigned int i) { + if(i == 0) + *pmaster = MASTER; + else { + if(waw * (*pmaster + i) / 1000 >= waw - 2 * BORDERPX + || waw * (*pmaster + i) / 1000 <= 2 * BORDERPX) + return; + *pmaster += i; + } + master = *pmaster; + arrange(); } /* extern */ @@ -170,15 +184,16 @@ isvisible(Client *c) { void resizemaster(Arg *arg) { - if(arg->i == 0) - master = MASTER; - else { - if(waw * (master + arg->i) / 1000 >= waw - 2 * BORDERPX - || waw * (master + arg->i) / 1000 <= 2 * BORDERPX) - return; - master += arg->i; - } - arrange(); + int i, num = 0, cur; + for(i = 0; i < ntags; i++) + if(seltag[i]) { + cur = i; + num++; + } + if(num == 1) + doresize(&mastertag[cur], arg->i); + else + doresize(&mastermore, arg->i); } void @@ -223,12 +238,23 @@ togglemode(Arg *arg) { void toggleview(Arg *arg) { - unsigned int i; + unsigned int i, num = 0, cur; 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 */ + + for(i = 0; i < ntags; i++) + if(seltag[i]) { + cur = i; + num++; + } + if(num == 1) + master = mastertag[cur]; + else + master = mastermore; + arrange(); } @@ -238,8 +264,10 @@ view(Arg *arg) { for(i = 0; i < ntags; i++) seltag[i] = (arg->i == -1) ? True : False; - if(arg->i >= 0 && arg->i < ntags) + if(arg->i >= 0 && arg->i < ntags) { seltag[arg->i] = True; + master = mastertag[arg->i]; + } arrange(); }