| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -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); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						} | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
				 | 
				
					
  |