diff options
| author | Anselm R Garbe <anselm@garbe.us> | 2009-09-22 20:33:42 +0100 | 
|---|---|---|
| committer | Anselm R Garbe <anselm@garbe.us> | 2009-09-22 20:33:42 +0100 | 
| commit | 30fed9a211e524f2b1d7387fc62468c2225ab93d (patch) | |
| tree | 282d1b506c075d879d0cfc1185eb5d6d28b9b8c5 | |
| parent | c45d46ad9a44b9897c8c12eacb60b5cbdd31be7c (diff) | |
implemented nn < n case, k-zed please recheck
| -rw-r--r-- | dwm.c | 44 | 
1 files changed, 30 insertions, 14 deletions
| @@ -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);  	} | 
