diff -r 53d98940cb04 dwm.c
--- a/dwm.c	Fri Jun 04 11:41:16 2010 +0100
+++ b/dwm.c	Sat Jul 03 10:31:22 2010 +0200
@@ -88,7 +88,7 @@
 	int basew, baseh, incw, inch, maxw, maxh, minw, minh;
 	int bw, oldbw;
 	unsigned int tags;
-	Bool isfixed, isfloating, isurgent, oldstate;
+	Bool isfixed, isfloating, isurgent, oldstate, needresize;
 	Client *next;
 	Client *snext;
 	Monitor *mon;
@@ -591,6 +591,8 @@
 				configure(c);
 			if(ISVISIBLE(c))
 				XMoveResizeWindow(dpy, c->win, c->x, c->y, c->w, c->h);
+			else
+				c->needresize=1;
 		}
 		else
 			configure(c);
@@ -1576,7 +1578,12 @@
 	if(!c)
 		return;
 	if(ISVISIBLE(c)) { /* show clients top down */
-		XMoveWindow(dpy, c->win, c->x, c->y);
+		if(c->needresize) {
+			c->needresize=0;
+			XMoveResizeWindow(dpy, c->win, c->x, c->y, c->w, c->h);
+		} else {
+			XMoveWindow(dpy, c->win, c->x, c->y);
+		}
 		if(!c->mon->lt[c->mon->sellt]->arrange || c->isfloating)
 			resize(c, c->x, c->y, c->w, c->h, False);
 		showhide(c->snext);

