all repos — dwm @ 30fed9a211e524f2b1d7387fc62468c2225ab93d

my dwm build

implemented nn < n case, k-zed please recheck
Anselm R Garbe anselm@garbe.us
Tue, 22 Sep 2009 20:33:42 +0100
commit

30fed9a211e524f2b1d7387fc62468c2225ab93d

parent

c45d46ad9a44b9897c8c12eacb60b5cbdd31be7c

1 files changed, 30 insertions(+), 14 deletions(-)

jump to
M dwm.cdwm.c

@@ -158,7 +158,7 @@ static void attachstack(Client *c);

static void buttonpress(XEvent *e); static void checkotherwm(void); static void cleanup(void); -static void cleanupmons(void); +static void cleanupmon(Monitor *mon); static void clearurgent(Client *c); static void configure(Client *c); static void configurenotify(XEvent *e);

@@ -480,22 +480,25 @@ XFreeGC(dpy, dc.gc);

XFreeCursor(dpy, cursor[CurNormal]); XFreeCursor(dpy, cursor[CurResize]); XFreeCursor(dpy, cursor[CurMove]); - cleanupmons(); + while(mons) + cleanupmon(mons); XSync(dpy, False); XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime); } void -cleanupmons(void) { +cleanupmon(Monitor *mon) { Monitor *m; - while(mons) { - m = mons->next; - XUnmapWindow(dpy, mons->barwin); - XDestroyWindow(dpy, mons->barwin); - free(mons); - mons = m; + if(mon == mons) + mons = mons->next; + else { + for(m = mons; m && m->next != mon; m = m->next); + m->next = mon->next; } + XUnmapWindow(dpy, mon->barwin); + XDestroyWindow(dpy, mon->barwin); + free(mon); } void

@@ -1727,6 +1730,7 @@

#ifdef XINERAMA if(XineramaIsActive(dpy)) { int i, j, n, nn; + Client *c; Monitor *m; XineramaScreenInfo *info = XineramaQueryScreens(dpy, &nn); XineramaScreenInfo *unique = NULL;

@@ -1755,7 +1759,7 @@ || (unique[i].x_org != m->mx || unique[i].y_org != m->my

|| unique[i].width != m->mw || unique[i].height != m->mh)) { dirty = True; - m->num = unique[i].screen_number; + 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;

@@ -1763,10 +1767,22 @@ m->mh = m->wh = unique[i].height;

updatebarpos(m); } } - else { /* less monitors available */ - cleanup(); - setup(); - scan(); + else { /* less monitors available nn < n */ + for(i = nn; i < n; i++) { + for(m = mons; m && m->next; m = m->next); + while(m->clients) { + dirty = True; + c = m->clients; + m->clients = c->next; + detachstack(c); + c->mon = mons; + attach(c); + attachstack(c); + } + if(m == selmon) + selmon = mons; + cleanupmon(m); + } } free(unique); }