about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAnselm R Garbe <anselm@garbe.us>2009-07-06 20:12:47 +0100
committerAnselm R Garbe <anselm@garbe.us>2009-07-06 20:12:47 +0100
commita72dc2fec277bb517adcb98edfb18f469333d980 (patch)
treec6de2b9f83d5e503e64f1ed9e40b729a04720531
parent8b17f5517b12a84a52e9073ace4c8bb9eb6bb941 (diff)
downloaddwm-a72dc2fec277bb517adcb98edfb18f469333d980.tar.gz
applied Mate's patch, added Mate to LICENSE
-rw-r--r--LICENSE1
-rw-r--r--dwm.c40
2 files changed, 21 insertions, 20 deletions
diff --git a/LICENSE b/LICENSE
index 2f161ec..a84241a 100644
--- a/LICENSE
+++ b/LICENSE
@@ -10,6 +10,7 @@ MIT/X Consortium License
 © 2007-2008 Peter Hartlich <sgkkr at hartlich dot com>
 © 2008 Martin Hurton <martin dot hurton at gmail dot com>
 © 2008 Neale Pickett <neale dot woozle dot org>
+© 2009 Mate Nagy <mnagy@port70.net>
 
 Permission is hereby granted, free of charge, to any person obtaining a
 copy of this software and associated documentation files (the "Software"),
diff --git a/dwm.c b/dwm.c
index 9e049c6..c0a15cc 100644
--- a/dwm.c
+++ b/dwm.c
@@ -136,6 +136,7 @@ struct Monitor {
 	Client *stack;
 	Monitor *next;
 	Window barwin;
+	Layout *lt[2];
 };
 
 typedef struct {
@@ -261,7 +262,6 @@ static Bool running = True;
 static Cursor cursor[CurLast];
 static Display *dpy;
 static DC dc;
-static Layout *lt[] = { NULL, NULL };
 static Monitor *mons = NULL, *selmon = NULL;
 static Window root;
 
@@ -376,8 +376,8 @@ arrange(void) {
 		showhide(m->stack);
 	focus(NULL);
 	for(m = mons; m; m = m->next) {
-		if(lt[m->sellt]->arrange)
-			lt[m->sellt]->arrange(m);
+		if(m->lt[m->sellt]->arrange)
+			m->lt[m->sellt]->arrange(m);
 		restack(m);
 	}
 }
@@ -456,7 +456,7 @@ cleanup(void) {
 	Monitor *m;
 
 	view(&a);
-	lt[selmon->sellt] = &foo;
+	selmon->lt[selmon->sellt] = &foo;
 	for(m = mons; m; m = m->next)
 		while(m->stack)
 			unmanage(m->stack);
@@ -547,7 +547,7 @@ configurerequest(XEvent *e) {
 	if((c = wintoclient(ev->window))) {
 		if(ev->value_mask & CWBorderWidth)
 			c->bw = ev->border_width;
-		else if(c->isfloating || !lt[selmon->sellt]->arrange) {
+		else if(c->isfloating || !selmon->lt[selmon->sellt]->arrange) {
 			m = c->mon;
 			if(ev->value_mask & CWX)
 				c->x = m->mx + ev->x;
@@ -668,7 +668,7 @@ drawbar(Monitor *m) {
 	}
 	if(blw > 0) {
 		dc.w = blw;
-		drawtext(lt[m->sellt]->symbol, dc.norm, False);
+		drawtext(m->lt[m->sellt]->symbol, dc.norm, False);
 		x = dc.x + dc.w;
 	}
 	else
@@ -1170,11 +1170,11 @@ movemouse(const Arg *arg) {
 					ny = selmon->wy;
 				else if(abs((selmon->wy + selmon->wh) - (ny + HEIGHT(c))) < snap)
 					ny = selmon->wy + selmon->wh - HEIGHT(c);
-				if(!c->isfloating && lt[selmon->sellt]->arrange
+				if(!c->isfloating && selmon->lt[selmon->sellt]->arrange
 				                  && (abs(nx - c->x) > snap || abs(ny - c->y) > snap))
 					togglefloating(NULL);
 			}
-			if(!lt[selmon->sellt]->arrange || c->isfloating)
+			if(!selmon->lt[selmon->sellt]->arrange || c->isfloating)
 				resize(c, nx, ny, c->w, c->h, True);
 			break;
 		}
@@ -1289,11 +1289,11 @@ resizemouse(const Arg *arg) {
 			nh = MAX(ev.xmotion.y - ocy - 2 * c->bw + 1, 1);
 			if(snap && nw >= selmon->wx && nw <= selmon->wx + selmon->ww
 			        && nh >= selmon->wy && nh <= selmon->wy + selmon->wh) {
-				if(!c->isfloating && lt[selmon->sellt]->arrange
+				if(!c->isfloating && selmon->lt[selmon->sellt]->arrange
 				   && (abs(nw - c->w) > snap || abs(nh - c->h) > snap))
 					togglefloating(NULL);
 			}
-			if(!lt[selmon->sellt]->arrange || c->isfloating)
+			if(!selmon->lt[selmon->sellt]->arrange || c->isfloating)
 				resize(c, c->x, c->y, nw, nh, True);
 			break;
 		}
@@ -1318,9 +1318,9 @@ restack(Monitor *m) {
 	drawbars();
 	if(!m->sel)
 		return;
-	if(m->sel->isfloating || !lt[m->sellt]->arrange)
+	if(m->sel->isfloating || !m->lt[m->sellt]->arrange)
 		XRaiseWindow(dpy, m->sel->win);
-	if(lt[m->sellt]->arrange) {
+	if(m->lt[m->sellt]->arrange) {
 		wc.stack_mode = Below;
 		wc.sibling = m->barwin;
 		for(c = m->stack; c; c = c->snext)
@@ -1396,10 +1396,10 @@ setclientstate(Client *c, long state) {
 
 void
 setlayout(const Arg *arg) {
-	if(!arg || !arg->v || arg->v != lt[selmon->sellt])
+	if(!arg || !arg->v || arg->v != selmon->lt[selmon->sellt])
 		selmon->sellt ^= 1;
 	if(arg && arg->v)
-		lt[selmon->sellt] = (Layout *)arg->v;
+		selmon->lt[selmon->sellt] = (Layout *)arg->v;
 	if(selmon->sel)
 		arrange();
 	else
@@ -1411,7 +1411,7 @@ void
 setmfact(const Arg *arg) {
 	float f;
 
-	if(!arg || !lt[selmon->sellt]->arrange)
+	if(!arg || !selmon->lt[selmon->sellt]->arrange)
 		return;
 	f = arg->f < 1.0 ? arg->f + selmon->mfact : arg->f - 1.0;
 	if(f < 0.1 || f > 0.9)
@@ -1433,8 +1433,6 @@ setup(void) {
 	sw = DisplayWidth(dpy, screen);
 	sh = DisplayHeight(dpy, screen);
 	bh = dc.h = dc.font.height + 2;
-	lt[0] = &layouts[0];
-	lt[1] = &layouts[1 % LENGTH(layouts)];
 	updategeom();
 	/* init atoms */
 	wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False);
@@ -1484,7 +1482,7 @@ showhide(Client *c) {
 		return;
 	if(ISVISIBLE(c)) { /* show clients top down */
 		XMoveWindow(dpy, c->win, c->x, c->y);
-		if(!lt[c->mon->sellt]->arrange || c->isfloating)
+		if(!c->mon->lt[c->mon->sellt]->arrange || c->isfloating)
 			resize(c, c->x, c->y, c->w, c->h, False);
 		showhide(c->snext);
 	}
@@ -1730,6 +1728,8 @@ updategeom(void) {
 		m->mfact = mfact;
 		m->showbar = SHOWBAR;
 		m->topbar = TOPBAR;
+		m->lt[0] = &layouts[0];
+		m->lt[1] = &layouts[1 % LENGTH(layouts)];
 		updatebarpos(m);
 	}
 	/* reassign left over clients of disappeared monitors */
@@ -1916,8 +1916,8 @@ void
 zoom(const Arg *arg) {
 	Client *c = selmon->sel;
 
-	if(!lt[selmon->sellt]->arrange
-	|| lt[selmon->sellt]->arrange == monocle
+	if(!selmon->lt[selmon->sellt]->arrange
+	|| selmon->lt[selmon->sellt]->arrange == monocle
 	|| (selmon->sel && selmon->sel->isfloating))
 		return;
 	if(c == nexttiled(selmon->clients))