diff options
| author | Anselm R. Garbe <arg@10kloc.org> | 2006-08-28 08:06:50 +0200 | 
|---|---|---|
| committer | Anselm R. Garbe <arg@10kloc.org> | 2006-08-28 08:06:50 +0200 | 
| commit | 0a25fe91888f30a382ca0cfb492283ce9aa3296c (patch) | |
| tree | 695d8ff6434b1d742fdf5be2327632e8c02328b8 | |
| parent | 2dd5212a795b27422d601df0566ae0d6644bd4c8 (diff) | |
applied sanders focus_ patches
| -rw-r--r-- | client.c | 73 | ||||
| -rw-r--r-- | event.c | 2 | 
2 files changed, 49 insertions, 26 deletions
| @@ -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); @@ -123,7 +123,7 @@ buttonpress(XEvent *e)  	}  	else if((c = getclient(ev->window))) {  		focus(c); -		if(CLEANMASK(ev->state) == 0) +		if(CLEANMASK(ev->state) != MODKEY)  			return;  		switch(ev->button) {  		default: | 
