--- config.default.h Tue Aug 21 18:09:46 2007 +++ config.default.h Tue Aug 21 18:10:27 2007 @@ -31,6 +31,7 @@ static Layout layouts[] = { \ /* symbol function */ \ { "[]=", tile }, /* first entry is default */ \ { "><>", floating }, \ + { "TTT", bstack }, \ }; #define MWFACT 0.6 /* master width factor [0.1 .. 0.9] */ #define SNAP 32 /* snap pixel */ --- tile.c Tue Aug 21 18:09:46 2007 +++ tile.c Tue Aug 21 18:17:00 2007 @@ -12,7 +12,7 @@ void setmwfact(const char *arg) { double delta; - if(!isarrange(tile)) + if(!isarrange(tile) && !isarrange(bstack)) return; /* arg handling, manipulate mwfact */ if(arg == NULL) @@ -71,10 +71,49 @@ tile(void) { } void +bstack(void) { + unsigned int i, n, nx, ny, nw, nh, mw, mh, tw, th; + Client *c; + + for(n = 0, c = nexttiled(clients); c; c = nexttiled(c->next)) + n++; + + /* window geoms */ + mh = (n > 1) ? (wah * mwfact) / 1 : wah / (n > 0 ? n : 1); + mw = waw; + th = (n > 1) ? (wah * (1 - mwfact)) / 1 : 0; + tw = (n > 1) ? waw / (n - 1) : 0; + + for(i = 0, c = nexttiled(clients); c; c = nexttiled(c->next)) { + c->ismax = False; + nx = wax; + ny = way; + if(i < 1) { + ny += i * mh; + nw = mw - 2 * c->border; + nh = mh - 2 * c->border; + } + else { + nx += (i - 1) * tw; + ny += mh * 1; + if(i + 1 == n) { /* remainder */ + nw = (wax + waw) - nx - 2 * c->border; + } + else { + nw = tw - 2 * c->border; + } + nh = th - 2 * c->border + 1; + } + resize(c, nx, ny, nw, nh, False); + i++; + } +} + +void zoom(const char *arg) { Client *c; - if(!sel || !isarrange(tile) || sel->isfloating) + if(!sel || (!isarrange(tile) && !isarrange(bstack)) || sel->isfloating) return; if((c = sel) == nexttiled(clients)) if(!(c = nexttiled(c->next))) --- tile.h Tue Aug 21 18:09:46 2007 +++ tile.h Tue Aug 21 18:10:55 2007 @@ -3,4 +3,5 @@ /* tile.c */ void setmwfact(const char *arg); /* sets master width factor */ void tile(void); /* arranges all windows tiled */ +void bstack(void); /* arranges all windows bottom stacked */ void zoom(const char *arg); /* zooms the focused client to master area, arg is ignored */