X-Git-Url: https://git.xinqibao.xyz/dwm.git/blobdiff_plain/58f2fe3f6af3d6f8c925125c721a2d1800d750dc..d34b4c7b9aaa4c8abadee6bc562ce4aef689e1f7:/client.c

diff --git a/client.c b/client.c
index beb7e35..3b6a0e1 100644
--- a/client.c
+++ b/client.c
@@ -25,7 +25,11 @@ resizetitle(Client *c)
 		c->bw = *c->w + 2;
 	c->bx = *c->x + *c->w - c->bw + 2;
 	c->by = *c->y;
-	XMoveResizeWindow(dpy, c->title, c->bx, c->by, c->bw, c->bh);
+	if(c->tags[tsel])
+		XMoveResizeWindow(dpy, c->title, c->bx, c->by, c->bw, c->bh);
+	else
+		XMoveResizeWindow(dpy, c->title, c->bx + 2 * sw, c->by, c->bw, c->bh);
+
 }
 
 static int
@@ -192,6 +196,7 @@ lower(Client *c)
 void
 manage(Window w, XWindowAttributes *wa)
 {
+	int diff;
 	Client *c;
 	XSetWindowAttributes twa;
 	Window trans;
@@ -200,11 +205,18 @@ manage(Window w, XWindowAttributes *wa)
 	c->win = w;
 	c->bx = c->fx = c->tx = wa->x;
 	c->by = c->fy = c->ty = wa->y;
-	if(c->fy < bh)
-		c->by = c->fy = c->ty += bh;
 	c->bw = c->fw = c->tw = wa->width;
 	c->fh = c->th = wa->height;
 	c->bh = bh;
+
+	diff = sw - c->fw;
+	c->fx = random() % (diff ? diff : 1);
+	diff = sh - c->fh - bh;
+	c->fy = random() % (diff ? diff : 1);
+
+	if(c->fy < bh)
+		c->by = c->fy = c->ty = bh;
+
 	c->border = 1;
 	c->proto = getproto(c->win);
 	setsize(c);
@@ -250,10 +262,8 @@ manage(Window w, XWindowAttributes *wa)
 		focus(c);
 	}
 	else {
-		ban(c);
 		XMapRaised(dpy, c->win);
 		XMapRaised(dpy, c->title);
-		XSync(dpy, False);
 	}
 }
 
@@ -267,7 +277,7 @@ maximize(Arg *arg)
 	*sel->w = sw - 2 * sel->border;
 	*sel->h = sh - 2 * sel->border - bh;
 	higher(sel);
-	resize(sel, False);
+	resize(sel, False, TopLeft);
 }
 
 void
@@ -283,9 +293,11 @@ pop(Client *c)
 }
 
 void
-resize(Client *c, Bool inc)
+resize(Client *c, Bool inc, Corner sticky)
 {
 	XConfigureEvent e;
+	int right = *c->x + *c->w;
+	int bottom = *c->y + *c->h;
 
 	if(inc) {
 		if(c->incw)
@@ -305,9 +317,15 @@ resize(Client *c, Bool inc)
 		*c->w = c->maxw;
 	if(c->maxh && *c->h > c->maxh)
 		*c->h = c->maxh;
+	if(sticky == TopRight || sticky == BotRight)
+		*c->x = right - *c->w;
+	if(sticky == BotLeft || sticky == BotRight)
+		*c->y = bottom - *c->h;
+
 	resizetitle(c);
 	XSetWindowBorderWidth(dpy, c->win, 1);
 	XMoveResizeWindow(dpy, c->win, *c->x, *c->y, *c->w, *c->h);
+
 	e.type = ConfigureNotify;
 	e.event = c->win;
 	e.window = c->win;