|  | @@ -212,6 +212,7 @@ char stext[256], buf[256];
 | 
	
		
			
				|  |  |  int screen, sx, sy, sw, sh;
 | 
	
		
			
				|  |  |  int (*xerrorxlib)(Display *, XErrorEvent *);
 | 
	
		
			
				|  |  |  int bx, by, bw, bh, blw, bgw, mx, my, mw, mh, mox, moy, mow, moh, tx, ty, tw, th, wx, wy, ww, wh;
 | 
	
		
			
				|  |  | +double mfact;
 | 
	
		
			
				|  |  |  unsigned int numlockmask = 0;
 | 
	
		
			
				|  |  |  void (*handler[LASTEvent]) (XEvent *) = {
 | 
	
		
			
				|  |  |  	[ButtonPress] = buttonpress,
 | 
	
	
		
			
				|  | @@ -805,39 +806,20 @@ gettextprop(Window w, Atom atom, char *text, unsigned int size) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void
 | 
	
		
			
				|  |  |  grabbuttons(Client *c, Bool focused) {
 | 
	
		
			
				|  |  | -	XUngrabButton(dpy, AnyButton, AnyModifier, c->win);
 | 
	
		
			
				|  |  | +	int i, j;
 | 
	
		
			
				|  |  | +	unsigned int buttons[]   = { Button1, Button2, Button3 };
 | 
	
		
			
				|  |  | +	unsigned int modifiers[] = { MODKEY, MODKEY|LockMask, MODKEY|numlockmask,
 | 
	
		
			
				|  |  | +	                             MODKEY|numlockmask|LockMask} ;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	if(focused) {
 | 
	
		
			
				|  |  | -		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);
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | +	XUngrabButton(dpy, AnyButton, AnyModifier, c->win);
 | 
	
		
			
				|  |  | +	if(focused)
 | 
	
		
			
				|  |  | +		for(i = 0; i < LENGTH(buttons); i++)
 | 
	
		
			
				|  |  | +			for(j = 0; j < LENGTH(modifiers); j++)
 | 
	
		
			
				|  |  | +				XGrabButton(dpy, buttons[i], modifiers[j], c->win, False,
 | 
	
		
			
				|  |  | +				            BUTTONMASK, GrabModeAsync, GrabModeSync, None, None);
 | 
	
		
			
				|  |  |  	else
 | 
	
		
			
				|  |  | -		XGrabButton(dpy, AnyButton, AnyModifier, c->win, False, BUTTONMASK,
 | 
	
		
			
				|  |  | -				GrabModeAsync, GrabModeSync, None, None);
 | 
	
		
			
				|  |  | +		XGrabButton(dpy, AnyButton, AnyModifier, c->win, False,
 | 
	
		
			
				|  |  | +		            BUTTONMASK, GrabModeAsync, GrabModeSync, None, None);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void
 | 
	
	
		
			
				|  | @@ -1467,20 +1449,19 @@ setlayout(const char *arg) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void
 | 
	
		
			
				|  |  |  setmfact(const char *arg) {
 | 
	
		
			
				|  |  | -	double delta;
 | 
	
		
			
				|  |  | +	double d;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	if(!arg || lt->isfloating)
 | 
	
		
			
				|  |  | +	if(lt->isfloating)
 | 
	
		
			
				|  |  |  		return;
 | 
	
		
			
				|  |  | -	delta = strtod(arg, NULL);
 | 
	
		
			
				|  |  | -	if(arg[0] == '-' || arg[0] == '+') {
 | 
	
		
			
				|  |  | -		if(mfact + delta < 0.1 || mfact + delta > 0.9)
 | 
	
		
			
				|  |  | -			return;
 | 
	
		
			
				|  |  | -		mfact += delta;
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | +	if(!arg)
 | 
	
		
			
				|  |  | +		mfact = MFACT;
 | 
	
		
			
				|  |  |  	else {
 | 
	
		
			
				|  |  | -		if(delta < 0.1 || delta > 0.9)
 | 
	
		
			
				|  |  | +		d = strtod(arg, NULL);
 | 
	
		
			
				|  |  | +		if(arg[0] == '-' || arg[0] == '+')
 | 
	
		
			
				|  |  | +			d += mfact;
 | 
	
		
			
				|  |  | +		if(d < 0.1 || d > 0.9)
 | 
	
		
			
				|  |  |  			return;
 | 
	
		
			
				|  |  | -		mfact = delta;
 | 
	
		
			
				|  |  | +		mfact = d;
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  	setgeom(geom->symbol);
 | 
	
		
			
				|  |  |  }
 | 
	
	
		
			
				|  | @@ -1501,6 +1482,7 @@ setup(void) {
 | 
	
		
			
				|  |  |  	sw = DisplayWidth(dpy, screen);
 | 
	
		
			
				|  |  |  	sh = DisplayHeight(dpy, screen);
 | 
	
		
			
				|  |  |  	bh = dc.font.height + 2;
 | 
	
		
			
				|  |  | +	mfact = MFACT;
 | 
	
		
			
				|  |  |  	geom = &geoms[0];
 | 
	
		
			
				|  |  |  	geom->apply();
 | 
	
		
			
				|  |  |  
 |