X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fmain.cc;h=83cbf516103d5fbb5bfe195b76b34590e6665200;hb=1da8531a7b4eea22592b6d0760352d2a34e9b6b0;hp=a422563d72d9e9cb504816598349be50ca9e5241;hpb=2aff07a250930db7e0eb69dd6cd776333fcb8b9a;p=chaz%2Fopenbox diff --git a/src/main.cc b/src/main.cc index a422563d..83cbf516 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 @@ -30,6 +36,23 @@ int main(int argc, char **argv) { bind_textdomain_codeset(PACKAGE, "UTF-8"); textdomain(PACKAGE); - ob::Openbox openbox(argc, argv); - openbox.eventLoop(); + ob::Openbox *openbox = new ob::Openbox(argc, argv); + openbox->eventLoop(); + + if (openbox->doRestart()) { + std::string prog = openbox->restartProgram(); + + delete openbox; // shutdown the current one! + + 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); + } + + delete openbox; // shutdown }