# HG changeset patch # User Anselm R Garbe # Date 1203588882 0 # Node ID 2c20bc278e5e06e69d6979723a5d803351168aea # Parent 908feb1da3c4237ee4ed6bb30e88b895606458cf changed arrange functions to contain the Monitor as first argument diff -r 908feb1da3c4 -r 2c20bc278e5e LICENSE --- a/LICENSE Wed Feb 20 13:48:52 2008 +0000 +++ b/LICENSE Thu Feb 21 10:14:42 2008 +0000 @@ -1,6 +1,6 @@ MIT/X Consortium License -© 2006-2007 Anselm R. Garbe +© 2006-2008 Anselm R. Garbe © 2006-2007 Sander van Dijk © 2006-2007 Jukka Salmi © 2007 Premysl Hruby diff -r 908feb1da3c4 -r 2c20bc278e5e config.def.h --- a/config.def.h Wed Feb 20 13:48:52 2008 +0000 +++ b/config.def.h Thu Feb 21 10:14:42 2008 +0000 @@ -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" diff -r 908feb1da3c4 -r 2c20bc278e5e dwm.c --- a/dwm.c Wed Feb 20 13:48:52 2008 +0000 +++ b/dwm.c Thu Feb 21 10:14:42 2008 +0000 @@ -99,9 +99,10 @@ const char *arg; } Key; +typedef struct Monitor Monitor; typedef struct { const char *symbol; - void (*arrange)(void); + void (*arrange)(Monitor *); } Layout; typedef struct { @@ -116,14 +117,16 @@ 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); @@ -148,7 +151,7 @@ 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); @@ -188,7 +191,7 @@ 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); @@ -304,7 +307,7 @@ else ban(c); - monitors[selmonitor].layout->arrange(); + monitors[selmonitor].layout->arrange(&monitors[selmonitor]); focus(NULL); restack(); } @@ -719,12 +722,12 @@ } 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); } @@ -1598,6 +1601,7 @@ for(i = 0; i < mcount; i++) { /* init geometry */ m = &monitors[i]; + m->id = i; if (mcount != 1 && isxinerama) { m->sx = info[i].x_org; @@ -1714,56 +1718,50 @@ } 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, m->id); c; c = nexttiled(c->next, m->id)) + n++; - 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; - /* 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(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; + nx += mc->w + 2 * mc->border; + nw = m->waw - mw - 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; - } - 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; + 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; - j++; - } + i++; } - fprintf(stderr, "done\n"); } void togglebar(const char *arg) { @@ -2045,7 +2043,7 @@ 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");