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
This commit is contained in:
okan 2012-10-31 19:30:19 +00:00
parent c256052308
commit 4fb420514d
9 changed files with 17 additions and 56 deletions

View File

@ -34,6 +34,7 @@
#include "calmwm.h" #include "calmwm.h"
char **cwm_argv;
Display *X_Dpy; Display *X_Dpy;
Cursor Cursor_default; Cursor Cursor_default;
@ -67,6 +68,7 @@ main(int argc, char **argv)
warnx("no locale support"); warnx("no locale support");
mbtowc(NULL, NULL, MB_CUR_MAX); mbtowc(NULL, NULL, MB_CUR_MAX);
cwm_argv = argv;
while ((ch = getopt(argc, argv, "c:d:")) != -1) { while ((ch = getopt(argc, argv, "c:d:")) != -1) {
switch (ch) { switch (ch) {
case 'c': case 'c':

View File

@ -397,7 +397,7 @@ void kbfunc_lock(struct client_ctx *, union arg *);
void kbfunc_menu_search(struct client_ctx *, union arg *); void kbfunc_menu_search(struct client_ctx *, union arg *);
void kbfunc_moveresize(struct client_ctx *, union arg *); void kbfunc_moveresize(struct client_ctx *, union arg *);
void kbfunc_quit_wm(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_ssh(struct client_ctx *, union arg *);
void kbfunc_term(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_grab_mouse(struct client_ctx *);
void conf_init(struct conf *); void conf_init(struct conf *);
void conf_mousebind(struct conf *, char *, char *); void conf_mousebind(struct conf *, char *, char *);
void conf_reload(struct conf *);
void conf_setup(struct conf *, const char *); void conf_setup(struct conf *, const char *);
void conf_ungrab(struct conf *, struct keybinding *); 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_grab(Window, int, u_int);
void xu_btn_ungrab(Window, int, u_int); void xu_btn_ungrab(Window, int, u_int);
void xu_configure(struct client_ctx *); void xu_configure(struct client_ctx *);
void xu_freecolor(struct screen_ctx *, unsigned long);
void xu_getatoms(void); void xu_getatoms(void);
unsigned long xu_getcolor(struct screen_ctx *, char *); unsigned long xu_getcolor(struct screen_ctx *, char *);
int xu_getprop(Window, Atom, Atom, long, u_char **); int xu_getprop(Window, Atom, Atom, long, u_char **);

34
conf.c
View File

@ -81,37 +81,9 @@ conf_color(struct conf *c, struct screen_ctx *sc)
{ {
int i; int i;
for (i = 0; i < CWM_COLOR_MAX; i++) { for (i = 0; i < CWM_COLOR_MAX; i++)
xu_freecolor(sc, sc->color[i].pixel);
sc->color[i].pixel = xu_getcolor(sc, c->color[i].name); 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 { static struct {
char *key; char *key;
@ -148,7 +120,7 @@ static struct {
{ "CM-equal", "vmaximize" }, { "CM-equal", "vmaximize" },
{ "CMS-equal", "hmaximize" }, { "CMS-equal", "hmaximize" },
{ "CMS-f", "freeze" }, { "CMS-f", "freeze" },
{ "CMS-r", "reload" }, { "CMS-r", "restart" },
{ "CMS-q", "quit" }, { "CMS-q", "quit" },
{ "M-h", "moveleft" }, { "M-h", "moveleft" },
{ "M-j", "movedown" }, { "M-j", "movedown" },
@ -375,7 +347,7 @@ static struct {
{ "vmaximize", kbfunc_client_vmaximize, KBFLAG_NEEDCLIENT, {0} }, { "vmaximize", kbfunc_client_vmaximize, KBFLAG_NEEDCLIENT, {0} },
{ "hmaximize", kbfunc_client_hmaximize, KBFLAG_NEEDCLIENT, {0} }, { "hmaximize", kbfunc_client_hmaximize, KBFLAG_NEEDCLIENT, {0} },
{ "freeze", kbfunc_client_freeze, 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} }, { "quit", kbfunc_quit_wm, 0, {0} },
{ "exec", kbfunc_exec, 0, {.i = CWM_EXEC_PROGRAM} }, { "exec", kbfunc_exec, 0, {.i = CWM_EXEC_PROGRAM} },
{ "exec_wm", kbfunc_exec, 0, {.i = CWM_EXEC_WM} }, { "exec_wm", kbfunc_exec, 0, {.i = CWM_EXEC_WM} },

5
cwm.1
View File

@ -14,7 +14,7 @@
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\" .\"
.Dd $Mdocdate: May 7 2012 $ .Dd $Mdocdate: May 9 2012 $
.Dt CWM 1 .Dt CWM 1
.Os .Os
.Sh NAME .Sh NAME
@ -116,7 +116,8 @@ dialog; allows you to switch from
.Nm .Nm
to another window manager without restarting the X server. to another window manager without restarting the X server.
.It Ic CMS-r .It Ic CMS-r
Reload configuration. Restart the running
.Xr cwm 1 .
.It Ic CMS-q .It Ic CMS-q
Quit Quit
.Nm . .Nm .

View File

@ -14,7 +14,7 @@
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\" .\"
.Dd $Mdocdate: July 6 2012 $ .Dd $Mdocdate: October 28 2012 $
.Dt CWMRC 5 .Dt CWMRC 5
.Os .Os
.Sh NAME .Sh NAME
@ -269,8 +269,9 @@ mousebind M-3 window_resize
.Ed .Ed
.Sh BIND COMMAND LIST .Sh BIND COMMAND LIST
.Bl -tag -width 18n -compact .Bl -tag -width 18n -compact
.It reload .It restart
Reload configuration. Restart the running
.Xr cwm 1 .
.It quit .It quit
Quit Quit
.Xr cwm 1 . .Xr cwm 1 .

5
font.c
View File

@ -51,16 +51,11 @@ font_height(struct screen_ctx *sc)
void void
font_init(struct screen_ctx *sc, const char *color) font_init(struct screen_ctx *sc, const char *color)
{ {
if (sc->xftdraw)
XftDrawDestroy(sc->xftdraw);
sc->xftdraw = XftDrawCreate(X_Dpy, sc->rootwin, sc->xftdraw = XftDrawCreate(X_Dpy, sc->rootwin,
DefaultVisual(X_Dpy, sc->which), DefaultColormap(X_Dpy, sc->which)); DefaultVisual(X_Dpy, sc->which), DefaultColormap(X_Dpy, sc->which));
if (sc->xftdraw == NULL) if (sc->xftdraw == NULL)
errx(1, "XftDrawCreate"); 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), if (!XftColorAllocName(X_Dpy, DefaultVisual(X_Dpy, sc->which),
DefaultColormap(X_Dpy, sc->which), color, &sc->xftcolor)) DefaultColormap(X_Dpy, sc->which), color, &sc->xftcolor))
errx(1, "XftColorAllocName"); errx(1, "XftColorAllocName");

View File

@ -35,6 +35,7 @@
#define KNOWN_HOSTS ".ssh/known_hosts" #define KNOWN_HOSTS ".ssh/known_hosts"
#define HASH_MARKER "|1|" #define HASH_MARKER "|1|"
extern char **cwm_argv;
extern sig_atomic_t xev_quit; extern sig_atomic_t xev_quit;
void void
@ -490,7 +491,8 @@ kbfunc_quit_wm(struct client_ctx *cc, union arg *arg)
} }
void 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);
} }

4
menu.c
View File

@ -77,8 +77,6 @@ menu_init(struct screen_ctx *sc)
{ {
XGCValues gv; XGCValues gv;
if (sc->menuwin)
XDestroyWindow(X_Dpy, sc->menuwin);
sc->menuwin = XCreateSimpleWindow(X_Dpy, sc->rootwin, 0, 0, 1, 1, sc->menuwin = XCreateSimpleWindow(X_Dpy, sc->rootwin, 0, 0, 1, 1,
Conf.bwidth, Conf.bwidth,
sc->color[CWM_COLOR_FG_MENU].pixel, 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.background = sc->color[CWM_COLOR_BG_MENU].pixel;
gv.function = GXxor; gv.function = GXxor;
if (sc->gc)
XFreeGC(X_Dpy, sc->gc);
sc->gc = XCreateGC(X_Dpy, sc->menuwin, sc->gc = XCreateGC(X_Dpy, sc->menuwin,
GCForeground|GCBackground|GCFunction, &gv); GCForeground|GCBackground|GCFunction, &gv);
} }

View File

@ -429,9 +429,3 @@ xu_getcolor(struct screen_ctx *sc, char *name)
return (color.pixel); return (color.pixel);
} }
void
xu_freecolor(struct screen_ctx *sc, unsigned long pixel)
{
XFreeColors(X_Dpy, DefaultColormap(X_Dpy, sc->which), &pixel, 1, 0L);
}