| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -11,16 +11,42 @@ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					/* static functions */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					static void | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					grabbutton(Client *c, unsigned int button, unsigned int modifier) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					grabbuttons(Client *c, Bool focus) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					{ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						XGrabButton(dpy, button, modifier, c->win, False, BUTTONMASK, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								GrabModeAsync, GrabModeSync, None, None); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						XGrabButton(dpy, button, modifier | LockMask, c->win, False, BUTTONMASK, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								GrabModeAsync, GrabModeSync, None, None); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						XGrabButton(dpy, button, modifier | numlockmask, c->win, False, BUTTONMASK, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								GrabModeAsync, GrabModeSync, None, None); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						XGrabButton(dpy, button, modifier | numlockmask | LockMask, c->win, False, BUTTONMASK, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								GrabModeAsync, GrabModeSync, None, None); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						XUngrabButton(dpy, AnyButton, AnyModifier, c->win); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if(focus) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							XGrabButton(dpy, Button1, MODKEY, c->win, False, BUTTONMASK, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									GrabModeAsync, GrabModeSync, None, None); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							XGrabButton(dpy, Button1, MODKEY | LockMask, c->win, False, BUTTONMASK, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									GrabModeAsync, GrabModeSync, None, None); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							XGrabButton(dpy, Button1, MODKEY | numlockmask, c->win, False, BUTTONMASK, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									GrabModeAsync, GrabModeSync, None, None); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							XGrabButton(dpy, Button1, MODKEY | numlockmask | LockMask, c->win, False, BUTTONMASK, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									GrabModeAsync, GrabModeSync, None, None); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							XGrabButton(dpy, Button2, MODKEY, c->win, False, BUTTONMASK, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									GrabModeAsync, GrabModeSync, None, None); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							XGrabButton(dpy, Button2, MODKEY | LockMask, c->win, False, BUTTONMASK, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									GrabModeAsync, GrabModeSync, None, None); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							XGrabButton(dpy, Button2, MODKEY | numlockmask, c->win, False, BUTTONMASK, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									GrabModeAsync, GrabModeSync, None, None); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							XGrabButton(dpy, Button2, MODKEY | numlockmask | LockMask, c->win, False, BUTTONMASK, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									GrabModeAsync, GrabModeSync, None, None); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							XGrabButton(dpy, Button3, MODKEY, c->win, False, BUTTONMASK, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									GrabModeAsync, GrabModeSync, None, None); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							XGrabButton(dpy, Button3, MODKEY | LockMask, c->win, False, BUTTONMASK, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									GrabModeAsync, GrabModeSync, None, None); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							XGrabButton(dpy, Button3, MODKEY | numlockmask, c->win, False, BUTTONMASK, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									GrabModeAsync, GrabModeSync, None, None); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							XGrabButton(dpy, Button3, MODKEY | numlockmask | LockMask, c->win, False, BUTTONMASK, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									GrabModeAsync, GrabModeSync, None, None); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						else | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							XGrabButton(dpy, AnyButton, AnyModifier, c->win, False, BUTTONMASK, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									GrabModeAsync, GrabModeSync, None, None); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					static void | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -40,15 +66,6 @@ resizetitle(Client *c) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					static void | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					ungrabbutton(Client *c, unsigned int button, unsigned int modifier) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					{ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						XUngrabButton(dpy, button, modifier, c->win); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						XUngrabButton(dpy, button, modifier | LockMask, c->win); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						XUngrabButton(dpy, button, modifier | numlockmask, c->win); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						XUngrabButton(dpy, button, modifier | numlockmask | LockMask, c->win); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					static int | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					xerrordummy(Display *dsply, XErrorEvent *ee) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					{ | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -77,10 +94,10 @@ focus(Client *c) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							if(sel->ismax) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								togglemax(NULL); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							sel = c; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							grabbutton(old, AnyButton, 0); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							grabbuttons(old, False); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							drawtitle(old); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						ungrabbutton(c, AnyButton, 0); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						grabbuttons(c, True); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						drawtitle(c); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -220,9 +237,7 @@ manage(Window w, XWindowAttributes *wa) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						c->next = clients; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						clients = c; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						grabbutton(c, Button1, MODKEY); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						grabbutton(c, Button2, MODKEY); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						grabbutton(c, Button3, MODKEY); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						grabbuttons(c, False); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if((tc = getclient(trans))) /* inherit tags */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							for(i = 0; i < ntags; i++) | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -384,9 +399,13 @@ togglemax(Arg *arg) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					unmanage(Client *c) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					{ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						Client *tc; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						Window trans; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						XGrabServer(dpy); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						XSetErrorHandler(xerrordummy); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						XGetTransientForHint(dpy, c->win, &trans); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						XUngrabButton(dpy, AnyButton, AnyModifier, c->win); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						XDestroyWindow(dpy, c->twin); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -396,8 +415,12 @@ unmanage(Client *c) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							c->next->prev = c->prev; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if(c == clients) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							clients = c->next; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if(sel == c) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							sel = getnext(clients); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if(sel == c) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							if(trans && (tc = getclient(trans)) && isvisible(tc)) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								sel = tc; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							else | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								sel = getnext(clients); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						free(c->tags); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						free(c); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
				 | 
				
					
  |