commit 3ea57b8d0e0a58ab2a76c58bf3f2f338b100bb88
Author: Casey Fitzpatrick <[email protected]>
Date:   Sat Jan 28 13:37:39 2023 -0500

    [tabbed][patch][drag] add new patch to support dragging tabs

diff --git a/tools.suckless.org/tabbed/patches/drag/index.md 
b/tools.suckless.org/tabbed/patches/drag/index.md
new file mode 100644
index 00000000..ebc060a0
--- /dev/null
+++ b/tools.suckless.org/tabbed/patches/drag/index.md
@@ -0,0 +1,14 @@
+drag
+====
+
+Description
+-----------
+Support dragging tabs left and right with the mouse.
+
+Download
+--------
+* [tabbed-drag-20230128-41e2b8f.diff](tabbed-drag-20230128-41e2b8f.diff)
+
+Authors
+-------
+* 20230128  [Casey Fitzpatrick](https://github.com/kcghost/tabbed)
diff --git 
a/tools.suckless.org/tabbed/patches/drag/tabbed-drag-20230128-41e2b8f.diff 
b/tools.suckless.org/tabbed/patches/drag/tabbed-drag-20230128-41e2b8f.diff
new file mode 100644
index 00000000..30af15cc
--- /dev/null
+++ b/tools.suckless.org/tabbed/patches/drag/tabbed-drag-20230128-41e2b8f.diff
@@ -0,0 +1,83 @@
+From caf61ed5c47b32938bea4a0577f4f6953ddd1578 Mon Sep 17 00:00:00 2001
+From: Casey Fitzpatrick <[email protected]>
+Date: Fri, 27 Jan 2023 19:46:05 -0500
+Subject: [PATCH] Support draggable tabs
+
+---
+ tabbed.c | 39 ++++++++++++++++++++++++++++++++++++++-
+ 1 file changed, 38 insertions(+), 1 deletion(-)
+
+diff --git a/tabbed.c b/tabbed.c
+index eafe28a..2e3b61a 100644
+--- a/tabbed.c
++++ b/tabbed.c
+@@ -88,6 +88,7 @@ typedef struct {
+ 
+ /* function declarations */
+ static void buttonpress(const XEvent *e);
++static void motionnotify(const XEvent *e);
+ static void cleanup(void);
+ static void clientmessage(const XEvent *e);
+ static void configurenotify(const XEvent *e);
+@@ -151,6 +152,7 @@ static void (*handler[LASTEvent]) (const XEvent *) = {
+       [KeyPress] = keypress,
+       [MapRequest] = maprequest,
+       [PropertyNotify] = propertynotify,
++      [MotionNotify] = motionnotify,
+ };
+ static int bh, obh, wx, wy, ww, wh;
+ static unsigned int numlockmask;
+@@ -209,6 +211,41 @@ buttonpress(const XEvent *e)
+       }
+ }
+ 
++void
++motionnotify(const XEvent *e)
++{
++      const XMotionEvent *ev = &e->xmotion;
++      int i, fc;
++      Arg arg;
++
++      if (ev->y < 0 || ev->y > bh)
++              return;
++
++      if (! (ev->state & Button1Mask)) {
++              return;
++      }
++
++      if (((fc = getfirsttab()) > 0 && ev->x < TEXTW(before)) || ev->x < 0)
++              return;
++
++      if (sel < 0)
++              return;
++
++      for (i = fc; i < nclients; i++) {
++              if (clients[i]->tabx > ev->x) {
++                      if (i == sel+1) {
++                              arg.i = 1;
++                              movetab(&arg);
++                      }
++                      if (i == sel-1) {
++                              arg.i = -1;
++                              movetab(&arg);
++                      }
++                      break;
++              }
++      }
++}
++
+ void
+ cleanup(void)
+ {
+@@ -1046,7 +1083,7 @@ setup(void)
+       XSelectInput(dpy, win, SubstructureNotifyMask | FocusChangeMask |
+                    ButtonPressMask | ExposureMask | KeyPressMask |
+                    PropertyChangeMask | StructureNotifyMask |
+-                   SubstructureRedirectMask);
++                   SubstructureRedirectMask | ButtonMotionMask);
+       xerrorxlib = XSetErrorHandler(xerror);
+ 
+       class_hint.res_name = wmname;
+-- 
+2.25.1
+


Reply via email to