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.
---
 dwm.c | 68 +++++++++++++++++++++++++++++------------------------------
 1 file changed, 34 insertions(+), 34 deletions(-)

diff --git a/dwm.c b/dwm.c
index a96f33c..85419e3 100644
--- a/dwm.c
+++ b/dwm.c
@@ -1874,42 +1874,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
-- 
2.32.0


Reply via email to