JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
changed arrange functions to contain the Monitor as first argument
authorAnselm R Garbe <garbeam@gmail.com>
Thu, 21 Feb 2008 10:14:42 +0000 (10:14 +0000)
committerAnselm R Garbe <garbeam@gmail.com>
Thu, 21 Feb 2008 10:14:42 +0000 (10:14 +0000)
LICENSE
config.def.h
dwm.c

diff --git a/LICENSE b/LICENSE
index 1cf40cc..1b32b82 100644 (file)
--- a/LICENSE
+++ b/LICENSE
@@ -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>
index 3d8e6cb..7866968 100644 (file)
@@ -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 --git a/dwm.c b/dwm.c
index 66daba3..ff9e66a 100644 (file)
--- a/dwm.c
+++ b/dwm.c
@@ -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 {
@@ -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);
@@ -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);
@@ -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);
@@ -304,7 +307,7 @@ arrange(void) {
                else
                        ban(c);
 
-       monitors[selmonitor].layout->arrange();
+       monitors[selmonitor].layout->arrange(&monitors[selmonitor]);
        focus(NULL);
        restack();
 }
@@ -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);
 }
 
@@ -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;
@@ -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) {
@@ -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");