X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fmain.cc;h=13047780fafa0175b9715a31609d54b12d0d7147;hb=7d215bd255d0744101b9ceb52c235bdc985fa034;hp=5d878d79c7f0053e6d9425c55240d4e523dd6b0b;hpb=5f78b51429b204f89b654d634bb4cc8cb78b95f6;p=chaz%2Fopenbox diff --git a/src/main.cc b/src/main.cc index 5d878d79..13047780 100644 --- a/src/main.cc +++ b/src/main.cc @@ -1,44 +1,51 @@ -// -*- mode: C++; indent-tabs-mode: nil; -*- +// -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*- /*! @file main.cc @brief Main entry point for the application */ -#ifdef HAVE_CONFIG_H -# include "../config.h" -#endif // HAVE_CONFIG_H +#include "config.h" extern "C" { -#ifdef HAVE_LOCALE_H -# include -#endif // HAVE_LOCALE_H - -#include +#ifdef HAVE_UNISTD_H +# include +# include +#endif // HAVE_UNISTD_H #include "gettext.h" } -#include -using std::string; - -#include "blackbox.hh" #include "openbox.hh" +#include "otk/util.hh" -void main_prog(int argc, char **argv) { - ob::Openbox openbox(argc, argv); - //ob::Blackbox blackbox(argc, argv, 0); - - //Blackbox blackbox(argv, session_display, rc_file); - openbox.eventLoop(); -} +#include +#include 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(PACKAGE, "UTF-8"); textdomain(PACKAGE); - // start up guile - //gh_enter(argc, argv, main_prog); - main_prog(argc, argv); + 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 }