diff -r bfa2c4d3298f client.c --- a/client.c Fri Aug 24 11:09:28 2007 +0200 +++ b/client.c Fri Aug 24 11:17:58 2007 +0200 @@ -1,5 +1,6 @@ /* See LICENSE file for copyright and license details. */ #include "dwm.h" +#include #include #include @@ -383,3 +384,36 @@ updatetitle(Client *c) { if(!gettextprop(c->win, netatom[NetWMName], c->name, sizeof c->name)) gettextprop(c->win, wmatom[WMName], c->name, sizeof c->name); } + +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, nmx, nmy; + unsigned int dui; + Window dummy; + + if (!isfloating()) + if (!sel || !sel->isfloating || !arg) + return; + if(sscanf(arg, "%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 bfa2c4d3298f config.default.h --- a/config.default.h Fri Aug 24 11:09:28 2007 +0200 +++ b/config.default.h Fri Aug 24 11:17:58 2007 +0200 @@ -44,10 +44,10 @@ Key keys[] = { \ { MODKEY, XK_p, spawn, "exe=`dmenu_path | dmenu` && exec $exe" }, \ { MODKEY, XK_space, setlayout, NULL }, \ { MODKEY, XK_b, togglebar, NULL }, \ - { MODKEY, XK_j, focusnext, NULL }, \ - { MODKEY, XK_k, focusprev, NULL }, \ - { MODKEY, XK_h, setmwfact, "-0.05" }, \ - { MODKEY, XK_l, setmwfact, "+0.05" }, \ + { MODKEY, XK_n, focusnext, NULL }, \ + { MODKEY, XK_p, focusprev, NULL }, \ + { MODKEY, XK_s, setmwfact, "-0.05" }, \ + { MODKEY, XK_g, setmwfact, "+0.05" }, \ { MODKEY, XK_m, togglemax, NULL }, \ { MODKEY, XK_Return, zoom, NULL }, \ { MODKEY|ShiftMask, XK_space, togglefloating, NULL }, \ @@ -91,4 +91,16 @@ Key keys[] = { \ { MODKEY|ControlMask|ShiftMask, XK_8, toggletag, tags[7] }, \ { MODKEY|ControlMask|ShiftMask, XK_9, toggletag, tags[8] }, \ { MODKEY|ShiftMask, XK_q, quit, NULL }, \ + { MODKEY, XK_h, moveresize, "-25x 0y 0w 0h" }, \ + { MODKEY, XK_l, moveresize, "25x 0y 0w 0h" }, \ + { MODKEY, XK_j, moveresize, "0x 25y 0w 0h" }, \ + { MODKEY, XK_k, moveresize, "0x -25y 0w 0h" }, \ + { MODKEY|ControlMask, XK_h, moveresize, "0X 0y 0w 0h" }, \ + { MODKEY|ControlMask, XK_l, moveresize, "9000X 0y 0w 0h" }, \ + { MODKEY|ControlMask, XK_j, moveresize, "0x 9000Y 0w 0h" }, \ + { MODKEY|ControlMask, XK_k, moveresize, "0x 15Y 0w 0h" }, \ + { MODKEY|ShiftMask, XK_h, moveresize, "0x 0y -25w 0h" }, \ + { MODKEY|ShiftMask, XK_l, moveresize, "0x 0y 25w 0h" }, \ + { MODKEY|ShiftMask, XK_j, moveresize, "0x 0y 0w 25h" }, \ + { MODKEY|ShiftMask, XK_k, moveresize, "0x 0y 0w -25h" }, \ }; diff -r bfa2c4d3298f dwm.h --- a/dwm.h Fri Aug 24 11:09:28 2007 +0200 +++ b/dwm.h Fri Aug 24 11:17:58 2007 +0200 @@ -102,6 +102,7 @@ void unmanage(Client *c); /* unmanage c void unmanage(Client *c); /* unmanage c */ void updatesizehints(Client *c); /* update the size hint variables of c */ void updatetitle(Client *c); /* update the name of c */ +void moveresize(const char *arg); /* move or resize client */ /* draw.c */ void drawstatus(void); /* draw the bar */ diff -r bfa2c4d3298f event.c --- a/event.c Fri Aug 24 11:09:28 2007 +0200 +++ b/event.c Fri Aug 24 11:17:58 2007 +0200 @@ -37,7 +37,6 @@ movemouse(Client *c) { if(XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync, None, cursor[CurMove], CurrentTime) != GrabSuccess) return; - c->ismax = False; XQueryPointer(dpy, root, &dummy, &dummy, &x1, &y1, &di, &di, &dui); for(;;) { XMaskEvent(dpy, MOUSEMASK | ExposureMask | SubstructureRedirectMask, &ev);