diff -r 944739ec944a client.c --- a/client.c Mon Feb 26 16:24:51 2007 +0100 +++ b/client.c Tue Feb 27 14:05:25 2007 +0100 @@ -393,3 +393,34 @@ unmanage(Client *c) { XUngrabServer(dpy); lt->arrange(); } + +void +moveresize(const char *arg) { + int x, y, w, h, nx, ny, nw, nh, ox, oy, ow, oh; + char xAbs, yAbs, wAbs, hAbs; + int mx, my, dx, dy, dui, nmx, nmy; + Window dummy; + + if(!sel || !sel->isfloating || sel->isfixed || !arg) + return; + if(sscanf(arg, "%d%c %d%c %d%c %d%c %d%c", &x, &xAbs, &y, &yAbs, &w, &wAbs, &h, &hAbs) != 8) + return; + nx = xAbs == 'X' ? x : sel->x + x; + ny = yAbs == 'Y' ? y : sel->y + y; + nw = wAbs == 'W' ? w : sel->w + w; + nh = hAbs == 'H' ? h : sel->h + h; + + ox = sel->x; + oy = sel->y; + ow = sel->w; + oh = sel->h; + + Bool xqp = XQueryPointer(dpy, root, &dummy, &dummy, &mx, &my, &dx, &dy, &dui); + resize(sel, nx, ny, nw, nh, True); + if (xqp && ox <= mx && (ox + ow) >= mx && oy <= my && (oy + oh) >= my) + { + nmx = mx-ox+sel->w-ow-1 < 0 ? 0 : mx-ox+sel->w-ow-1; + nmy = my-oy+sel->h-oh-1 < 0 ? 0 : my-oy+sel->h-oh-1; + XWarpPointer(dpy, None, sel->win, 0, 0, 0, 0, nmx, nmy); + } +} diff -r 944739ec944a dwm.h --- a/dwm.h Mon Feb 26 16:24:51 2007 +0100 +++ b/dwm.h Tue Feb 27 14:05:25 2007 +0100 @@ -107,6 +107,7 @@ void updatesizehints(Client *c); /* upd void updatesizehints(Client *c); /* update the size hint variables of c */ void updatetitle(Client *c); /* update the name of c */ void unmanage(Client *c); /* destroy c */ +void moveresize(const char *arg); /* move or resize client */ /* draw.c */ void drawstatus(void); /* draw the bar */