Update monitor positions also on removal - dwm - dynamic window manager | |
git clone git://git.suckless.org/dwm | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit d93ff48803f04f1363bf303af1d7e6ccc5cb8d3f | |
parent 8806b6e2379372900e3d9e0bf6604bc7f727350b | |
Author: Santtu Lakkala <[email protected]> | |
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(-) | |
--- | |
diff --git a/dwm.c b/dwm.c | |
@@ -1876,42 +1876,42 @@ updategeom(void) | |
memcpy(&unique[j++], &info[i], sizeof(Xinerama… | |
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->… | |
+ { | |
+ 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… | |
- || unique[i].width != m->mw || unique[i].heigh… | |
- { | |
- 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 |