summary refs log tree commit diff
path: root/client.c
diff options
context:
space:
mode:
Diffstat (limited to 'client.c')
-rw-r--r--client.c16
1 files changed, 7 insertions, 9 deletions
diff --git a/client.c b/client.c
index ea97344..653c0d4 100644
--- a/client.c
+++ b/client.c
@@ -668,23 +668,21 @@ void
 client_set_name(struct client_ctx *cc)
 {
 	struct winname	*wn;
+	char		*newname;
 	int		 i = 0;
 
-	free(cc->name);
-	if (!xu_get_strprop(cc->win, ewmh[_NET_WM_NAME], &cc->name))
-		if (!xu_get_strprop(cc->win, XA_WM_NAME, &cc->name))
-			cc->name = xstrdup("");
+	if (!xu_get_strprop(cc->win, ewmh[_NET_WM_NAME], &newname))
+		if (!xu_get_strprop(cc->win, XA_WM_NAME, &newname))
+			newname = xstrdup("");
 
 	TAILQ_FOREACH(wn, &cc->nameq, entry) {
-		if (strcmp(wn->name, cc->name) == 0) {
+		if (strcmp(wn->name, newname) == 0)
 			TAILQ_REMOVE(&cc->nameq, wn, entry);
-			free(wn->name);
-			free(wn);
-		}
 		i++;
 	}
+	cc->name = newname;
 	wn = xmalloc(sizeof(*wn));
-	wn->name = xstrdup(cc->name);
+	wn->name = xstrdup(newname);
 	TAILQ_INSERT_TAIL(&cc->nameq, wn, entry);
 
 	/* Garbage collection. */