implemented nn < n case, k-zed please recheck
This commit is contained in:
		
							
								
								
									
										44
									
								
								dwm.c
									
									
									
									
									
								
							
							
						
						
									
										44
									
								
								dwm.c
									
									
									
									
									
								
							@@ -158,7 +158,7 @@ static void attachstack(Client *c);
 | 
				
			|||||||
static void buttonpress(XEvent *e);
 | 
					static void buttonpress(XEvent *e);
 | 
				
			||||||
static void checkotherwm(void);
 | 
					static void checkotherwm(void);
 | 
				
			||||||
static void cleanup(void);
 | 
					static void cleanup(void);
 | 
				
			||||||
static void cleanupmons(void);
 | 
					static void cleanupmon(Monitor *mon);
 | 
				
			||||||
static void clearurgent(Client *c);
 | 
					static void clearurgent(Client *c);
 | 
				
			||||||
static void configure(Client *c);
 | 
					static void configure(Client *c);
 | 
				
			||||||
static void configurenotify(XEvent *e);
 | 
					static void configurenotify(XEvent *e);
 | 
				
			||||||
@@ -480,22 +480,25 @@ cleanup(void) {
 | 
				
			|||||||
	XFreeCursor(dpy, cursor[CurNormal]);
 | 
						XFreeCursor(dpy, cursor[CurNormal]);
 | 
				
			||||||
	XFreeCursor(dpy, cursor[CurResize]);
 | 
						XFreeCursor(dpy, cursor[CurResize]);
 | 
				
			||||||
	XFreeCursor(dpy, cursor[CurMove]);
 | 
						XFreeCursor(dpy, cursor[CurMove]);
 | 
				
			||||||
	cleanupmons();
 | 
						while(mons)
 | 
				
			||||||
 | 
							cleanupmon(mons);
 | 
				
			||||||
	XSync(dpy, False);
 | 
						XSync(dpy, False);
 | 
				
			||||||
	XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime);
 | 
						XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
cleanupmons(void) {
 | 
					cleanupmon(Monitor *mon) {
 | 
				
			||||||
	Monitor *m;
 | 
						Monitor *m;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	while(mons) {
 | 
						if(mon == mons)
 | 
				
			||||||
		m = mons->next;
 | 
							mons = mons->next;
 | 
				
			||||||
		XUnmapWindow(dpy, mons->barwin);
 | 
						else {
 | 
				
			||||||
		XDestroyWindow(dpy, mons->barwin);
 | 
							for(m = mons; m && m->next != mon; m = m->next);
 | 
				
			||||||
		free(mons);
 | 
							m->next = mon->next;
 | 
				
			||||||
		mons = m;
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						XUnmapWindow(dpy, mon->barwin);
 | 
				
			||||||
 | 
						XDestroyWindow(dpy, mon->barwin);
 | 
				
			||||||
 | 
						free(mon);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
@@ -1727,6 +1730,7 @@ updategeom(void) {
 | 
				
			|||||||
#ifdef XINERAMA
 | 
					#ifdef XINERAMA
 | 
				
			||||||
	if(XineramaIsActive(dpy)) {
 | 
						if(XineramaIsActive(dpy)) {
 | 
				
			||||||
		int i, j, n, nn;
 | 
							int i, j, n, nn;
 | 
				
			||||||
 | 
							Client *c;
 | 
				
			||||||
		Monitor *m;
 | 
							Monitor *m;
 | 
				
			||||||
		XineramaScreenInfo *info = XineramaQueryScreens(dpy, &nn);
 | 
							XineramaScreenInfo *info = XineramaQueryScreens(dpy, &nn);
 | 
				
			||||||
		XineramaScreenInfo *unique = NULL;
 | 
							XineramaScreenInfo *unique = NULL;
 | 
				
			||||||
@@ -1755,7 +1759,7 @@ updategeom(void) {
 | 
				
			|||||||
				    || unique[i].width != m->mw || unique[i].height != m->mh))
 | 
									    || unique[i].width != m->mw || unique[i].height != m->mh))
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					dirty = True;
 | 
										dirty = True;
 | 
				
			||||||
					m->num = unique[i].screen_number;
 | 
										m->num = i;
 | 
				
			||||||
					m->mx = m->wx = unique[i].x_org;
 | 
										m->mx = m->wx = unique[i].x_org;
 | 
				
			||||||
					m->my = m->wy = unique[i].y_org;
 | 
										m->my = m->wy = unique[i].y_org;
 | 
				
			||||||
					m->mw = m->ww = unique[i].width;
 | 
										m->mw = m->ww = unique[i].width;
 | 
				
			||||||
@@ -1763,10 +1767,22 @@ updategeom(void) {
 | 
				
			|||||||
					updatebarpos(m);
 | 
										updatebarpos(m);
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else { /* less monitors available */
 | 
							else { /* less monitors available nn < n */
 | 
				
			||||||
			cleanup();
 | 
								for(i = nn; i < n; i++) {
 | 
				
			||||||
			setup();
 | 
									for(m = mons; m && m->next; m = m->next);
 | 
				
			||||||
			scan();
 | 
									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);
 | 
							free(unique);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user