diff options
author | nirav <nirav@airmail.cc> | 2020-06-11 07:52:39 +0000 |
---|---|---|
committer | nirav <nirav@airmail.cc> | 2020-06-11 07:52:39 +0000 |
commit | 1c6bcd35efcc3490e7a1fb9928572b7b401dbc2c (patch) | |
tree | 62147a7b4f435aa4524c296eff4b65e12a15bbe7 | |
parent | 825d85572880ddec12bdfa9731b00cd1f7bd6e4c (diff) | |
download | dwm-1c6bcd35efcc3490e7a1fb9928572b7b401dbc2c.tar.gz dwm-1c6bcd35efcc3490e7a1fb9928572b7b401dbc2c.zip |
Add dragmfact
-rw-r--r-- | README | 1 | ||||
-rw-r--r-- | dwm.c | 32 |
2 files changed, 24 insertions, 9 deletions
@@ -55,3 +55,4 @@ pertag - https://dwm.suckless.org/patches/pertag/ attachaside - https://dwm.suckless.org/patches/attachaside/ scratchpad - https://dwm.suckless.org/patches/scratchpad/ movestack - https://dwm.suckless.org/patches/movestack/ +dragmfact - https://dwm.suckless.org/patches/dragmfact/ @@ -1376,7 +1376,16 @@ resizemouse(const Arg *arg) if (XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync, None, cursor[CurResize]->cursor, CurrentTime) != GrabSuccess) return; - XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->bw - 1, c->h + c->bw - 1); + + if (c->isfloating || NULL == c->mon->lt[c->mon->sellt]->arrange) { + XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->bw - 1, c->h + c->bw - 1); + } else { + XWarpPointer(dpy, None, root, 0, 0, 0, 0, + selmon->mx + (selmon->ww * selmon->mfact), + selmon->my + (selmon->wh / 2) + ); + } + do { XMaskEvent(dpy, MOUSEMASK|ExposureMask|SubstructureRedirectMask, &ev); switch(ev.type) { @@ -1392,19 +1401,24 @@ resizemouse(const Arg *arg) nw = MAX(ev.xmotion.x - ocx - 2 * c->bw + 1, 1); nh = MAX(ev.xmotion.y - ocy - 2 * c->bw + 1, 1); - if (c->mon->wx + nw >= selmon->wx && c->mon->wx + nw <= selmon->wx + selmon->ww - && c->mon->wy + nh >= selmon->wy && c->mon->wy + nh <= selmon->wy + selmon->wh) - { - if (!c->isfloating && selmon->lt[selmon->sellt]->arrange - && (abs(nw - c->w) > snap || abs(nh - c->h) > snap)) - togglefloating(NULL); - } + if (!selmon->lt[selmon->sellt]->arrange || c->isfloating) resize(c, c->x, c->y, nw, nh, 1); break; } } while (ev.type != ButtonRelease); - XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->bw - 1, c->h + c->bw - 1); + + if (c->isfloating || NULL == c->mon->lt[c->mon->sellt]->arrange) { + XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->bw - 1, c->h + c->bw - 1); + } else { + selmon->mfact = (double) (ev.xmotion.x_root - selmon->mx) / (double) selmon->ww; + arrange(selmon); + XWarpPointer(dpy, None, root, 0, 0, 0, 0, + selmon->mx + (selmon->ww * selmon->mfact), + selmon->my + (selmon->wh / 2) + ); + } + XUngrabPointer(dpy, CurrentTime); while (XCheckMaskEvent(dpy, EnterWindowMask, &ev)); if ((m = recttomon(c->x, c->y, c->w, c->h)) != selmon) { |