X-Git-Url: https://git.xinqibao.xyz/dwm.git/blobdiff_plain/0d0e8bde134b999dd22c891d227d886ca6c9ba2c..0925dd588c6879916c8a9ded1e680963b093b068:/client.c

diff --git a/client.c b/client.c
index ecb9178..6524c06 100644
--- a/client.c
+++ b/client.c
@@ -10,6 +10,14 @@
 
 /* static functions */
 
+static void
+detachstack(Client *c)
+{
+	Client **tc;
+	for(tc=&stack; *tc && *tc != c; tc=&(*tc)->snext);
+	*tc = c->snext;
+}
+
 static void
 grabbuttons(Client *c, Bool focus)
 {
@@ -99,6 +107,9 @@ focus(Client *c)
 		}
 	}
 	if(c) {
+		detachstack(c);
+		c->snext = stack;
+		stack = c;
 		grabbuttons(c, True);
 		drawtitle(c);
 		XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
@@ -198,8 +209,7 @@ killclient(Arg *arg)
 void
 manage(Window w, XWindowAttributes *wa)
 {
-	unsigned int i;
-	Client *c, *tc;
+	Client *c;
 	Window trans;
 	XSetWindowAttributes twa;
 
@@ -238,22 +248,17 @@ 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 &&
 				c->maxw == c->minw && c->maxh == c->minh);
-	if(c->isfloat)
-		c->weight = ntags;
 
 	if(clients)
 		clients->prev = c;
 	c->next = clients;
-	clients = c;
+	c->snext = stack;
+	stack = clients = c;
 
 	settitle(c);
 	ban(c);
@@ -409,19 +414,16 @@ togglemax(Arg *arg)
 void
 unmanage(Client *c)
 {
-	Client *tc, *fc;
-	Window trans;
+	Client *nc;
+
 	XGrabServer(dpy);
 	XSetErrorHandler(xerrordummy);
 
 	detach(c);
+	detachstack(c);
 	if(sel == c) {
-		XGetTransientForHint(dpy, c->win, &trans);
-		if(trans && (tc = getclient(trans)) && isvisible(tc))
-			fc = tc;
-		else
-			fc = getnext(clients);
-		focus(fc);
+		for(nc = stack; nc && !isvisible(nc); nc = nc->snext);
+		focus(nc);
 	}
 
 	XUngrabButton(dpy, AnyButton, AnyModifier, c->win);