implemented nn < n case, k-zed please recheck

This commit is contained in:
Anselm R Garbe 2009-09-22 20:33:42 +01:00
parent c45d46ad9a
commit 30fed9a211
1 changed files with 30 additions and 14 deletions

44
dwm.c
View File

@ -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 @@ cleanup(void) {
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 @@ updategeom(void) {
#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 @@ updategeom(void) {
|| 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 @@ updategeom(void) {
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);
}