diff -r 795c26a59016 dwm.h --- a/dwm.h Sun Aug 26 12:54:20 2007 +0200 +++ b/dwm.h Wed Sep 05 20:49:43 2007 -0400 @@ -77,6 +77,7 @@ extern char stext[256]; /* status tex extern char stext[256]; /* status text */ extern int screen, sx, sy, sw, sh; /* screen geometry */ extern int wax, way, wah, waw; /* windowarea geometry */ +extern double* mwfact; extern unsigned int bh, blw, bpos; /* bar height, bar layout label width, bar position */ extern unsigned int ntags, numlockmask; /* number of tags, numlock mask */ extern void (*handler[LASTEvent])(XEvent *); /* event handler */ diff -r 795c26a59016 main.c --- a/main.c Sun Aug 26 12:54:20 2007 +0200 +++ b/main.c Wed Sep 05 20:49:43 2007 -0400 @@ -20,6 +20,7 @@ unsigned int bh, ntags; unsigned int bh, ntags; unsigned int bpos = BARPOS; unsigned int numlockmask = 0; +double* mwfact; Atom wmatom[WMLast], netatom[NetLast]; Bool *seltags; Bool selscreen = True; diff -r 795c26a59016 screen.c --- a/screen.c Sun Aug 26 12:54:20 2007 +0200 +++ b/screen.c Wed Sep 05 20:49:43 2007 -0400 @@ -178,6 +178,9 @@ initlayouts(void) { if(w > blw) blw = w; } + mwfact = emallocz(ntags * sizeof(double)); + for(i = 0; i < ntags; i++) + mwfact[i] = MWFACT; } Bool diff -r 795c26a59016 tile.c --- a/tile.c Sun Aug 26 12:54:20 2007 +0200 +++ b/tile.c Wed Sep 05 20:49:43 2007 -0400 @@ -1,31 +1,34 @@ /* See LICENSE file for copyright and license details. */ #include "dwm.h" #include - /* static */ -static double mwfact = MWFACT; /* extern */ void setmwfact(const char *arg) { double delta; + int i; if(!isarrange(tile)) return; + /* arg handling, manipulate mwfact */ + for(i = 0; i < ntags; i++) + if(seltags[i]) break; + if(arg == NULL) - mwfact = MWFACT; + mwfact[i] = MWFACT; else if(1 == sscanf(arg, "%lf", &delta)) { if(arg[0] != '+' && arg[0] != '-') - mwfact = delta; + mwfact[i] = delta; else - mwfact += delta; - if(mwfact < 0.1) - mwfact = 0.1; - else if(mwfact > 0.9) - mwfact = 0.9; + mwfact[i] += delta; + if(mwfact[i] < 0.1) + mwfact[i] = 0.1; + else if(mwfact[i] > 0.9) + mwfact[i] = 0.9; } arrange(); } @@ -37,9 +40,11 @@ tile(void) { for(n = 0, c = nexttiled(clients); c; c = nexttiled(c->next)) n++; + for(i = 0; i < ntags; i++) + if(seltags[i]) break; /* window geoms */ - mw = (n == 1) ? waw : mwfact * waw; + mw = (n == 1) ? waw : mwfact[i] * waw; th = (n > 1) ? wah / (n - 1) : 0; if(n > 1 && th < bh) th = wah;