summary refs log tree commit diff
path: root/group.c
diff options
context:
space:
mode:
authorokan <okan>2014-09-06 16:08:58 +0000
committerokan <okan>2014-09-06 16:08:58 +0000
commit142f52a0aab29681a46e4ce10eb2618ee99ede95 (patch)
treefe2faee5da2bcd654fe02e117f9c0e6a068bc563 /group.c
parent87d604f119e3598ca2b0311082c89ebb67782f76 (diff)
downloadcwm-142f52a0aab29681a46e4ce10eb2618ee99ede95.tar.gz
cwm-142f52a0aab29681a46e4ce10eb2618ee99ede95.tar.xz
cwm-142f52a0aab29681a46e4ce10eb2618ee99ede95.zip
Rework group names: stash the group name inside the group_ctx as opposed
to having to manage an array outside in screen_ctx for group names and
shortcuts.  Simplifies (and moves bits for) reading, and constructing
data for, EWMH's _NET_DESKTOP_NAMES.
Diffstat (limited to 'group.c')
-rw-r--r--group.c54
1 files changed, 2 insertions, 52 deletions
diff --git a/group.c b/group.c
index 7d08f34..d1ae4f4 100644
--- a/group.c
+++ b/group.c
@@ -120,18 +120,15 @@ group_init(struct screen_ctx *sc)
 
 	TAILQ_INIT(&sc->groupq);
 	sc->group_hideall = 0;
-	/*
-	 * See if any group names have already been set and update the
-	 * property with ours if they'll have changed.
-	 */
-	group_update_names(sc);
 
 	for (i = 0; i < CALMWM_NGROUPS; i++) {
 		TAILQ_INIT(&sc->groups[i].clients);
+		sc->groups[i].name = xstrdup(num_to_name[i]);
 		sc->groups[i].num = i;
 		TAILQ_INSERT_TAIL(&sc->groupq, &sc->groups[i], entry);
 	}
 
+	xu_ewmh_net_desktop_names(sc);
 	xu_ewmh_net_wm_desktop_viewport(sc);
 	xu_ewmh_net_wm_number_of_desktops(sc);
 	xu_ewmh_net_showing_desktop(sc);
@@ -350,50 +347,3 @@ group_autogroup(struct client_ctx *cc)
 	else
 		group_assign(NULL, cc);
 }
-
-void
-group_update_names(struct screen_ctx *sc)
-{
-	char		**strings, *p;
-	unsigned char	*prop_ret;
-	int		 i = 0, j = 0, nstrings = 0, n = 0, setnames = 0;
-
-	if ((j = xu_getprop(sc->rootwin, ewmh[_NET_DESKTOP_NAMES],
-	    cwmh[UTF8_STRING], 0xffffff, (unsigned char **)&prop_ret)) > 0) {
-		prop_ret[j - 1] = '\0'; /* paranoia */
-		while (i < j) {
-			if (prop_ret[i++] == '\0')
-				nstrings++;
-		}
-	}
-
-	strings = xcalloc((nstrings < CALMWM_NGROUPS ? CALMWM_NGROUPS :
-	    nstrings), sizeof(*strings));
-
-	p = (char *)prop_ret;
-	while (n < nstrings) {
-		strings[n++] = xstrdup(p);
-		p += strlen(p) + 1;
-	}
-	/*
-	 * make sure we always set our defaults if nothing is there to
-	 * replace them.
-	 */
-	if (n < CALMWM_NGROUPS) {
-		setnames = 1;
-		i = 0;
-		while (n < CALMWM_NGROUPS)
-			strings[n++] = xstrdup(num_to_name[i++]);
-	}
-
-	if (prop_ret != NULL)
-		XFree(prop_ret);
-	if (sc->group_nonames != 0)
-		free(sc->group_names);
-
-	sc->group_names = strings;
-	sc->group_nonames = n;
-
-	if (setnames)
-		xu_ewmh_net_desktop_names(sc);
-}