|  | @@ -10,6 +10,19 @@
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  /* static functions */
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +static void
 | 
	
		
			
				|  |  | +grabbutton(Client *c, unsigned int button, unsigned int modifier)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +	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);
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  static void
 | 
	
		
			
				|  |  |  resizetitle(Client *c)
 | 
	
		
			
				|  |  |  {
 | 
	
	
		
			
				|  | @@ -31,6 +44,15 @@ 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)
 | 
	
		
			
				|  |  |  {
 | 
	
	
		
			
				|  | @@ -53,11 +75,14 @@ focus(Client *c)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	if (!issel)
 | 
	
		
			
				|  |  |  		return;
 | 
	
		
			
				|  |  | -	if(sel && sel->ismax)
 | 
	
		
			
				|  |  | +	if(sel && sel->ismax && sel != c)
 | 
	
		
			
				|  |  |  		togglemax(NULL);
 | 
	
		
			
				|  |  |  	sel = c;
 | 
	
		
			
				|  |  | -	if(old && old != c)
 | 
	
		
			
				|  |  | +	if(old && old != c) {
 | 
	
		
			
				|  |  | +		grabbutton(old, AnyButton, 0);
 | 
	
		
			
				|  |  |  		drawtitle(old);
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	ungrabbutton(c, AnyButton, 0);
 | 
	
		
			
				|  |  |  	drawtitle(c);
 | 
	
		
			
				|  |  |  	XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
 | 
	
		
			
				|  |  |  }
 | 
	
	
		
			
				|  | @@ -230,32 +255,9 @@ manage(Window w, XWindowAttributes *wa)
 | 
	
		
			
				|  |  |  	c->next = clients;
 | 
	
		
			
				|  |  |  	clients = c;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	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);
 | 
	
		
			
				|  |  | +	grabbutton(c, Button1, MODKEY);
 | 
	
		
			
				|  |  | +	grabbutton(c, Button2, MODKEY);
 | 
	
		
			
				|  |  | +	grabbutton(c, Button3, MODKEY);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	settags(c);
 | 
	
		
			
				|  |  |  	if(!c->isfloat)
 |