summary refs log tree commit diff
diff options
context:
space:
mode:
authorokan <okan>2019-03-01 14:32:01 +0000
committerokan <okan>2019-03-01 14:32:01 +0000
commit9d252184582d96dd916bc97675d6a35a18921140 (patch)
tree4fd49cdda69bfc79ad66c3d305b2a001e74b0efb
parentae231f67d0ac54fb6281831c10972cc2f1f37acf (diff)
downloadcwm-9d252184582d96dd916bc97675d6a35a18921140.tar.gz
cwm-9d252184582d96dd916bc97675d6a35a18921140.tar.xz
cwm-9d252184582d96dd916bc97675d6a35a18921140.zip
Tie group number and name together during config.
-rw-r--r--calmwm.h3
-rw-r--r--conf.c28
-rw-r--r--group.c9
-rw-r--r--screen.c5
4 files changed, 32 insertions, 13 deletions
diff --git a/calmwm.h b/calmwm.h
index cbd4a83..b6fa48f 100644
--- a/calmwm.h
+++ b/calmwm.h
@@ -447,7 +447,7 @@ void			 group_hide(struct group_ctx *);
 void			 group_hidetoggle(struct screen_ctx *, int);
 int			 group_holds_only_hidden(struct group_ctx *);
 int			 group_holds_only_sticky(struct group_ctx *);
-void			 group_init(struct screen_ctx *, int);
+void			 group_init(struct screen_ctx *, int, const char *);
 void			 group_movetogroup(struct client_ctx *, int);
 void			 group_only(struct screen_ctx *, int);
 void			 group_close(struct screen_ctx *, int);
@@ -555,6 +555,7 @@ void			 conf_grab_mouse(Window);
 void			 conf_init(struct conf *);
 void			 conf_ignore(struct conf *, const char *);
 void			 conf_screen(struct screen_ctx *);
+void			 conf_group(struct screen_ctx *);
 
 void			 xev_process(void);
 
diff --git a/conf.c b/conf.c
index e54f96a..d6b0dd1 100644
--- a/conf.c
+++ b/conf.c
@@ -36,6 +36,21 @@ static const char	*conf_bind_getmask(const char *, unsigned int *);
 static void		 conf_unbind_key(struct conf *, struct bind_ctx *);
 static void		 conf_unbind_mouse(struct conf *, struct bind_ctx *);
 
+static const struct {
+	int		 num;
+	const char	*name;
+} group_binds[] = {
+	{ 0, "nogroup" },
+	{ 1, "one" },
+	{ 2, "two" },
+	{ 3, "three" },
+	{ 4, "four" },
+	{ 5, "five" },
+	{ 6, "six" },
+	{ 7, "seven" },
+	{ 8, "eight" },
+	{ 9, "nine" },
+};
 static int cursor_binds[] = {
 	XC_left_ptr,		/* CF_NORMAL */
 	XC_fleur,		/* CF_MOVE */
@@ -266,7 +281,7 @@ conf_init(struct conf *c)
 	c->bwidth = 1;
 	c->mamount = 1;
 	c->snapdist = 0;
-	c->ngroups = 10;
+	c->ngroups = 0;
 	c->nameqlen = 5;
 
 	TAILQ_INIT(&c->ignoreq);
@@ -502,6 +517,17 @@ conf_screen(struct screen_ctx *sc)
 	conf_grab_kbd(sc->rootwin);
 }
 
+void
+conf_group(struct screen_ctx *sc)
+{
+	unsigned int	 i;
+
+	for (i = 0; i < nitems(group_binds); i++) {
+		group_init(sc, group_binds[i].num, group_binds[i].name);
+		Conf.ngroups++;
+	}
+}
+
 static const char *
 conf_bind_getmask(const char *name, unsigned int *mask)
 {
diff --git a/group.c b/group.c
index 0dc54ff..eee916f 100644
--- a/group.c
+++ b/group.c
@@ -37,11 +37,6 @@ static struct group_ctx	*group_prev(struct group_ctx *);
 static void		 group_restack(struct group_ctx *);
 static void		 group_setactive(struct group_ctx *);
 
-const char *num_to_name[] = {
-	"nogroup", "one", "two", "three", "four", "five", "six",
-	"seven", "eight", "nine"
-};
-
 void
 group_assign(struct group_ctx *gc, struct client_ctx *cc)
 {
@@ -124,13 +119,13 @@ group_restack(struct group_ctx *gc)
 }
 
 void
-group_init(struct screen_ctx *sc, int num)
+group_init(struct screen_ctx *sc, int num, const char *name)
 {
 	struct group_ctx	*gc;
 
 	gc = xmalloc(sizeof(*gc));
 	gc->sc = sc;
-	gc->name = xstrdup(num_to_name[num]);
+	gc->name = xstrdup(name);
 	gc->num = num;
 	TAILQ_INIT(&gc->clientq);
 
diff --git a/screen.c b/screen.c
index 845a323..ffe1e0c 100644
--- a/screen.c
+++ b/screen.c
@@ -40,7 +40,6 @@ screen_init(int which)
 	Window			*wins, w0, w1, active = None;
 	XSetWindowAttributes	 rootattr;
 	unsigned int		 nwins, w;
-	int			 i;
 
 	sc = xmalloc(sizeof(*sc));
 
@@ -61,9 +60,7 @@ screen_init(int which)
 	xu_ewmh_net_supported_wm_check(sc);
 
 	screen_update_geometry(sc);
-
-	for (i = 0; i < Conf.ngroups; i++)
-		group_init(sc, i);
+	conf_group(sc);
 
 	xu_ewmh_net_desktop_names(sc);
 	xu_ewmh_net_wm_desktop_viewport(sc);