From 160f58b959f81d4fb8d2910ee7ce8b82809aa127 Mon Sep 17 00:00:00 2001 From: Warrick Lo Date: Wed, 24 Nov 2021 18:30:32 -0800 Subject: Change behaviour of moveresize(), moveresizeedge() Removed cursor warping when moving/resizing, since dwm has already been patched to focus windows only when clicked. Removed some options for moveresize(). We (likely) aren't going to be using them anyway. Replaced the if statments in moveresizeedge() with a switch statement. --- config.def.h | 16 ++++----- dwm.c | 115 ++++++++++++++--------------------------------------------- 2 files changed, 34 insertions(+), 97 deletions(-) diff --git a/config.def.h b/config.def.h index d57ab76..cbf49de 100644 --- a/config.def.h +++ b/config.def.h @@ -92,14 +92,14 @@ static Key keys[] = { { MODKEY, XK_m, setlayout, {.v = &layouts[2]} }, { MODKEY, XK_space, setlayout, {0} }, { MODKEY|ShiftMask, XK_space, togglefloating, {0} }, - { MODKEY, XK_Down, moveresize, {.v = "0x 25y 0w 0h" } }, - { MODKEY, XK_Up, moveresize, {.v = "0x -25y 0w 0h" } }, - { MODKEY, XK_Right, moveresize, {.v = "25x 0y 0w 0h" } }, - { MODKEY, XK_Left, moveresize, {.v = "-25x 0y 0w 0h" } }, - { MODKEY|ShiftMask, XK_Down, moveresize, {.v = "0x 0y 0w 25h" } }, - { MODKEY|ShiftMask, XK_Up, moveresize, {.v = "0x 0y 0w -25h" } }, - { MODKEY|ShiftMask, XK_Right, moveresize, {.v = "0x 0y 25w 0h" } }, - { MODKEY|ShiftMask, XK_Left, moveresize, {.v = "0x 0y -25w 0h" } }, + { MODKEY, XK_Down, moveresize, {.v = "0 25 0 0" } }, + { MODKEY, XK_Up, moveresize, {.v = "0 -25 0 0" } }, + { MODKEY, XK_Right, moveresize, {.v = "25 0 0 0" } }, + { MODKEY, XK_Left, moveresize, {.v = "-25 0 0 0" } }, + { MODKEY|ShiftMask, XK_Down, moveresize, {.v = "0 0 0 25" } }, + { MODKEY|ShiftMask, XK_Up, moveresize, {.v = "0 0 0 -25" } }, + { MODKEY|ShiftMask, XK_Right, moveresize, {.v = "0 0 25 0" } }, + { MODKEY|ShiftMask, XK_Left, moveresize, {.v = "0 0 -25 0" } }, { MODKEY|ControlMask, XK_Up, moveresizeedge, {.v = "t"} }, { MODKEY|ControlMask, XK_Down, moveresizeedge, {.v = "b"} }, { MODKEY|ControlMask, XK_Left, moveresizeedge, {.v = "l"} }, diff --git a/dwm.c b/dwm.c index a1da650..80fc7b4 100644 --- a/dwm.c +++ b/dwm.c @@ -1342,81 +1342,32 @@ movemouse(const Arg *arg) void moveresize(const Arg *arg) { /* only floating windows can be moved */ - Client *c; - c = selmon->sel; - int x, y, w, h, nx, ny, nw, nh, ox, oy, ow, oh; - char xAbs, yAbs, wAbs, hAbs; - int msx, msy, dx, dy, nmx, nmy; - unsigned int dui; - Window dummy; + Client *c = selmon->sel; + int x, y, w, h, nx, ny, nw, nh; if (!c || !arg) return; if (selmon->lt[selmon->sellt]->arrange && !c->isfloating) - return; - if (sscanf((char *)arg->v, "%d%c %d%c %d%c %d%c", &x, &xAbs, &y, &yAbs, &w, &wAbs, &h, &hAbs) != 8) + togglefloating(NULL); + if (sscanf((char *)arg->v, "%d %d %d %d", &x, &y, &w, &h) != 4) return; - /* compute new window position; prevent window from be positioned outside the current monitor */ nw = c->w + w; - if (wAbs == 'W') - nw = w < selmon->mw - 2 * c->bw ? w : selmon->mw - 2 * c->bw; - nh = c->h + h; - if (hAbs == 'H') - nh = h < selmon->mh - 2 * c->bw ? h : selmon->mh - 2 * c->bw; - nx = c->x + x; - if (xAbs == 'X') { - if (x < selmon->mx) - nx = selmon->mx; - else if (x > selmon->mx + selmon->mw) - nx = selmon->mx + selmon->mw - nw - 2 * c->bw; - else - nx = x; - } - ny = c->y + y; - if (yAbs == 'Y') { - if (y < selmon->my) - ny = selmon->my; - else if (y > selmon->my + selmon->mh) - ny = selmon->my + selmon->mh - nh - 2 * c->bw; - else - ny = y; - } - - ox = c->x; - oy = c->y; - ow = c->w; - oh = c->h; XRaiseWindow(dpy, c->win); - Bool xqp = XQueryPointer(dpy, root, &dummy, &dummy, &msx, &msy, &dx, &dy, &dui); resize(c, nx, ny, nw, nh, True); - - /* move cursor along with the window to avoid problems caused by the sloppy focus */ - if (xqp && ox <= msx && (ox + ow) >= msx && oy <= msy && (oy + oh) >= msy) - { - nmx = c->x - ox + c->w - ow; - nmy = c->y - oy + c->h - oh; - /* make sure the cursor stays inside the window */ - if ((msx + nmx) > c->x && (msy + nmy) > c->y) - XWarpPointer(dpy, None, None, 0, 0, 0, 0, nmx, nmy); - } } void moveresizeedge(const Arg *arg) { /* move or resize floating window to edge of screen */ - Client *c; - c = selmon->sel; + Client *c = selmon->sel; char e; - int nx, ny, nw, nh, ox, oy, ow, oh, bp; - int msx, msy, dx, dy, nmx, nmy; + int nx, ny, nw, nh, bp; int starty; - unsigned int dui; - Window dummy; nx = c->x; ny = c->y; @@ -1429,24 +1380,25 @@ moveresizeedge(const Arg *arg) { if (!c || !arg) return; if (selmon->lt[selmon->sellt]->arrange && !c->isfloating) - return; + togglefloating(NULL); if(sscanf((char *)arg->v, "%c", &e) != 1) return; - if(e == 't') + switch(e) { + case 't': ny = starty; - - if(e == 'b') + break; + case 'b': ny = c->h > selmon->mh - 2 * c->bw ? c->h - bp : selmon->mh - c->h - 2 * c->bw - bp; - - if(e == 'l') + break; + case 'l': nx = selmon->mx; - - if(e == 'r') + break; + case 'r': nx = c->w > selmon->mw - 2 * c->bw ? selmon->mx + c->w : selmon->mx + selmon->mw - c->w - 2 * c->bw; - - if(e == 'T') { - /* if you click to resize again, it will return to old size/position */ + break; + /* if you click to resize again, it will return to old size/position */ + case 'T': if(c->h + starty == c->oldh + c->oldy) { nh = c->oldh; ny = c->oldy; @@ -1454,12 +1406,11 @@ moveresizeedge(const Arg *arg) { nh = c->h + c->y - starty; ny = starty; } - } - - if(e == 'B') + break; + case 'B': nh = c->h + c->y + 2 * c->bw + bp == selmon->mh ? c->oldh : selmon->mh - c->y - 2 * c->bw - bp; - - if(e == 'L') { + break; + case 'L': if(selmon->mx + c->w == c->oldw + c->oldx) { nw = c->oldw; nx = c->oldx; @@ -1467,28 +1418,14 @@ moveresizeedge(const Arg *arg) { nw = c->w + c->x - selmon->mx; nx = selmon->mx; } - } - - if(e == 'R') + break; + case 'R': nw = c->w + c->x + 2 * c->bw == selmon->mx + selmon->mw ? c->oldw : selmon->mx + selmon->mw - c->x - 2 * c->bw; - - ox = c->x; - oy = c->y; - ow = c->w; - oh = c->h; + break; + } XRaiseWindow(dpy, c->win); - Bool xqp = XQueryPointer(dpy, root, &dummy, &dummy, &msx, &msy, &dx, &dy, &dui); resize(c, nx, ny, nw, nh, True); - - /* move cursor along with the window to avoid problems caused by the sloppy focus */ - if (xqp && ox <= msx && (ox + ow) >= msx && oy <= msy && (oy + oh) >= msy) { - nmx = c->x - ox + c->w - ow; - nmy = c->y - oy + c->h - oh; - /* make sure the cursor stays inside the window */ - if ((msx + nmx) > c->x && (msy + nmy) > c->y) - XWarpPointer(dpy, None, None, 0, 0, 0, 0, nmx, nmy); - } } void -- cgit v1.2.3