From e2069b5792a80ba8ccfd03c9d1bdd5e364dbee10 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Mon, 3 Feb 2003 00:06:46 +0000 Subject: move the restart into main.cc, so the openbox class can clean up properly before the restart --- src/main.cc | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'src/main.cc') diff --git a/src/main.cc b/src/main.cc index a422563d..e59749aa 100644 --- a/src/main.cc +++ b/src/main.cc @@ -17,10 +17,16 @@ extern "C" { # include #endif // HAVE_STDIO_H +#ifdef HAVE_UNISTD_H +# include +# include +#endif // HAVE_UNISTD_H + #include "gettext.h" } #include "openbox.hh" +#include "otk/util.hh" int main(int argc, char **argv) { // initialize the locale @@ -32,4 +38,16 @@ int main(int argc, char **argv) { ob::Openbox openbox(argc, argv); openbox.eventLoop(); + + if (openbox.doRestart()) { + const std::string &prog = openbox.restartProgram(); + if (!prog.empty()) { + execl("/bin/sh", "/bin/sh", "-c", prog.c_str(), NULL); + perror(prog.c_str()); + } + + // fall back in case the above execlp doesn't work + execvp(argv[0], argv); + execvp(otk::basename(argv[0]).c_str(), argv); + } } -- cgit v1.2.3