implemented nn < n case, k-zed please recheck
This commit is contained in:
		
							parent
							
								
									c45d46ad9a
								
							
						
					
					
						commit
						30fed9a211
					
				
							
								
								
									
										44
									
								
								dwm.c
									
									
									
									
									
								
							
							
						
						
									
										44
									
								
								dwm.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 @@ 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); | ||||
| 	} | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Anselm R Garbe
						Anselm R Garbe