URI: 
       sanders solution is convincing and elegant - dwm - dynamic window manager
  HTML git clone https://git.parazyd.org/dwm
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit 69b738c097d8f471873a227e8668d8a35014be3d
   DIR parent da0b2a2f31d5a849464215a86a968ec3a1af2f73
  HTML Author: Anselm R. Garbe <arg@10kloc.org>
       Date:   Wed,  6 Sep 2006 11:54:16 +0200
       
       sanders solution is convincing and elegant
       Diffstat:
         M client.c                            |       8 --------
         M view.c                              |      50 ++++++-------------------------
       
       2 files changed, 9 insertions(+), 49 deletions(-)
       ---
   DIR diff --git a/client.c b/client.c
       @@ -99,14 +99,6 @@ focus(Client *c)
                        }
                }
                if(c) {
       -                if((c->isfloat || arrange == dofloat) && (c != clients)) {
       -                        detach(c);
       -                        if(clients) {
       -                                clients->prev = c;
       -                                c->next = clients;
       -                        }
       -                        clients = c;
       -                }
                        grabbuttons(c, True);
                        drawtitle(c);
                        XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
   DIR diff --git a/view.c b/view.c
       @@ -215,52 +215,20 @@ resizecol(Arg *arg)
        void
        restack()
        {
       -        static unsigned int nwins = 0;
       -        static Window *wins = NULL;
       -        unsigned int f, fi, m, mi, n;
                Client *c;
                XEvent ev;
       -
       -        for(f = 0, m = 0, c = clients; c; c = c->next)
       -                if(isvisible(c)) {
       -                        if(c->isfloat || arrange == dofloat)
       -                                f++;
       -                        else
       -                                m++;
       -                }
       -        if(!(n = 2 * (f + m))) {
       -                drawstatus();
       +        
       +        if(!sel)
                        return;
       +        if(sel->isfloat || arrange == dofloat) {
       +                XRaiseWindow(dpy, sel->win);
       +                XRaiseWindow(dpy, sel->twin);
                }
       -        if(nwins < n) {
       -                nwins = n;
       -                wins = erealloc(wins, nwins * sizeof(Window));
       -        }
       -
       -        fi = 0;
       -        mi = 2 * f;
       -        if(sel) {
       -                if(sel->isfloat || arrange == dofloat) {
       -                        wins[fi++] = sel->twin;
       -                        wins[fi++] = sel->win;
       -                }
       -                else {
       -                        wins[mi++] = sel->twin;
       -                        wins[mi++] = sel->win;
       -                }
       -        }
       -        for(c = clients; c; c = c->next)
       -                if(isvisible(c) && c != sel) {
       -                        if(c->isfloat || arrange == dofloat) {
       -                                wins[fi++] = c->twin;
       -                                wins[fi++] = c->win;
       -                        }
       -                        else {
       -                                wins[mi++] = c->twin;
       -                                wins[mi++] = c->win;
       -                        }
       +        if(arrange != dofloat) 
       +                for(c = nexttiled(clients); c; c = nexttiled(c->next)) {
       +                        XLowerWindow(dpy, c->twin);
       +                        XLowerWindow(dpy, c->win);
                        }
       -        XRestackWindows(dpy, wins, n);
                drawall();
                XSync(dpy, False);
                while(XCheckMaskEvent(dpy, EnterWindowMask, &ev));