dwm-noborderselflickerfix-2022042627-d93ff48803f0.diff - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       dwm-noborderselflickerfix-2022042627-d93ff48803f0.diff (1604B)
       ---
            1 diff --git dwm.c dwm.c
            2 index 0fc328a..4a767bd 100644
            3 --- dwm.c
            4 +++ dwm.c
            5 @@ -206,6 +206,7 @@ static void setup(void);
            6  static void seturgent(Client *c, int urg);
            7  static void showhide(Client *c);
            8  static void sigchld(int unused);
            9 +static int solitary(Client *c);
           10  static void spawn(const Arg *arg);
           11  static void tag(const Arg *arg);
           12  static void tagmon(const Arg *arg);
           13 @@ -802,7 +803,11 @@ focus(Client *c)
           14                  detachstack(c);
           15                  attachstack(c);
           16                  grabbuttons(c, 1);
           17 -                XSetWindowBorder(dpy, c->win, scheme[SchemeSel][ColBorder].pixel);
           18 +                /* Avoid flickering when another client appears and the border
           19 +                 * is restored */
           20 +                if (!solitary(c)) {
           21 +                        XSetWindowBorder(dpy, c->win, scheme[SchemeSel][ColBorder].pixel);
           22 +                }
           23                  setfocus(c);
           24          } else {
           25                  XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
           26 @@ -1288,6 +1293,11 @@ resizeclient(Client *c, int x, int y, int w, int h)
           27          c->oldw = c->w; c->w = wc.width = w;
           28          c->oldh = c->h; c->h = wc.height = h;
           29          wc.border_width = c->bw;
           30 +        if (solitary(c)) {
           31 +                c->w = wc.width += c->bw * 2;
           32 +                c->h = wc.height += c->bw * 2;
           33 +                wc.border_width = 0;
           34 +        }
           35          XConfigureWindow(dpy, c->win, CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc);
           36          configure(c);
           37          XSync(dpy, False);
           38 @@ -1642,6 +1652,15 @@ sigchld(int unused)
           39          while (0 < waitpid(-1, NULL, WNOHANG));
           40  }
           41  
           42 +int
           43 +solitary(Client *c)
           44 +{
           45 +        return ((nexttiled(c->mon->clients) == c && !nexttiled(c->next))
           46 +            || &monocle == c->mon->lt[c->mon->sellt]->arrange)
           47 +            && !c->isfullscreen && !c->isfloating
           48 +            && NULL != c->mon->lt[c->mon->sellt]->arrange;
           49 +}
           50 +
           51  void
           52  spawn(const Arg *arg)
           53  {