t* dwm + patches
       
   URI git clone git://git.codevoid.de/dwm-sdk
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit 2e8e5509d9cad9229d2d79a1de75038d94032cfb
   DIR parent 4426032450777e63ac9a8967cd67382497954c51
   URI Author: Anselm R Garbe <garbeam@gmail.com>
       Date:   Thu, 21 Feb 2008 10:14:42 +0000
       
       changed arrange functions to contain the Monitor as first argument
       Diffstat:
         M LICENSE                             |       2 +-
         M config.def.h                        |       2 +-
         M dwm.c                               |     100 +++++++++++++++----------------
       
       3 files changed, 51 insertions(+), 53 deletions(-)
       ---
   DIR diff --git a/LICENSE b/LICENSE
       t@@ -1,6 +1,6 @@
        MIT/X Consortium License
        
       -© 2006-2007 Anselm R. Garbe <garbeam at gmail dot com>
       +© 2006-2008 Anselm R. Garbe <garbeam at gmail dot com>
        © 2006-2007 Sander van Dijk <a dot h dot vandijk at gmail dot com>
        © 2006-2007 Jukka Salmi <jukka at salmi dot ch>
        © 2007 Premysl Hruby <dfenze at gmail dot com>
   DIR diff --git a/config.def.h b/config.def.h
       t@@ -3,7 +3,7 @@
        /* appearance */
        #define BARPOS                        BarTop /* BarBot, BarOff */
        #define BORDERPX                1
       -#define FONT                        "-*-terminus-medium-*-*-*-*-*-*-*-*-*-*-*"
       +#define FONT                        "-*-terminus-medium-r-normal-*-14-*-*-*-*-*-*-*"
        #define NORMBORDERCOLOR                "#cccccc"
        #define NORMBGCOLOR                "#cccccc"
        #define NORMFGCOLOR                "#000000"
   DIR diff --git a/dwm.c b/dwm.c
       t@@ -99,9 +99,10 @@ typedef struct {
                const char *arg;
        } Key;
        
       +typedef struct Monitor Monitor;
        typedef struct {
                const char *symbol;
       -        void (*arrange)(void);
       +        void (*arrange)(Monitor *);
        } Layout;
        
        typedef struct {
       t@@ -116,14 +117,16 @@ typedef struct {
                regex_t *tagregex;
        } Regs;
        
       -typedef struct {
       -        Window barwin;
       +struct Monitor {
       +        unsigned int id;
                int sx, sy, sw, sh, wax, way, wah, waw;
       +        double mwfact;
                Bool *seltags;
                Bool *prevtags;
                Layout *layout;
       -        double mwfact;
       -} Monitor;
       +        Window barwin;
       +};
       +
        
        /* function declarations */
        void applyrules(Client *c);
       t@@ -148,7 +151,7 @@ void *emallocz(unsigned int size);
        void enternotify(XEvent *e);
        void eprint(const char *errstr, ...);
        void expose(XEvent *e);
       -void floating(void); /* default floating layout */
       +void floating(Monitor *m); /* default floating layout */
        void focus(Client *c);
        void focusin(XEvent *e);
        void focusnext(const char *arg);
       t@@ -188,7 +191,7 @@ void spawn(const char *arg);
        void tag(const char *arg);
        unsigned int textnw(const char *text, unsigned int len);
        unsigned int textw(const char *text);
       -void tile(void);
       +void tile(Monitor *m);
        void togglebar(const char *arg);
        void togglefloating(const char *arg);
        void toggletag(const char *arg);
       t@@ -304,7 +307,7 @@ arrange(void) {
                        else
                                ban(c);
        
       -        monitors[selmonitor].layout->arrange();
       +        monitors[selmonitor].layout->arrange(&monitors[selmonitor]);
                focus(NULL);
                restack();
        }
       t@@ -719,12 +722,12 @@ expose(XEvent *e) {
        }
        
        void
       -floating(void) { /* default floating layout */
       +floating(Monitor *m) { /* default floating layout */
                Client *c;
        
                domwfact = dozoom = False;
                for(c = clients; c; c = c->next)
       -                if(isvisible(c, selmonitor))
       +                if(isvisible(c, m->id))
                                resize(c, c->x, c->y, c->w, c->h, True);
        }
        
       t@@ -1598,6 +1601,7 @@ setup(void) {
                for(i = 0; i < mcount; i++) {
                        /* init geometry */
                        m = &monitors[i];
       +                m->id = i;
        
                        if (mcount != 1 && isxinerama) {
                                m->sx = info[i].x_org;
       t@@ -1714,56 +1718,50 @@ textw(const char *text) {
        }
        
        void
       -tile(void) {
       -        unsigned int i, j, n, nx, ny, nw, nh, mw, th;
       +tile(Monitor *m) {
       +        unsigned int i, n, nx, ny, nw, nh, mw, th;
                Client *c, *mc;
        
                domwfact = dozoom = True;
        
                nx = ny = nw = 0; /* gcc stupidity requires this */
        
       -        for (i = 0; i < mcount; i++) {
       -                Monitor *m = &monitors[i];
       -
       -                for(n = 0, c = nexttiled(clients, i); c; c = nexttiled(c->next, i))
       -                        n++;
       -
       -                /* window geoms */
       -                mw = (n == 1) ? m->waw : m->mwfact * m->waw;
       -                th = (n > 1) ? m->wah / (n - 1) : 0;
       -                if(n > 1 && th < bh)
       -                        th = m->wah;
       -
       -                for(j = 0, c = mc = nexttiled(clients, i); c; c = nexttiled(c->next, i)) {
       -                        if(j == 0) { /* master */
       -                                nx = m->wax;
       +        for(n = 0, c = nexttiled(clients, m->id); c; c = nexttiled(c->next, m->id))
       +                n++;
       +
       +        /* window geoms */
       +        mw = (n == 1) ? m->waw : m->mwfact * m->waw;
       +        th = (n > 1) ? m->wah / (n - 1) : 0;
       +        if(n > 1 && th < bh)
       +                th = m->wah;
       +
       +        for(i = 0, c = mc = nexttiled(clients, m->id); c; c = nexttiled(c->next, m->id)) {
       +                if(i == 0) { /* master */
       +                        nx = m->wax;
       +                        ny = m->way;
       +                        nw = mw - 2 * c->border;
       +                        nh = m->wah - 2 * c->border;
       +                }
       +                else {  /* tile window */
       +                        if(i == 1) {
                                        ny = m->way;
       -                                nw = mw - 2 * c->border;
       -                                nh = m->wah - 2 * c->border;
       -                        }
       -                        else {  /* tile window */
       -                                if(j == 1) {
       -                                        ny = m->way;
       -                                        nx += mc->w + 2 * mc->border;
       -                                        nw = m->waw - mw - 2 * c->border;
       -                                }
       -                                if(j + 1 == n) /* remainder */
       -                                        nh = (m->way + m->wah) - ny - 2 * c->border;
       -                                else
       -                                        nh = th - 2 * c->border;
       +                                nx += mc->w + 2 * mc->border;
       +                                nw = m->waw - mw - 2 * c->border;
                                }
       -                        fprintf(stderr, "tile(%d, %d, %d, %d)\n", nx, ny, nw, nh);
       -                        resize(c, nx, ny, nw, nh, RESIZEHINTS);
       -                        if((RESIZEHINTS) && ((c->h < bh) || (c->h > nh) || (c->w < bh) || (c->w > nw)))
       -                                /* client doesn't accept size constraints */
       -                                resize(c, nx, ny, nw, nh, False);
       -                        if(n > 1 && th != m->wah)
       -                                ny = c->y + c->h + 2 * c->border;
       -
       -                        j++;
       +                        if(i + 1 == n) /* remainder */
       +                                nh = (m->way + m->wah) - ny - 2 * c->border;
       +                        else
       +                                nh = th - 2 * c->border;
                        }
       +                resize(c, nx, ny, nw, nh, RESIZEHINTS);
       +                if((RESIZEHINTS) && ((c->h < bh) || (c->h > nh) || (c->w < bh) || (c->w > nw)))
       +                        /* client doesn't accept size constraints */
       +                        resize(c, nx, ny, nw, nh, False);
       +                if(n > 1 && th != m->wah)
       +                        ny = c->y + c->h + 2 * c->border;
       +
       +                i++;
                }
       -        fprintf(stderr, "done\n");
        }
        void
        togglebar(const char *arg) {
       t@@ -2045,7 +2043,7 @@ selectmonitor(const char *arg) {
        int
        main(int argc, char *argv[]) {
                if(argc == 2 && !strcmp("-v", argv[1]))
       -                eprint("dwm-"VERSION", © 2006-2007 Anselm R. Garbe, Sander van Dijk, "
       +                eprint("dwm-"VERSION", © 2006-2008 Anselm R. Garbe, Sander van Dijk, "
                               "Jukka Salmi, Premysl Hruby, Szabolcs Nagy, Christof Musik\n");
                else if(argc != 1)
                        eprint("usage: dwm [-v]\n");