this version should also work with cornercases (like unmanage during !issel, etc.) - dwm - dynamic window manager
 (HTM) git clone https://git.parazyd.org/dwm
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 17ec726b494c2ee6e6b5dbe00bb83b2d931b3fc0
 (DIR) parent 373b11de11fd5cee875ef521e3ac0527565c4721
 (HTM) Author: Anselm R. Garbe <arg@suckless.org>
       Date:   Tue, 23 Jan 2007 12:00:49 +0100
       
       this version should also work with cornercases (like unmanage during !issel, etc.)
       Diffstat:
         M client.c                            |      14 +++++++-------
       
       1 file changed, 7 insertions(+), 7 deletions(-)
       ---
 (DIR) diff --git a/client.c b/client.c
       @@ -79,15 +79,16 @@ configure(Client *c) {
        
        void
        focus(Client *c) {
       -        Client *old = sel;
       -
                if(c && !isvisible(c))
                        return;
        
       -        if(old && old != c) {
       -                grabbuttons(old, False);
       -                XSetWindowBorder(dpy, old->win, dc.norm[ColBorder]);
       +        if(sel && sel != c) {
       +                grabbuttons(sel, False);
       +                XSetWindowBorder(dpy, sel->win, dc.norm[ColBorder]);
                }
       +        sel = c;
       +        if(!issel)
       +                return;
                if(c) {
                        detachstack(c);
                        c->snext = stack;
       @@ -96,9 +97,8 @@ focus(Client *c) {
                        XSetWindowBorder(dpy, c->win, dc.sel[ColBorder]);
                        XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
                }
       -        else if(issel)
       +        else
                        XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
       -        sel = c;
                drawstatus();
        }