summary refs log tree commit diff
diff options
context:
space:
mode:
authorokan <okan>2012-10-31 19:30:19 +0000
committerokan <okan>2012-10-31 19:30:19 +0000
commit4fb420514d73699acfc7ec1c35124cf7819a277f (patch)
treedf19048fe40a84ea2ca51ebfdcf360f3ffcb8dbc
parentc256052308d9135454b91fa16ba7aaef97923b4b (diff)
downloadcwm-4fb420514d73699acfc7ec1c35124cf7819a277f.tar.gz
cwm-4fb420514d73699acfc7ec1c35124cf7819a277f.tar.xz
cwm-4fb420514d73699acfc7ec1c35124cf7819a277f.zip
replace 'reload' with 'restart', which merely re-exec's cwm using the
existing argv; same idea with respect to argv saving as Alexander
Polakov.  reload support was half-complete and is getting in the way.

agreed to by many
-rw-r--r--calmwm.c2
-rw-r--r--calmwm.h4
-rw-r--r--conf.c34
-rw-r--r--cwm.15
-rw-r--r--cwmrc.57
-rw-r--r--font.c5
-rw-r--r--kbfunc.c6
-rw-r--r--menu.c4
-rw-r--r--xutil.c6
9 files changed, 17 insertions, 56 deletions
diff --git a/calmwm.c b/calmwm.c
index cce800d..f908a04 100644
--- a/calmwm.c
+++ b/calmwm.c
@@ -34,6 +34,7 @@
 
 #include "calmwm.h"
 
+char				**cwm_argv;
 Display				*X_Dpy;
 
 Cursor				 Cursor_default;
@@ -67,6 +68,7 @@ main(int argc, char **argv)
 		warnx("no locale support");
 	mbtowc(NULL, NULL, MB_CUR_MAX);
 
+	cwm_argv = argv;
 	while ((ch = getopt(argc, argv, "c:d:")) != -1) {
 		switch (ch) {
 		case 'c':
diff --git a/calmwm.h b/calmwm.h
index e193dd8..00d6442 100644
--- a/calmwm.h
+++ b/calmwm.h
@@ -397,7 +397,7 @@ void			 kbfunc_lock(struct client_ctx *, union arg *);
 void			 kbfunc_menu_search(struct client_ctx *, union arg *);
 void			 kbfunc_moveresize(struct client_ctx *, union arg *);
 void			 kbfunc_quit_wm(struct client_ctx *, union arg *);
-void			 kbfunc_reload(struct client_ctx *, union arg *);
+void			 kbfunc_restart(struct client_ctx *, union arg *);
 void			 kbfunc_ssh(struct client_ctx *, union arg *);
 void			 kbfunc_term(struct client_ctx *, union arg *);
 
@@ -431,7 +431,6 @@ void			 conf_grab(struct conf *, struct keybinding *);
 void			 conf_grab_mouse(struct client_ctx *);
 void			 conf_init(struct conf *);
 void			 conf_mousebind(struct conf *, char *, char *);
-void			 conf_reload(struct conf *);
 void			 conf_setup(struct conf *, const char *);
 void			 conf_ungrab(struct conf *, struct keybinding *);
 
@@ -449,7 +448,6 @@ void			 xev_loop(void);
 void			 xu_btn_grab(Window, int, u_int);
 void			 xu_btn_ungrab(Window, int, u_int);
 void			 xu_configure(struct client_ctx *);
-void			 xu_freecolor(struct screen_ctx *, unsigned long);
 void			 xu_getatoms(void);
 unsigned long		 xu_getcolor(struct screen_ctx *, char *);
 int			 xu_getprop(Window, Atom, Atom, long, u_char **);
diff --git a/conf.c b/conf.c
index 8b26a0a..0be8fb3 100644
--- a/conf.c
+++ b/conf.c
@@ -81,36 +81,8 @@ conf_color(struct conf *c, struct screen_ctx *sc)
 {
 	int	 i;
 
-	for (i = 0; i < CWM_COLOR_MAX; i++) {
-		xu_freecolor(sc, sc->color[i].pixel);
+	for (i = 0; i < CWM_COLOR_MAX; i++)
 		sc->color[i].pixel = xu_getcolor(sc, c->color[i].name);
-	}
-}
-
-void
-conf_reload(struct conf *c)
-{
-	struct screen_ctx	*sc;
-	struct client_ctx	*cc;
-
-	if (parse_config(c->conf_path, c) == -1) {
-		warnx("config file %s has errors, not reloading", c->conf_path);
-		return;
-	}
-
-	TAILQ_FOREACH(sc, &Screenq, entry) {
-		conf_gap(c, sc);
-		conf_color(c, sc);
-		conf_font(c, sc);
-		menu_init(sc);
-	}
-	TAILQ_FOREACH(cc, &Clientq, entry) {
-		conf_client(cc);
-		/* XXX Does not take hmax/vmax into account. */
-		if ((cc->flags & CLIENT_MAXFLAGS) == CLIENT_MAXIMIZED)
-			cc->bwidth = 0;
-		client_draw_border(cc);
-	}
 }
 
 static struct {
@@ -148,7 +120,7 @@ static struct {
 	{ "CM-equal",	"vmaximize" },
 	{ "CMS-equal",	"hmaximize" },
 	{ "CMS-f",	"freeze" },
-	{ "CMS-r",	"reload" },
+	{ "CMS-r",	"restart" },
 	{ "CMS-q",	"quit" },
 	{ "M-h",	"moveleft" },
 	{ "M-j",	"movedown" },
@@ -375,7 +347,7 @@ static struct {
 	{ "vmaximize", kbfunc_client_vmaximize, KBFLAG_NEEDCLIENT, {0} },
 	{ "hmaximize", kbfunc_client_hmaximize, KBFLAG_NEEDCLIENT, {0} },
 	{ "freeze", kbfunc_client_freeze, KBFLAG_NEEDCLIENT, {0} },
-	{ "reload", kbfunc_reload, 0, {0} },
+	{ "restart", kbfunc_restart, 0, {0} },
 	{ "quit", kbfunc_quit_wm, 0, {0} },
 	{ "exec", kbfunc_exec, 0, {.i = CWM_EXEC_PROGRAM} },
 	{ "exec_wm", kbfunc_exec, 0, {.i = CWM_EXEC_WM} },
diff --git a/cwm.1 b/cwm.1
index 49d4df2..d647618 100644
--- a/cwm.1
+++ b/cwm.1
@@ -14,7 +14,7 @@
 .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 .\"
-.Dd $Mdocdate: May 7 2012 $
+.Dd $Mdocdate: May 9 2012 $
 .Dt CWM 1
 .Os
 .Sh NAME
@@ -116,7 +116,8 @@ dialog; allows you to switch from
 .Nm
 to another window manager without restarting the X server.
 .It Ic CMS-r
-Reload configuration.
+Restart the running
+.Xr cwm 1 .
 .It Ic CMS-q
 Quit
 .Nm .
diff --git a/cwmrc.5 b/cwmrc.5
index bc4311f..7c3be84 100644
--- a/cwmrc.5
+++ b/cwmrc.5
@@ -14,7 +14,7 @@
 .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 .\"
-.Dd $Mdocdate: July 6 2012 $
+.Dd $Mdocdate: October 28 2012 $
 .Dt CWMRC 5
 .Os
 .Sh NAME
@@ -269,8 +269,9 @@ mousebind M-3	window_resize
 .Ed
 .Sh BIND COMMAND LIST
 .Bl -tag -width 18n -compact
-.It reload
-Reload configuration.
+.It restart
+Restart the running
+.Xr cwm 1 .
 .It quit
 Quit
 .Xr cwm 1 .
diff --git a/font.c b/font.c
index 54c878e..88d6519 100644
--- a/font.c
+++ b/font.c
@@ -51,16 +51,11 @@ font_height(struct screen_ctx *sc)
 void
 font_init(struct screen_ctx *sc, const char *color)
 {
-	if (sc->xftdraw)
-		XftDrawDestroy(sc->xftdraw);
 	sc->xftdraw = XftDrawCreate(X_Dpy, sc->rootwin,
 	    DefaultVisual(X_Dpy, sc->which), DefaultColormap(X_Dpy, sc->which));
 	if (sc->xftdraw == NULL)
 		errx(1, "XftDrawCreate");
 
-	if (sc->xftcolor.pixel)
-		XftColorFree(X_Dpy, DefaultVisual(X_Dpy, sc->which),
-		    DefaultColormap(X_Dpy, sc->which), &sc->xftcolor);
 	if (!XftColorAllocName(X_Dpy, DefaultVisual(X_Dpy, sc->which),
 	    DefaultColormap(X_Dpy, sc->which), color, &sc->xftcolor))
 		errx(1, "XftColorAllocName");
diff --git a/kbfunc.c b/kbfunc.c
index 2b26416..e11a3cb 100644
--- a/kbfunc.c
+++ b/kbfunc.c
@@ -35,6 +35,7 @@
 #define KNOWN_HOSTS	".ssh/known_hosts"
 #define HASH_MARKER	"|1|"
 
+extern char		**cwm_argv;
 extern sig_atomic_t	xev_quit;
 
 void
@@ -490,7 +491,8 @@ kbfunc_quit_wm(struct client_ctx *cc, union arg *arg)
 }
 
 void
-kbfunc_reload(struct client_ctx *cc, union arg *arg)
+kbfunc_restart(struct client_ctx *cc, union arg *arg)
 {
-	conf_reload(&Conf);
+	(void)setsid();
+	(void)execvp(cwm_argv[0], cwm_argv);
 }
diff --git a/menu.c b/menu.c
index 7b6e0dc..4a532a9 100644
--- a/menu.c
+++ b/menu.c
@@ -77,8 +77,6 @@ menu_init(struct screen_ctx *sc)
 {
 	XGCValues	 gv;
 
-	if (sc->menuwin)
-		XDestroyWindow(X_Dpy, sc->menuwin);
 	sc->menuwin = XCreateSimpleWindow(X_Dpy, sc->rootwin, 0, 0, 1, 1,
 	    Conf.bwidth,
 	    sc->color[CWM_COLOR_FG_MENU].pixel,
@@ -89,8 +87,6 @@ menu_init(struct screen_ctx *sc)
 	gv.background = sc->color[CWM_COLOR_BG_MENU].pixel;
 	gv.function = GXxor;
 
-	if (sc->gc)
-		XFreeGC(X_Dpy, sc->gc);
 	sc->gc = XCreateGC(X_Dpy, sc->menuwin,
 	    GCForeground|GCBackground|GCFunction, &gv);
 }
diff --git a/xutil.c b/xutil.c
index d3f7978..5dbc911 100644
--- a/xutil.c
+++ b/xutil.c
@@ -429,9 +429,3 @@ xu_getcolor(struct screen_ctx *sc, char *name)
 
 	return (color.pixel);
 }
-
-void
-xu_freecolor(struct screen_ctx *sc, unsigned long pixel)
-{
-	XFreeColors(X_Dpy, DefaultColormap(X_Dpy, sc->which), &pixel, 1, 0L);
-}