dwm-noborder-6.1.diff - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       dwm-noborder-6.1.diff (2347B)
       ---
            1 diff --git a/dwm.c b/dwm.c
            2 index 0362114..e3209e5 100644
            3 --- a/dwm.c
            4 +++ b/dwm.c
            5 @@ -393,9 +393,24 @@ arrange(Monitor *m)
            6  void
            7  arrangemon(Monitor *m)
            8  {
            9 +        int n = 0;
           10 +        Client *c;
           11          strncpy(m->ltsymbol, m->lt[m->sellt]->symbol, sizeof m->ltsymbol);
           12 -        if (m->lt[m->sellt]->arrange)
           13 -                m->lt[m->sellt]->arrange(m);
           14 +        for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
           15 +        if ((m->lt[m->sellt]->arrange != monocle && n > 1) || !m->lt[m->sellt]->arrange) {
           16 +                for (c = m->clients; c; c = c->next) {
           17 +                        if (ISVISIBLE(c) && (!m->lt[m->sellt]->arrange || !c->isfloating) && (c->bw != borderpx)) {
           18 +                                c->oldbw = c->bw;
           19 +                                c->bw = borderpx;
           20 +                                resizeclient(c, m->wx, m->wy, m->ww - (2 * c->bw), m->wh - (2 * c->bw));
           21 +                        }
           22 +                }
           23 +                if (m->lt[m->sellt]->arrange) {
           24 +                        m->lt[m->sellt]->arrange(m);
           25 +                }
           26 +        } else {
           27 +                monocle(m);
           28 +        }
           29  }
           30  
           31  void
           32 @@ -1123,10 +1138,19 @@ monocle(Monitor *m)
           33          for (c = m->clients; c; c = c->next)
           34                  if (ISVISIBLE(c))
           35                          n++;
           36 -        if (n > 0) /* override layout symbol */
           37 +        if (n > 0 && m->lt[m->sellt]->arrange == monocle) /* override layout symbol */
           38                  snprintf(m->ltsymbol, sizeof m->ltsymbol, "[%d]", n);
           39 -        for (c = nexttiled(m->clients); c; c = nexttiled(c->next))
           40 -                resize(c, m->wx, m->wy, m->ww - 2 * c->bw, m->wh - 2 * c->bw, 0);
           41 +        for(c = nexttiled(m->clients); c; c = nexttiled(c->next)) {
           42 +                // I'm not sure, but calling resize with the border width subtractions
           43 +                // fixes a glitch where windows would not redraw until they were
           44 +                // manually resized after restarting dwm.
           45 +                resize(c, m->wx, m->wy, m->ww - (2 * c->bw), m->wh - (2 * c->bw), False);
           46 +                if (c->bw) {
           47 +                        c->oldbw = c->bw;
           48 +                        c->bw = 0;
           49 +                        resizeclient(c, m->wx, m->wy, m->ww, m->wh);
           50 +                }
           51 +        }
           52  }
           53  
           54  void
           55 @@ -1706,9 +1730,14 @@ togglefloating(const Arg *arg)
           56          if (selmon->sel->isfullscreen) /* no support for fullscreen windows */
           57                  return;
           58          selmon->sel->isfloating = !selmon->sel->isfloating || selmon->sel->isfixed;
           59 -        if (selmon->sel->isfloating)
           60 +        if (selmon->sel->isfloating) {
           61 +                if (selmon->sel->bw != borderpx) {
           62 +                        selmon->sel->oldbw = selmon->sel->bw;
           63 +                        selmon->sel->bw = borderpx;
           64 +                }
           65                  resize(selmon->sel, selmon->sel->x, selmon->sel->y,
           66 -                       selmon->sel->w, selmon->sel->h, 0);
           67 +                       selmon->sel->w - selmon->sel->bw * 2, selmon->sel->h - selmon->sel->bw * 2, 0);
           68 +        }
           69          arrange(selmon);
           70  }
           71