summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--client.c37
-rw-r--r--conf.c5
-rw-r--r--xevents.c3
3 files changed, 25 insertions, 20 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;
+			}
 		}
 	}
 }
diff --git a/conf.c b/conf.c
index b77425c..b18dc4a 100644
--- a/conf.c
+++ b/conf.c
@@ -434,16 +434,13 @@ void
 conf_client(struct client_ctx *cc)
 {
 	struct winname	*wn;
-	int		 ignore = 0;
 
 	TAILQ_FOREACH(wn, &Conf.ignoreq, entry) {
 		if (strncasecmp(wn->name, cc->name, strlen(wn->name)) == 0) {
-			ignore = 1;
+			cc->flags |= CLIENT_IGNORE;
 			break;
 		}
 	}
-	cc->bwidth = (ignore) ? 0 : Conf.bwidth;
-	cc->flags |= (ignore) ? CLIENT_IGNORE : 0;
 }
 
 void
diff --git a/xevents.c b/xevents.c
index 21eb68b..e192400 100644
--- a/xevents.c
+++ b/xevents.c
@@ -198,6 +198,9 @@ xev_handle_propertynotify(XEvent *ee)
 			break;
 		case XA_WM_TRANSIENT_FOR:
 			client_transient(cc);
+			client_draw_border(cc);
+			if (cc->gc)
+				group_movetogroup(cc, cc->gc->num);
 			break;
 		default:
 			/* do nothing */