[hackers] [dwm] Update monitor positions also on removal || Santtu Lakkala

From: <git_AT_suckless.org>
Date: Sat, 16 Apr 2022 16:59:40 +0200 (CEST)

commit d93ff48803f04f1363bf303af1d7e6ccc5cb8d3f
Author: Santtu Lakkala <inz_AT_inz.fi>
AuthorDate: Mon Feb 21 16:58:28 2022 +0200
Commit: Hiltjo Posthuma <hiltjo_AT_codemadness.org>
CommitDate: Sat Apr 16 16:59:03 2022 +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.

diff --git a/dwm.c b/dwm.c
index d8075ad..0fc328a 100644
--- a/dwm.c
+++ b/dwm.c
_AT_@ -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
Received on Sat Apr 16 2022 - 16:59:40 CEST

This archive was generated by hypermail 2.3.0 : Sat Apr 16 2022 - 17:00:38 CEST