aboutsummaryrefslogtreecommitdiffstats
path: root/calmwm.c
diff options
context:
space:
mode:
authorokan2015-09-16 17:58:25 +0000
committerokan2015-09-16 17:58:25 +0000
commitea3954427e3e3453eba49e302bf4e3a0272b172e (patch)
tree6c8c6c794afa080f95f35faa5c8ba69a756d4a90 /calmwm.c
parent7d8a5a92b3e6bba227470f31a83772cf42b00fa9 (diff)
downloadcwm-ea3954427e3e3453eba49e302bf4e3a0272b172e.tar.gz
On execwm, we should properly release resources before exec'ing into a
new window manager; so allow CWM_EXEC_WM to assign new wm to wm_argv and pass through cwm_status (now EXECWM) so that x_teardown() gets called before exec'ing the new window manager. Removes the need for a separate x_restart() now, using new wm_argv; and consolidates errno for execvp.
Diffstat (limited to 'calmwm.c')
-rw-r--r--calmwm.c18
1 files changed, 5 insertions, 13 deletions
diff --git a/calmwm.c b/calmwm.c
index f0d009b..c0e93fe 100644
--- a/calmwm.c
+++ b/calmwm.c
@@ -15,7 +15,7 @@
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
- * $OpenBSD: calmwm.c,v 1.93 2015/01/19 14:54:16 okan Exp $
+ * $OpenBSD: calmwm.c,v 1.94 2015/09/16 17:58:25 okan Exp $
*/
#include <sys/types.h>
@@ -46,12 +46,12 @@ struct screen_ctx_q Screenq = TAILQ_HEAD_INITIALIZER(Screenq);
int HasRandr, Randr_ev;
struct conf Conf;
const char *homedir;
+char *wm_argv;
volatile sig_atomic_t cwm_status;
static void sighdlr(int);
static int x_errorhandler(Display *, XErrorEvent *);
static void x_init(const char *);
-static void x_restart(char **);
static void x_teardown(void);
static int x_wmerrorhandler(Display *, XErrorEvent *);
@@ -60,7 +60,6 @@ main(int argc, char **argv)
{
const char *conf_file = NULL;
char *conf_path, *display_name = NULL;
- char **cwm_argv;
int ch;
struct passwd *pw;
@@ -68,7 +67,7 @@ main(int argc, char **argv)
warnx("no locale support");
mbtowc(NULL, NULL, MB_CUR_MAX);
- cwm_argv = argv;
+ wm_argv = u_argv(argv);
while ((ch = getopt(argc, argv, "c:d:")) != -1) {
switch (ch) {
case 'c':
@@ -117,8 +116,8 @@ main(int argc, char **argv)
while (cwm_status == CWM_RUNNING)
xev_process();
x_teardown();
- if (cwm_status == CWM_RESTART)
- x_restart(cwm_argv);
+ if (cwm_status == CWM_EXECWM)
+ u_exec(wm_argv);
return(0);
}
@@ -146,13 +145,6 @@ x_init(const char *dpyname)
}
static void
-x_restart(char **args)
-{
- (void)setsid();
- (void)execvp(args[0], args);
-}
-
-static void
x_teardown(void)
{
struct screen_ctx *sc;