tabbed-drag-20230128-41e2b8f.diff - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       tabbed-drag-20230128-41e2b8f.diff (1981B)
       ---
            1 From caf61ed5c47b32938bea4a0577f4f6953ddd1578 Mon Sep 17 00:00:00 2001
            2 From: Casey Fitzpatrick <kcghost@gmail.com>
            3 Date: Fri, 27 Jan 2023 19:46:05 -0500
            4 Subject: [PATCH] Support draggable tabs
            5 
            6 ---
            7  tabbed.c | 39 ++++++++++++++++++++++++++++++++++++++-
            8  1 file changed, 38 insertions(+), 1 deletion(-)
            9 
           10 diff --git a/tabbed.c b/tabbed.c
           11 index eafe28a..2e3b61a 100644
           12 --- a/tabbed.c
           13 +++ b/tabbed.c
           14 @@ -88,6 +88,7 @@ typedef struct {
           15  
           16  /* function declarations */
           17  static void buttonpress(const XEvent *e);
           18 +static void motionnotify(const XEvent *e);
           19  static void cleanup(void);
           20  static void clientmessage(const XEvent *e);
           21  static void configurenotify(const XEvent *e);
           22 @@ -151,6 +152,7 @@ static void (*handler[LASTEvent]) (const XEvent *) = {
           23          [KeyPress] = keypress,
           24          [MapRequest] = maprequest,
           25          [PropertyNotify] = propertynotify,
           26 +        [MotionNotify] = motionnotify,
           27  };
           28  static int bh, obh, wx, wy, ww, wh;
           29  static unsigned int numlockmask;
           30 @@ -209,6 +211,41 @@ buttonpress(const XEvent *e)
           31          }
           32  }
           33  
           34 +void
           35 +motionnotify(const XEvent *e)
           36 +{
           37 +        const XMotionEvent *ev = &e->xmotion;
           38 +        int i, fc;
           39 +        Arg arg;
           40 +
           41 +        if (ev->y < 0 || ev->y > bh)
           42 +                return;
           43 +
           44 +        if (! (ev->state & Button1Mask)) {
           45 +                return;
           46 +        }
           47 +
           48 +        if (((fc = getfirsttab()) > 0 && ev->x < TEXTW(before)) || ev->x < 0)
           49 +                return;
           50 +
           51 +        if (sel < 0)
           52 +                return;
           53 +
           54 +        for (i = fc; i < nclients; i++) {
           55 +                if (clients[i]->tabx > ev->x) {
           56 +                        if (i == sel+1) {
           57 +                                arg.i = 1;
           58 +                                movetab(&arg);
           59 +                        }
           60 +                        if (i == sel-1) {
           61 +                                arg.i = -1;
           62 +                                movetab(&arg);
           63 +                        }
           64 +                        break;
           65 +                }
           66 +        }
           67 +}
           68 +
           69  void
           70  cleanup(void)
           71  {
           72 @@ -1046,7 +1083,7 @@ setup(void)
           73          XSelectInput(dpy, win, SubstructureNotifyMask | FocusChangeMask |
           74                       ButtonPressMask | ExposureMask | KeyPressMask |
           75                       PropertyChangeMask | StructureNotifyMask |
           76 -                     SubstructureRedirectMask);
           77 +                     SubstructureRedirectMask | ButtonMotionMask);
           78          xerrorxlib = XSetErrorHandler(xerror);
           79  
           80          class_hint.res_name = wmname;
           81 -- 
           82 2.25.1
           83