changed arrange functions to contain the Monitor as first argument
authorAnselm R Garbe <garbeam@gmail.com>
Thu, 21 Feb 2008 10:14:42 +0000
changeset 1092 2c20bc278e5e
parent 1091 908feb1da3c4
child 1093 5170cc8c078e
changed arrange functions to contain the Monitor as first argument
LICENSE
config.def.h
dwm.c
--- 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 <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>
--- 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"
--- 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");