JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
seems to preserve floating client z-layer order (even with reorder() calls)
[dwm.git] / client.c
index 81f4280..46693cd 100644 (file)
--- a/client.c
+++ b/client.c
@@ -99,6 +99,14 @@ 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);
@@ -199,7 +207,7 @@ void
 manage(Window w, XWindowAttributes *wa)
 {
        unsigned int i;
-       Client *c, *tc;
+       Client *c;
        Window trans;
        XSetWindowAttributes twa;
 
@@ -238,11 +246,7 @@ manage(Window w, XWindowAttributes *wa)
                        CWOverrideRedirect | CWBackPixmap | CWEventMask, &twa);
 
        grabbuttons(c, False);
-       if((tc = getclient(trans))) /* inherit tags */
-               for(i = 0; i < ntags; i++)
-                       c->tags[i] = tc->tags[i];
-       else
-               settags(c);
+       settags(c, getclient(trans));
        if(!c->isfloat)
                c->isfloat = trans
                        || (c->maxw && c->minw &&
@@ -254,13 +258,12 @@ manage(Window w, XWindowAttributes *wa)
        clients = c;
 
        settitle(c);
-       if(isvisible(c))
-               sel = c;
-       arrange(NULL);
+       ban(c);
        XMapWindow(dpy, c->win);
        XMapWindow(dpy, c->twin);
        if(isvisible(c))
                focus(c);
+       arrange(NULL);
 }
 
 void