t* dwm + patches
       
   URI git clone git://git.codevoid.de/dwm-sdk
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit fee8df6ccf3ab1494421d422af252f7b3da3a811
   DIR parent 8fa47ac679cfd91c022a35f2469bea7396e5f7c7
   URI Author: Anselm R. Garbe <arg@10kloc.org>
       Date:   Fri, 29 Sep 2006 16:22:20 +0200
       
       added the new dotile as described on ml
       Diffstat:
         M config.arg.h                        |       2 ++
         M config.default.h                    |       2 ++
         M dwm.h                               |       9 ++++++---
         M event.c                             |       5 +++--
         M main.c                              |       2 +-
         M view.c                              |     128 +++++++++++++++++++++++--------
       
       6 files changed, 112 insertions(+), 36 deletions(-)
       ---
   DIR diff --git a/config.arg.h b/config.arg.h
       t@@ -36,6 +36,8 @@ static Key key[] = { \
                { MODKEY,                        XK_j,                focusnext,        { 0 } }, \
                { MODKEY,                        XK_k,                focusprev,        { 0 } }, \
                { MODKEY,                        XK_Return,        zoom,                { 0 } }, \
       +        { MODKEY,                        XK_b,                togglestackpos,        { 0 } }, \
       +        { MODKEY,                        XK_d,                togglestackdir,        { 0 } }, \
                { MODKEY,                        XK_g,                resizecol,        { .i = 20 } }, \
                { MODKEY,                        XK_s,                resizecol,        { .i = -20 } }, \
                { MODKEY|ShiftMask,                XK_1,                tag,                { .i = 0 } }, \
   DIR diff --git a/config.default.h b/config.default.h
       t@@ -30,6 +30,8 @@ static Key key[] = { \
                { MODKEY,                        XK_Tab,                focusnext,        { 0 } }, \
                { MODKEY|ShiftMask,                XK_Tab,                focusprev,        { 0 } }, \
                { MODKEY,                        XK_Return,        zoom,                { 0 } }, \
       +        { MODKEY,                        XK_b,                togglestackpos,        { 0 } }, \
       +        { MODKEY,                        XK_d,                togglestackdir,        { 0 } }, \
                { MODKEY,                        XK_g,                resizecol,        { .i = 20 } }, \
                { MODKEY,                        XK_s,                resizecol,        { .i = -20 } }, \
                { MODKEY|ShiftMask,                XK_1,                tag,                { .i = 0 } }, \
   DIR diff --git a/dwm.h b/dwm.h
       t@@ -102,7 +102,7 @@ struct Client {
        extern const char *tags[];                        /* all tags */
        extern char stext[1024];                        /* status text */
        extern int bx, by, bw, bh, bmw;                        /* bar geometry, bar mode label width */
       -extern int master, screen, sx, sy, sw, sh;        /* screen geometry, master width */
       +extern int master, screen, sx, sy, sw, sh;        /* screen geometry, master dimension*/
        extern unsigned int ntags, numlockmask;                /* number of tags, dynamic lock mask */
        extern void (*handler[LASTEvent])(XEvent *);        /* event handler */
        extern void (*arrange)(Arg *);                        /* arrange function, indicates mode  */
       t@@ -170,10 +170,13 @@ extern void dotile(Arg *arg);                        /* arranges all windows, arg is ignored */
        extern void focusnext(Arg *arg);                /* focuses next visible client, arg is ignored  */
        extern void focusprev(Arg *arg);                /* focuses previous visible client, arg is ignored */
        extern Bool isvisible(Client *c);                /* returns True if client is visible */
       -extern void resizecol(Arg *arg);                /* resizes the master width with arg's index value */
       +extern void resizecol(Arg *arg);                /* resizes the master dimension with arg's index value */
        extern void restack(void);                        /* restores z layers of all clients */
       +extern void togglestackdir(Arg *arg);                /* toggles stack direction */
       +extern void togglestackpos(Arg *arg);                /* toggles stack position */
        extern void togglemode(Arg *arg);                /* toggles global arrange function (dotile/dofloat) */
        extern void toggleview(Arg *arg);                /* toggles the tag with arg's index (in)visible */
       +extern void updatemaster(void);                        /* updates master dimension */
        extern void view(Arg *arg);                        /* views the tag with arg's index */
        extern void viewall(Arg *arg);                        /* views all tags, arg is ignored */
       -extern void zoom(Arg *arg);                        /* zooms the focused client to master column, arg is ignored */
       +extern void zoom(Arg *arg);                        /* zooms the focused client to master area, arg is ignored */
   DIR diff --git a/event.c b/event.c
       t@@ -177,8 +177,9 @@ configurerequest(XEvent *e) {
                                configure(c);
                        XSync(dpy, False);
                        if(c->isfloat) {
       -                        if(isvisible(c))
       -                                resize(c, False, TopLeft);
       +                        resize(c, False, TopLeft);
       +                        if(!isvisible(c))
       +                                ban(c);
                        }
                        else
                                arrange(NULL);
   DIR diff --git a/main.c b/main.c
       t@@ -133,7 +133,7 @@ setup(void) {
                sx = sy = 0;
                sw = DisplayWidth(dpy, screen);
                sh = DisplayHeight(dpy, screen);
       -        master = ((stackpos == StackBottom ? sh - bh : sw) * MASTER) / 100;
       +        updatemaster();
        
                bx = by = 0;
                bw = sw;
   DIR diff --git a/view.c b/view.c
       t@@ -148,52 +148,93 @@ dotile(Arg *arg) {
                                        c->h = sh - 2 * BORDERPX - bh;
                                }
                                else if(i == 0) { /* master window */
       -                                c->x = sx;
       -                                if(stackpos == StackLeft)
       -                                        c->x += master;
       -                                c->y = sy + bh;
       -                                if(isvertical) {
       +                                switch(stackpos) {
       +                                case StackLeft:
       +                                        c->x = sx + stackw;
       +                                        c->y = sy + bh;
                                                c->w = master - 2 * BORDERPX;
       -                                        c->h = sh - 2 * BORDERPX - bh;
       -                                }
       -                                else {
       -                                        c->w = sw;
       +                                        c->h = sh - bh - 2 * BORDERPX;
       +                                        break;
       +                                case StackBottom:
       +                                        c->x = sx;
       +                                        c->y = sy + bh;
       +                                        c->w = sw - 2 * BORDERPX;
                                                c->h = master - 2 * BORDERPX;
       +                                        break;
       +                                case StackRight:
       +                                        c->x = sx;
       +                                        c->y = sy + bh;
       +                                        c->w = master - 2 * BORDERPX;
       +                                        c->h = sh - bh - 2 * BORDERPX;
       +                                        break;
                                        }
                                }
                                else if((isvertical && th > bh) || (!isvertical && tw > MINW)) {
                                        /* tile window */
       -                                c->x = sx;
       -                                if(isvertical)
       -                                        c->y = sy + (i - 1) * th + bh;
       -                                else
       -                                        c->y = sy + bh;
       -                                if(stackpos == StackRight)
       -                                        c->x += master;
       -                                else if(stackpos == StackBottom)
       -                                        c->y += master;
                                        c->w = tw - 2 * BORDERPX;
                                        c->h = th - 2 * BORDERPX;
       -                                if(i + 1 == n) { /* fixes for last tile to take up rest space */
       -                                        if(isvertical)
       -                                                c->h = sh - c->y - 2 * BORDERPX;
       +                                switch(stackpos) {
       +                                case StackLeft:
       +                                        if(isvertical) {
       +                                                c->x = sx;
       +                                                c->y = sy + (i - 1) * th + bh;
       +                                                if(i + 1 == n)
       +                                                        c->h = sh - c->y - 2 * BORDERPX;
       +                                        }
                                                else {
       -                                                if(stackpos == StackLeft)
       -                                                        c->w = master - c->x - 2 * BORDERPX;
       -                                                else
       +                                                c->x = sx + (i - 1) * tw;
       +                                                c->y = sy + bh;
       +                                                if(i + 1 == n)
       +                                                        c->w = sx + stackw - c->x - 2 * BORDERPX;
       +                                        }
       +                                        break;
       +                                case StackBottom:
       +                                        if(isvertical) {
       +                                                c->x = sx;
       +                                                c->y = sy + master + (i - 1) * th + bh;
       +                                                if(i + 1 == n)
       +                                                        c->h = sh - c->y - 2 * BORDERPX;
       +                                        }
       +                                        else {
       +                                                c->x = sx + (i - 1) * tw;
       +                                                c->y = sy + bh + master;
       +                                                if(i + 1 == n)
                                                                c->w = sw - c->x - 2 * BORDERPX;
                                                }
       +                                        break;
       +                                case StackRight:
       +                                        if(isvertical) {
       +                                                c->x = sx + master;
       +                                                c->y = sy + (i - 1) * th + bh;
       +                                                if(i + 1 == n)
       +                                                        c->h = sh - c->y - 2 * BORDERPX;
       +                                        }
       +                                        else {
       +                                                c->x = sx + master + (i - 1) * tw;
       +                                                c->y = sy + bh;
       +                                                if(i + 1 == n)
       +                                                        c->w = sx + stackw - c->x - 2 * BORDERPX;
       +                                        }
       +                                        break;
                                        }
                                }
                                else { /* fallback if th < bh resp. tw < MINW */
       -                                c->x = sx;
       -                                c->y = sy + bh;
       -                                if(stackpos == StackRight)
       -                                        c->x += master;
       -                                else if(stackpos == StackBottom)
       -                                        c->y += master;
                                        c->w = stackw - 2 * BORDERPX;
                                        c->h = stackh - 2 * BORDERPX;
       +                                switch(stackpos) {
       +                                case StackLeft:
       +                                        c->x = sx;
       +                                        c->y = sy + bh;
       +                                        break;
       +                                case StackBottom:
       +                                        c->x = sx;
       +                                        c->y = sy + master;
       +                                        break;
       +                                case StackRight:
       +                                        c->x = sx + master;
       +                                        c->y = sy + bh;
       +                                        break;
       +                                }
                                }
                                resize(c, False, TopLeft);
                                i++;
       t@@ -319,6 +360,31 @@ toggleview(Arg *arg) {
        }
        
        void
       +togglestackdir(Arg *arg) {
       +        if(arrange == dofloat)
       +                return;
       +        isvertical = !isvertical;
       +        arrange(NULL);
       +}
       +
       +void
       +togglestackpos(Arg *arg) {
       +        if(arrange == dofloat)
       +                return;
       +        if(stackpos == StackBottom)
       +                stackpos = STACKPOS;
       +        else
       +                stackpos = StackBottom;
       +        updatemaster();
       +        arrange(NULL);
       +}
       +
       +void
       +updatemaster(void) {
       +        master = ((stackpos == StackBottom ? sh - bh : sw) * MASTER) / 100;
       +}
       +
       +void
        view(Arg *arg) {
                unsigned int i;
        
       t@@ -339,6 +405,8 @@ viewall(Arg *arg) {
                arrange(NULL);
        }
        
       +
       +
        void
        zoom(Arg *arg) {
                unsigned int n;