URI: 
       dwm-resizecorners-6.5.diff - sites - public wiki contents of suckless.org
  HTML git clone git://git.suckless.org/sites
   DIR Log
   DIR Files
   DIR Refs
       ---
       dwm-resizecorners-6.5.diff (2748B)
       ---
            1 Author: Chris Noxz <chris@noxz.tech>
            2 
            3 diff -up ../dwm-6.5/dwm.c ./dwm.c
            4 --- ../dwm-6.5/dwm.c        2024-03-19 12:24:52.000000000 +0100
            5 +++ ./dwm.c        2024-06-21 14:06:47.127064311 +0200
            6 @@ -1301,9 +1301,14 @@ void
            7  resizemouse(const Arg *arg)
            8  {
            9          int ocx, ocy, nw, nh;
           10 +        int ocx2, ocy2, nx, ny;
           11          Client *c;
           12          Monitor *m;
           13          XEvent ev;
           14 +        int horizcorner, vertcorner;
           15 +        int di;
           16 +        unsigned int dui;
           17 +        Window dummy;
           18          Time lasttime = 0;
           19  
           20          if (!(c = selmon->sel))
           21 @@ -1313,10 +1318,18 @@ resizemouse(const Arg *arg)
           22          restack(selmon);
           23          ocx = c->x;
           24          ocy = c->y;
           25 +        ocx2 = c->x + c->w;
           26 +        ocy2 = c->y + c->h;
           27          if (XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync,
           28                  None, cursor[CurResize]->cursor, CurrentTime) != GrabSuccess)
           29                  return;
           30 -        XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->bw - 1, c->h + c->bw - 1);
           31 +        if (!XQueryPointer (dpy, c->win, &dummy, &dummy, &di, &di, &nx, &ny, &dui))
           32 +                return;
           33 +        horizcorner = nx < c->w / 2;
           34 +        vertcorner  = ny < c->h / 2;
           35 +        XWarpPointer (dpy, None, c->win, 0, 0, 0, 0,
           36 +                        horizcorner ? (-c->bw) : (c->w + c->bw -1),
           37 +                        vertcorner  ? (-c->bw) : (c->h + c->bw -1));
           38          do {
           39                  XMaskEvent(dpy, MOUSEMASK|ExposureMask|SubstructureRedirectMask, &ev);
           40                  switch(ev.type) {
           41 @@ -1330,8 +1343,16 @@ resizemouse(const Arg *arg)
           42                                  continue;
           43                          lasttime = ev.xmotion.time;
           44  
           45 -                        nw = MAX(ev.xmotion.x - ocx - 2 * c->bw + 1, 1);
           46 -                        nh = MAX(ev.xmotion.y - ocy - 2 * c->bw + 1, 1);
           47 +                        nx = horizcorner && ocx2 - ev.xmotion.x >= c->minw ? ev.xmotion.x : c->x;
           48 +                        ny = vertcorner && ocy2 - ev.xmotion.y >= c->minh ? ev.xmotion.y : c->y;
           49 +                        nw = MAX(horizcorner ? (ocx2 - nx) : (ev.xmotion.x - ocx - 2 * c->bw + 1), 1);
           50 +                        nh = MAX(vertcorner ? (ocy2 - ny) : (ev.xmotion.y - ocy - 2 * c->bw + 1), 1);
           51 +
           52 +                        if (horizcorner && ev.xmotion.x > ocx2)
           53 +                                nx = ocx2 - (nw = c->minw);
           54 +                        if (vertcorner && ev.xmotion.y > ocy2)
           55 +                                ny = ocy2 - (nh = c->minh);
           56 +
           57                          if (c->mon->wx + nw >= selmon->wx && c->mon->wx + nw <= selmon->wx + selmon->ww
           58                          && c->mon->wy + nh >= selmon->wy && c->mon->wy + nh <= selmon->wy + selmon->wh)
           59                          {
           60 @@ -1340,11 +1361,13 @@ resizemouse(const Arg *arg)
           61                                          togglefloating(NULL);
           62                          }
           63                          if (!selmon->lt[selmon->sellt]->arrange || c->isfloating)
           64 -                                resize(c, c->x, c->y, nw, nh, 1);
           65 +                                resize(c, nx, ny, nw, nh, 1);
           66                          break;
           67                  }
           68          } while (ev.type != ButtonRelease);
           69 -        XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->bw - 1, c->h + c->bw - 1);
           70 +        XWarpPointer(dpy, None, c->win, 0, 0, 0, 0,
           71 +                      horizcorner ? (-c->bw) : (c->w + c->bw - 1),
           72 +                      vertcorner ? (-c->bw) : (c->h + c->bw - 1));
           73          XUngrabPointer(dpy, CurrentTime);
           74          while (XCheckMaskEvent(dpy, EnterWindowMask, &ev));
           75         if ((m = recttomon(c->x, c->y, c->w, c->h)) != selmon) {