URI: 
       applied anydot's 3 minor patches, thank you anydot - dwm - dynamic window manager
  HTML git clone https://git.parazyd.org/dwm
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit 199a6016114875656102d11e79a80939bfaff3b3
   DIR parent 492c6f10fcf9acf74d84eb3fe005ecf2dd42611a
  HTML Author: Anselm R. Garbe <arg@suckless.org>
       Date:   Tue, 29 May 2007 11:35:20 +0200
       
       applied anydot's 3 minor patches, thank you anydot
       Diffstat:
         M client.c                            |      17 ++++-------------
         M dwm.h                               |       3 +--
         M event.c                             |       4 ++--
         M layout.c                            |      41 ++++++++++++++++++-------------
       
       4 files changed, 31 insertions(+), 34 deletions(-)
       ---
   DIR diff --git a/client.c b/client.c
       @@ -129,8 +129,8 @@ detach(Client *c) {
        
        void
        focus(Client *c) {
       -        if(c && !isvisible(c))
       -                return;
       +        if( !c && selscreen || c && !isvisible(c))
       +                for(c = stack; c && !isvisible(c); c = c->snext);
                if(sel && sel != c) {
                        grabbuttons(sel, False);
                        XSetWindowBorder(dpy, sel->win, dc.norm[ColBorder]);
       @@ -153,14 +153,6 @@ focus(Client *c) {
        }
        
        void
       -focustopvisible(void) {
       -        Client *c;
       -
       -        for(c = stack; c && !isvisible(c); c = c->snext);
       -        focus(c);
       -}
       -
       -void
        killclient(const char *arg) {
                XEvent ev;
        
       @@ -230,8 +222,7 @@ manage(Window w, XWindowAttributes *wa) {
                XMoveWindow(dpy, w, c->x + 2 * sw, c->y);
                XMapWindow(dpy, w);
                setclientstate(c, NormalState);
       -        if(isvisible(c))
       -                focus(c);
       +        focus(c);
                lt->arrange();
        }
        
       @@ -401,7 +392,7 @@ unmanage(Client *c) {
                detach(c);
                detachstack(c);
                if(sel == c)
       -                focustopvisible();
       +                focus(NULL);
                XUngrabButton(dpy, AnyButton, AnyModifier, c->win);
                setclientstate(c, WithdrawnState);
                free(c->tags);
   DIR diff --git a/dwm.h b/dwm.h
       @@ -100,8 +100,7 @@ Window root, barwin;
        void attach(Client *c);                        /* attaches c to global client list */
        void configure(Client *c);                /* send synthetic configure event */
        void detach(Client *c);                        /* detaches c from global client list */
       -void focus(Client *c);                        /* focus c, c may be NULL */
       -void focustopvisible(void);                /* focus top visible window on stack */
       +void focus(Client *c);                        /* focus c if visible && !NULL, or focus top visible */
        void killclient(const char *arg);        /* kill sel  nicely */
        void manage(Window w, XWindowAttributes *wa);        /* manage new client */
        void resize(Client *c, int x, int y,
   DIR diff --git a/event.c b/event.c
       @@ -242,11 +242,11 @@ enternotify(XEvent *e) {
        
                if(ev->mode != NotifyNormal || ev->detail == NotifyInferior)
                        return;
       -        if((c = getclient(ev->window)) && isvisible(c))
       +        if(c = getclient(ev->window))
                        focus(c);
                else if(ev->window == root) {
                        selscreen = True;
       -                focustopvisible();
       +                focus(NULL);
                }
        }
        
   DIR diff --git a/layout.c b/layout.c
       @@ -14,6 +14,22 @@ static unsigned int masterw = MASTERWIDTH;
        static unsigned int nmaster = NMASTER;
        
        static void
       +ban(Client *c) {
       +        if (c->isbanned)
       +                return;
       +        XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y);
       +        c->isbanned = True;
       +}
       +
       +static void
       +unban(Client *c) {
       +        if (!c->isbanned)
       +                return;
       +        XMoveWindow(dpy, c->win, c->x, c->y);
       +        c->isbanned = False;
       +}
       +
       +static void
        tile(void) {
                unsigned int i, n, nx, ny, nw, nh, mw, mh, tw, th;
                Client *c;
       @@ -28,9 +44,7 @@ tile(void) {
        
                for(i = 0, c = clients; c; c = c->next)
                        if(isvisible(c)) {
       -                        if(c->isbanned)
       -                                XMoveWindow(dpy, c->win, c->x, c->y);
       -                        c->isbanned = False;
       +                        unban(c);
                                if(c->isfloating)
                                        continue;
                                c->ismax = False;
       @@ -60,12 +74,9 @@ tile(void) {
                                resize(c, nx, ny, nw, nh, False);
                                i++;
                        }
       -                else {
       -                        c->isbanned = True;
       -                        XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y);
       -                }
       -        if(!sel || !isvisible(sel)) 
       -                focustopvisible();
       +                else
       +                        ban(c);
       +        focus(NULL);
                restack();
        }
        
       @@ -77,20 +88,16 @@ void
        floating(void) {
                Client *c;
        
       -        for(c = clients; c; c = c->next) {
       +        for(c = clients; c; c = c->next)
                        if(isvisible(c)) {
                                if(c->isbanned)
                                        XMoveWindow(dpy, c->win, c->x, c->y);
                                c->isbanned = False;
                                resize(c, c->x, c->y, c->w, c->h, True);
                        }
       -                else {
       -                        c->isbanned = True;
       -                        XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y);
       -                }
       -        }
       -        if(!sel || !isvisible(sel))
       -                focustopvisible();
       +                else
       +                        ban(c);
       +        focus(NULL);
                restack();
        }