X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=src%2Fmain.cc;h=e59749aa6cfc22184a7e05f975f3b3626d53241b;hb=e2069b5792a80ba8ccfd03c9d1bdd5e364dbee10;hp=94fefacc459c7d0001f376edd9342357ccbaf6d1;hpb=88dbe7c24863ebb77446a1e2b7c3ceb46422a89c;p=chaz%2Fopenbox diff --git a/src/main.cc b/src/main.cc index 94fefacc..e59749aa 100644 --- a/src/main.cc +++ b/src/main.cc @@ -13,18 +13,41 @@ extern "C" { # include #endif // HAVE_LOCALE_H +#ifdef HAVE_STDIO_H +# 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 - setlocale(LC_ALL, ""); + if (!setlocale(LC_ALL, "")) + printf("Couldn't set locale from environment.\n"); bindtextdomain(PACKAGE, LOCALEDIR); - bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); + bind_textdomain_codeset(PACKAGE, "UTF-8"); textdomain(PACKAGE); 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); + } }