summaryrefslogtreecommitdiffhomepage
path: root/patch
diff options
context:
space:
mode:
authorbakkeby <[email protected]>2020-03-25 15:15:47 +0100
committerbakkeby <[email protected]>2020-03-25 15:15:47 +0100
commit32d3d2b7c37184595f1347f5d03fc7c0fce94b92 (patch)
tree1e1d835e90e01e80750c075a5080dc8b5ccac0dd /patch
parentd17a306a94127b8ac971c03aa41bf709dd50d428 (diff)
downloaddwm-flexipatch-32d3d2b7c37184595f1347f5d03fc7c0fce94b92.tar.gz
dwm-flexipatch-32d3d2b7c37184595f1347f5d03fc7c0fce94b92.zip
Adding dragcfact patch, ref. #19
Diffstat (limited to 'patch')
-rw-r--r--patch/cfacts.c11
-rw-r--r--patch/dragcfact.c71
-rw-r--r--patch/dragcfact.h1
-rw-r--r--patch/include.c3
-rw-r--r--patch/include.h3
5 files changed, 85 insertions, 4 deletions
diff --git a/patch/cfacts.c b/patch/cfacts.c
index 0307eb6..223436f 100644
--- a/patch/cfacts.c
+++ b/patch/cfacts.c
@@ -8,11 +8,14 @@ setcfact(const Arg *arg)
if (!arg || !c || !selmon->lt[selmon->sellt]->arrange)
return;
- f = arg->f + c->cfact;
- if (arg->f == 0.0)
+ if (!arg->f)
f = 1.0;
- else if (f < 0.25 || f > 4.0)
- return;
+ else
+ f = arg->f + c->cfact;
+ if (f < 0.25)
+ f = 0.25;
+ else if (f > 4.0)
+ f = 4.0;
c->cfact = f;
arrange(selmon);
} \ No newline at end of file
diff --git a/patch/dragcfact.c b/patch/dragcfact.c
new file mode 100644
index 0000000..205b12a
--- /dev/null
+++ b/patch/dragcfact.c
@@ -0,0 +1,71 @@
+void
+dragcfact(const Arg *arg)
+{
+ int prev_x, prev_y, dist_x, dist_y;
+ float fact;
+ Client *c;
+ XEvent ev;
+ Time lasttime = 0;
+
+ if (!(c = selmon->sel))
+ return;
+ if (c->isfloating) /* no support rezising floating windows */
+ return;
+ #if !FAKEFULLSCREEN_PATCH
+ #if FAKEFULLSCREEN_CLIENT_PATCH
+ if (c->isfullscreen && !c->fakefullscreen) /* no support resizing fullscreen windows by mouse */
+ return;
+ #else
+ if (c->isfullscreen) /* no support resizing fullscreen windows by mouse */
+ return;
+ #endif // FAKEFULLSCREEN_CLIENT_PATCH
+ #endif // !FAKEFULLSCREEN_PATCH
+ restack(selmon);
+
+ 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/2, c->h/2);
+
+ prev_x = prev_y = -999999;
+
+ do {
+ XMaskEvent(dpy, MOUSEMASK|ExposureMask|SubstructureRedirectMask, &ev);
+ switch(ev.type) {
+ case ConfigureRequest:
+ case Expose:
+ case MapRequest:
+ handler[ev.type](&ev);
+ break;
+ case MotionNotify:
+ if ((ev.xmotion.time - lasttime) <= (1000 / 60))
+ continue;
+ lasttime = ev.xmotion.time;
+ if (prev_x == -999999) {
+ prev_x = ev.xmotion.x_root;
+ prev_y = ev.xmotion.y_root;
+ }
+
+ dist_x = ev.xmotion.x - prev_x;
+ dist_y = ev.xmotion.y - prev_y;
+
+ if (abs(dist_x) > abs(dist_y)) {
+ fact = (float) 4.0 * dist_x / c->mon->ww;
+ } else {
+ fact = (float) -4.0 * dist_y / c->mon->wh;
+ }
+
+ setcfact(&((Arg) { .f = fact }));
+
+ prev_x = ev.xmotion.x;
+ prev_y = ev.xmotion.y;
+ break;
+ }
+ } while (ev.type != ButtonRelease);
+
+
+ XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w/2, c->h/2);
+
+ XUngrabPointer(dpy, CurrentTime);
+ while (XCheckMaskEvent(dpy, EnterWindowMask, &ev));
+} \ No newline at end of file
diff --git a/patch/dragcfact.h b/patch/dragcfact.h
new file mode 100644
index 0000000..6cf6b9c
--- /dev/null
+++ b/patch/dragcfact.h
@@ -0,0 +1 @@
+static void dragcfact(const Arg *arg); \ No newline at end of file
diff --git a/patch/include.c b/patch/include.c
index 723147b..b881f4d 100644
--- a/patch/include.c
+++ b/patch/include.c
@@ -26,6 +26,9 @@
#if CYCLELAYOUTS_PATCH
#include "cyclelayouts.c"
#endif
+#if DRAGCFACT_PATCH && CFACTS_PATCH
+#include "dragcfact.c"
+#endif
#if DWMC_PATCH
#include "dwmc.c"
#elif FSIGNAL_PATCH
diff --git a/patch/include.h b/patch/include.h
index d97b503..9556675 100644
--- a/patch/include.h
+++ b/patch/include.h
@@ -26,6 +26,9 @@
#if CYCLELAYOUTS_PATCH
#include "cyclelayouts.h"
#endif
+#if DRAGCFACT_PATCH && CFACTS_PATCH
+#include "dragcfact.h"
+#endif
#if DWMC_PATCH
#include "dwmc.h"
#elif FSIGNAL_PATCH