X-Git-Url: https://git.xinqibao.xyz/dwm.git/blobdiff_plain/735ca9ccd61c8e498b04fa6928a42afe24a6b361..57e6e3bb80b5fc4709de3f8b716a8b8065897c7a:/client.c

diff --git a/client.c b/client.c
index 57ea617..6a231b9 100644
--- a/client.c
+++ b/client.c
@@ -24,7 +24,7 @@ resizetitle(Client *c)
 		c->tw = c->w + 2;
 	c->tx = c->x + c->w - c->tw + 2;
 	c->ty = c->y;
-	if(c->tags[tsel])
+	if(isvisible(c))
 		XMoveResizeWindow(dpy, c->title, c->tx, c->ty, c->tw, c->th);
 	else
 		XMoveResizeWindow(dpy, c->title, c->tx + 2 * sw, c->ty, c->tw, c->th);
@@ -52,15 +52,12 @@ focus(Client *c)
 	if (!issel)
 		return;
 	Client *old = sel;
-	XEvent ev;
 
 	sel = c;
 	if(old && old != c)
 		drawtitle(old);
 	drawtitle(c);
 	XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
-	XSync(dpy, False);
-	while(XCheckMaskEvent(dpy, EnterWindowMask, &ev));
 }
 
 void
@@ -77,8 +74,8 @@ focusnext(Arg *arg)
 	if(!(c = getnext(sel->next)))
 		c = getnext(clients);
 	if(c) {
-		higher(c);
 		focus(c);
+		restack();
 	}
 }
 
@@ -98,8 +95,8 @@ focusprev(Arg *arg)
 		c = getprev(c);
 	}
 	if(c) {
-		higher(c);
 		focus(c);
+		restack();
 	}
 }
 
@@ -180,13 +177,6 @@ gravitate(Client *c, Bool invert)
 	c->y += dy;
 }
 
-void
-higher(Client *c)
-{
-	XRaiseWindow(dpy, c->win);
-	XRaiseWindow(dpy, c->title);
-}
-
 void
 killclient(Arg *arg)
 {
@@ -271,12 +261,13 @@ manage(Window w, XWindowAttributes *wa)
 			|| (c->maxw && c->minw &&
 				c->maxw == c->minw && c->maxh == c->minh);
 	settitle(c);
-	arrange(NULL);
 
-	/* mapping the window now prevents flicker */
-	XMapRaised(dpy, c->win);
-	XMapRaised(dpy, c->title);
-	if(c->tags[tsel])
+	if(isvisible(c))
+		sel = c;
+	arrange(NULL);
+	XMapWindow(dpy, c->win);
+	XMapWindow(dpy, c->title);
+	if(isvisible(c))
 		focus(c);
 }
 
@@ -410,7 +401,7 @@ togglemax(Arg *arg)
 		sel->w = sw - 2;
 		sel->h = sh - 2 - bh;
 
-		higher(sel);
+		restack();
 		resize(sel, arrange == dofloat, TopLeft);
 
 		sel->x = ox;
@@ -438,22 +429,17 @@ unmanage(Client *c)
 		c->next->prev = c->prev;
 	if(c == clients)
 		clients = c->next;
-	if(sel == c) {
-		sel = getnext(c->next);
-		if(!sel)
-			sel = getprev(c->prev);
-		if(!sel)
-			sel = clients;
-	}
+	if(sel == c)
+		sel = getnext(clients);
 	free(c->tags);
 	free(c);
 
 	XSync(dpy, False);
 	XSetErrorHandler(xerror);
 	XUngrabServer(dpy);
-	arrange(NULL);
 	if(sel)
 		focus(sel);
+	arrange(NULL);
 }
 
 void
@@ -472,14 +458,13 @@ zoom(Arg *arg)
 	}
 
 	/* pop */
-	if(sel->prev)
-		sel->prev->next = sel->next;
+	sel->prev->next = sel->next;
 	if(sel->next)
 		sel->next->prev = sel->prev;
 	sel->prev = NULL;
 	clients->prev = sel;
 	sel->next = clients;
 	clients = sel;
-	arrange(NULL);
 	focus(sel);
+	arrange(NULL);
 }