Update monitor positions also on removal - dwm - dynamic window manager
 (HTM) git clone https://git.parazyd.org/dwm
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit d93ff48803f04f1363bf303af1d7e6ccc5cb8d3f
 (DIR) parent 8806b6e2379372900e3d9e0bf6604bc7f727350b
 (HTM) Author: Santtu Lakkala <inz@inz.fi>
       Date:   Mon, 21 Feb 2022 16:58:28 +0200
       
       Update monitor positions also on removal
       
       When monitors are removed, the coordinates of existing monitors may
       change, if the removed monitors had smaller coordinates than the
       remaining ones.
       
       Remove special case handling so that the same update-if-necessary loop
       is run also in the case when monitors are removed.
       
       Diffstat:
         M dwm.c                               |      68 ++++++++++++++++----------------
       
       1 file changed, 34 insertions(+), 34 deletions(-)
       ---
 (DIR) diff --git a/dwm.c b/dwm.c
       @@ -1876,42 +1876,42 @@ updategeom(void)
                                        memcpy(&unique[j++], &info[i], sizeof(XineramaScreenInfo));
                        XFree(info);
                        nn = j;
       -                if (n <= nn) { /* new monitors available */
       -                        for (i = 0; i < (nn - n); i++) {
       -                                for (m = mons; m && m->next; m = m->next);
       -                                if (m)
       -                                        m->next = createmon();
       -                                else
       -                                        mons = createmon();
       +
       +                /* new monitors if nn > n */
       +                for (i = n; i < nn; i++) {
       +                        for (m = mons; m && m->next; m = m->next);
       +                        if (m)
       +                                m->next = createmon();
       +                        else
       +                                mons = createmon();
       +                }
       +                for (i = 0, m = mons; i < nn && m; m = m->next, i++)
       +                        if (i >= n
       +                        || unique[i].x_org != m->mx || unique[i].y_org != m->my
       +                        || unique[i].width != m->mw || unique[i].height != m->mh)
       +                        {
       +                                dirty = 1;
       +                                m->num = i;
       +                                m->mx = m->wx = unique[i].x_org;
       +                                m->my = m->wy = unique[i].y_org;
       +                                m->mw = m->ww = unique[i].width;
       +                                m->mh = m->wh = unique[i].height;
       +                                updatebarpos(m);
                                }
       -                        for (i = 0, m = mons; i < nn && m; m = m->next, i++)
       -                                if (i >= n
       -                                || unique[i].x_org != m->mx || unique[i].y_org != m->my
       -                                || unique[i].width != m->mw || unique[i].height != m->mh)
       -                                {
       -                                        dirty = 1;
       -                                        m->num = i;
       -                                        m->mx = m->wx = unique[i].x_org;
       -                                        m->my = m->wy = unique[i].y_org;
       -                                        m->mw = m->ww = unique[i].width;
       -                                        m->mh = m->wh = unique[i].height;
       -                                        updatebarpos(m);
       -                                }
       -                } else { /* less monitors available nn < n */
       -                        for (i = nn; i < n; i++) {
       -                                for (m = mons; m && m->next; m = m->next);
       -                                while ((c = m->clients)) {
       -                                        dirty = 1;
       -                                        m->clients = c->next;
       -                                        detachstack(c);
       -                                        c->mon = mons;
       -                                        attach(c);
       -                                        attachstack(c);
       -                                }
       -                                if (m == selmon)
       -                                        selmon = mons;
       -                                cleanupmon(m);
       +                /* removed monitors if n > nn */
       +                for (i = nn; i < n; i++) {
       +                        for (m = mons; m && m->next; m = m->next);
       +                        while ((c = m->clients)) {
       +                                dirty = 1;
       +                                m->clients = c->next;
       +                                detachstack(c);
       +                                c->mon = mons;
       +                                attach(c);
       +                                attachstack(c);
                                }
       +                        if (m == selmon)
       +                                selmon = mons;
       +                        cleanupmon(m);
                        }
                        free(unique);
                } else