| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -82,22 +82,29 @@ ban(Client *c) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					focus(Client *c) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					{ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						Client *old = sel; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						Client *old; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if(!issel) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							return; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if(!sel) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							sel = c; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						else if(sel != c) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							if(sel->ismax) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							if(maximized) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								togglemax(NULL); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							old = sel; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							sel = c; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							grabbuttons(old, False); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							drawtitle(old); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							if(old) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								grabbuttons(old, False); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								drawtitle(old); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if(c) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							grabbuttons(c, True); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							drawtitle(c); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						grabbuttons(c, True); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						drawtitle(c); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						else | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					Client * | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -247,8 +254,6 @@ manage(Window w, XWindowAttributes *wa) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						clients = c; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						settitle(c); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if(isvisible(c)) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							sel = c; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						arrange(NULL); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						XMapWindow(dpy, c->win); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						XMapWindow(dpy, c->twin); | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -366,12 +371,13 @@ void | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					togglemax(Arg *arg) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					{ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						int ox, oy, ow, oh; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						Client *c; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						XEvent ev; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if(!sel) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							return; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if((sel->ismax = !sel->ismax)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if((maximized = !maximized)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							ox = sel->x; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							oy = sel->y; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							ow = sel->w; | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -382,6 +388,9 @@ togglemax(Arg *arg) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							sel->h = sh - 2 - bh; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							restack(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							for(c = getnext(clients); c; c = getnext(c->next)) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								if(c != sel) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									ban(c); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							resize(sel, arrange == dofloat, TopLeft); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							sel->x = ox; | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -390,37 +399,36 @@ togglemax(Arg *arg) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							sel->h = oh; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						else | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							resize(sel, False, TopLeft); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							arrange(NULL); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					unmanage(Client *c) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					{ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						Client *tc; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						Client *tc, *fc; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						Window trans; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						XGrabServer(dpy); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						XSetErrorHandler(xerrordummy); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						XGetTransientForHint(dpy, c->win, &trans); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						XUngrabButton(dpy, AnyButton, AnyModifier, c->win); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						XDestroyWindow(dpy, c->twin); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						detach(c); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if(sel == c) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							XGetTransientForHint(dpy, c->win, &trans); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							if(trans && (tc = getclient(trans)) && isvisible(tc)) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								sel = tc; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								fc = tc; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							else | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								sel = getnext(clients); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								fc = getnext(clients); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							focus(fc); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						XUngrabButton(dpy, AnyButton, AnyModifier, c->win); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						XDestroyWindow(dpy, c->twin); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						free(c->tags); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						free(c); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						XSync(dpy, False); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						XSetErrorHandler(xerror); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						XUngrabServer(dpy); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if(sel) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							focus(sel); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						arrange(NULL); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} |