diff -r cd4a51f33228 dwm.c --- a/dwm.c Mon Mar 31 10:09:48 2008 +0100 +++ b/dwm.c Mon Mar 31 19:56:45 2008 +0200 @@ -66,6 +66,7 @@ struct Client { char name[256]; int x, y, w, h; + int fx, fy, fw, fh; int basew, baseh, incw, inch, maxw, maxh, minw, minh; int minax, maxax, minay, maxay; long flags; @@ -675,7 +676,10 @@ for(c = clients; c; c = c->next) if(isvisible(c)) - resize(c, c->x, c->y, c->w, c->h, True); + if(!c->isfloating) + resize(c, c->fx, c->fy, c->fw, c->fh, True); + else + resize(c, c->x, c->y, c->w, c->h, True); } void @@ -1039,6 +1043,10 @@ XSetWindowBorder(dpy, w, dc.norm[ColBorder]); configure(c); /* propagates border_width, if size doesn't change */ updatesizehints(c); + c->fx = c->x; + c->fy = c->y; + c->fw = c->w; + c->fh = c->h; XSelectInput(dpy, w, EnterWindowMask|FocusChangeMask|PropertyChangeMask|StructureNotifyMask); grabbuttons(c, False); updatetitle(c); @@ -1128,8 +1136,11 @@ ny = wy + wh - c->h - 2 * c->bw; if(!c->isfloating && !lt->isfloating && (abs(nx - c->x) > SNAP || abs(ny - c->y) > SNAP)) togglefloating(NULL); - if((lt->isfloating) || c->isfloating) + if((lt->isfloating) || c->isfloating) { + c->fx = nx; + c->fy = ny; resize(c, nx, ny, c->w, c->h, False); + } break; } } @@ -1289,8 +1300,11 @@ nh = 1; if(!c->isfloating && !lt->isfloating && (abs(nw - c->w) > SNAP || abs(nh - c->h) > SNAP)) togglefloating(NULL); - if((lt->isfloating) || c->isfloating) + if((lt->isfloating) || c->isfloating) { + c->fw = nw; + c->fh = nh; resize(c, c->x, c->y, nw, nh, True); + } break; } } @@ -1708,7 +1722,13 @@ return; sel->isfloating = !sel->isfloating; if(sel->isfloating) - resize(sel, sel->x, sel->y, sel->w, sel->h, True); + resize(sel, sel->fx, sel->fy, sel->fw, sel->fh, True); + else { + sel->fx = sel->x; + sel->fy = sel->y; + sel->fw = sel->w; + sel->fh = sel->h; + } arrange(); }