summary refs log tree commit diff
path: root/client.c
diff options
context:
space:
mode:
authorokan <okan>2018-11-13 17:37:13 +0000
committerokan <okan>2018-11-13 17:37:13 +0000
commit194589eb6bfd9d44d2c595035475af14644350c1 (patch)
tree3778f5aee4ff4e6a5d5c619b97ed0be99ea4809e /client.c
parent268deed916cd217b39568809d520f9d4515abdac (diff)
downloadcwm-194589eb6bfd9d44d2c595035475af14644350c1.tar.gz
cwm-194589eb6bfd9d44d2c595035475af14644350c1.tar.xz
cwm-194589eb6bfd9d44d2c595035475af14644350c1.zip
Allow 'transientfor' clients to inherit group and bwidth either during init or
via property notify events. Previously only the flags were set but nothing was
in the path to apply said flags and/or bwidth. Required slight of re-orgnaization
of client_init.
Diffstat (limited to 'client.c')
-rw-r--r--client.c37
1 files changed, 21 insertions, 16 deletions
diff --git a/client.c b/client.c
index 1fa74b9..ff20290 100644
--- a/client.c
+++ b/client.c
@@ -62,10 +62,9 @@ client_init(Window win, struct screen_ctx *sc, int active)
 		mapped = wattr.map_state != IsUnmapped;
 	}
 
-	cc = xmalloc(sizeof(*cc));
-
 	XGrabServer(X_Dpy);
 
+	cc = xmalloc(sizeof(*cc));
 	cc->sc = sc;
 	cc->win = win;
 	cc->label = NULL;
@@ -74,30 +73,33 @@ client_init(Window win, struct screen_ctx *sc, int active)
 	cc->stackingorder = 0;
 	memset(&cc->hint, 0, sizeof(cc->hint));
 	memset(&cc->ch, 0, sizeof(cc->ch));
-
 	TAILQ_INIT(&cc->nameq);
-	client_setname(cc);
 
+	cc->geom.x = wattr.x;
+	cc->geom.y = wattr.y;
+	cc->geom.w = wattr.width;
+	cc->geom.h = wattr.height;
+	cc->colormap = wattr.colormap;
+	cc->obwidth = wattr.border_width;
+	cc->bwidth = Conf.bwidth;
+
+	client_setname(cc);
 	conf_client(cc);
 
 	XGetClassHint(X_Dpy, cc->win, &cc->ch);
 	client_wm_hints(cc);
 	client_wm_protocols(cc);
 	client_getsizehints(cc);
+	client_transient(cc);
 	client_mwm_hints(cc);
 
-	cc->geom.x = wattr.x;
-	cc->geom.y = wattr.y;
-	cc->geom.w = wattr.width;
-	cc->geom.h = wattr.height;
+	if ((cc->flags & CLIENT_IGNORE))
+		cc->bwidth = 0;
 	cc->dim.w = (cc->geom.w - cc->hint.basew) / cc->hint.incw;
 	cc->dim.h = (cc->geom.h - cc->hint.baseh) / cc->hint.inch;
 	cc->ptr.x = cc->geom.w / 2;
 	cc->ptr.y = cc->geom.h / 2;
 
-	cc->colormap = wattr.colormap;
-	cc->obwidth = wattr.border_width;
-
 	if (wattr.map_state != IsViewable) {
 		client_placecalc(cc);
 		client_resize(cc, 0);
@@ -114,8 +116,6 @@ client_init(Window win, struct screen_ctx *sc, int active)
 
 	XAddToSaveSet(X_Dpy, cc->win);
 
-	client_transient(cc);
-
 	/* Notify client of its configuration. */
 	client_config(cc);
 
@@ -131,6 +131,10 @@ client_init(Window win, struct screen_ctx *sc, int active)
 		client_unhide(cc);
 
 	if (mapped) {
+		if (cc->gc) {
+			group_movetogroup(cc, cc->gc->num);
+			goto out;
+		}
 		if (group_restore(cc))
 			goto out;
 		if (group_autogroup(cc))
@@ -926,10 +930,11 @@ client_transient(struct client_ctx *cc)
 	Window			 trans;
 
 	if (XGetTransientForHint(X_Dpy, cc->win, &trans)) {
-		if ((tc = client_find(trans)) != NULL && tc->gc) {
-			group_movetogroup(cc, tc->gc->num);
-			if (tc->flags & CLIENT_IGNORE)
+		if ((tc = client_find(trans)) != NULL) {
+			if (tc->flags & CLIENT_IGNORE) {
 				cc->flags |= CLIENT_IGNORE;
+				cc->bwidth = tc->bwidth;
+			}
 		}
 	}
 }