X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fmain.cc;h=13047780fafa0175b9715a31609d54b12d0d7147;hb=7d215bd255d0744101b9ceb52c235bdc985fa034;hp=6ebd99467c05c2caf652dc05c24db6ccf52db2b7;hpb=e5d6ed912c02df480eb1678a6005b7adb2e5e7f2;p=chaz%2Fopenbox diff --git a/src/main.cc b/src/main.cc index 6ebd9946..13047780 100644 --- a/src/main.cc +++ b/src/main.cc @@ -1,193 +1,51 @@ -// -*- mode: C++; indent-tabs-mode: nil; -*- -// main.cc for Blackbox - an X11 Window manager -// Copyright (c) 2001 - 2002 Sean 'Shaleh' Perry -// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net) -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the "Software"), -// to deal in the Software without restriction, including without limitation -// the rights to use, copy, modify, merge, publish, distribute, sublicense, -// and/or sell copies of the Software, and to permit persons to whom the -// Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. +// -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*- -#include "../version.h" +/*! @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_STDIO_H -# include -#endif // HAVE_STDIO_H - -#ifdef HAVE_STDLIB_H -# include -#endif // HAVE_STDLIB_H - -#ifdef HAVE_STRING_H -# include -#endif // HAVE_STRING_H - #ifdef HAVE_UNISTD_H -#include +# include +# include #endif // HAVE_UNISTD_H -#ifdef HAVE_SYS_PARAM_H -# include -#endif // HAVE_SYS_PARAM_H +#include "gettext.h" } -#include -using std::string; - -#include "i18n.hh" -#include "blackbox.hh" - - -I18n i18n; // initialized in main - -static void showHelp(int exitval) { - // print program usage and command line options - printf(i18n(mainSet, mainUsage, - "Openbox %s : (c) 2002 - 2002 Ben Jansens\n" - " 2001 - 2002 Sean 'Shaleh' Perry\n" - " 1997 - 2000, 2002 Brad Hughes\n\n" - " -display \t\tuse display connection.\n" - " -rc \t\t\tuse alternate resource file.\n" - " -menu \t\tuse alternate menu file.\n" - " -version\t\t\tdisplay version and exit.\n" - " -help\t\t\t\tdisplay this help text and exit.\n\n"), - __openbox_version); +#include "openbox.hh" +#include "otk/util.hh" - // some people have requested that we print out compile options - // as well - printf(i18n(mainSet, mainCompileOptions, - "Compile time options:\n" - " Debugging:\t\t\t%s\n" - " Shape:\t\t\t%s\n" - " Slit:\t\t\t\t%s\n" - " Event Clobbering:\t\t%s\n" - " 8bpp Ordered Dithering:\t%s\n\n"), -#ifdef DEBUG - i18n(CommonSet, CommonYes, "yes"), -#else // !DEBUG - i18n(CommonSet, CommonNo, "no"), -#endif // DEBUG - -#ifdef SHAPE - i18n(CommonSet, CommonYes, "yes"), -#else // !SHAPE - i18n(CommonSet, CommonNo, "no"), -#endif // SHAPE - -#ifdef SLIT - i18n(CommonSet, CommonYes, "yes"), -#else // !SLIT - i18n(CommonSet, CommonNo, "no"), -#endif // SLIT - -#ifndef NOCLOBBER - i18n(CommonSet, CommonYes, "yes"), -#else // !NOCLOBBER - i18n(CommonSet, CommonNo, "no"), -#endif // NOCLOBBER - -#ifdef ORDEREDPSEUDO - i18n(CommonSet, CommonYes, "yes") -#else // !ORDEREDPSEUDO - i18n(CommonSet, CommonNo, "no") -#endif // ORDEREDPSEUDO - ); - - ::exit(exitval); -} +#include +#include int main(int argc, char **argv) { - char *session_display = (char *) 0; - char *rc_file = (char *) 0; - char *menu_file = (char *) 0; - - i18n.openCatalog("blackbox.cat"); - - for (int i = 1; i < argc; ++i) { - if (! strcmp(argv[i], "-rc")) { - // look for alternative rc file to use - - if ((++i) >= argc) { - fprintf(stderr, - i18n(mainSet, mainRCRequiresArg, - "error: '-rc' requires and argument\n")); - - ::exit(1); - } - - rc_file = argv[i]; - } else if (! strcmp(argv[i], "-menu")) { - // look for alternative menu file to use - - if ((++i) >= argc) { - fprintf(stderr, - i18n(mainSet, mainMENURequiresArg, - "error: '-menu' requires and argument\n")); - - ::exit(1); - } - - menu_file = argv[i]; - } else if (! strcmp(argv[i], "-display")) { - // check for -display option... to run on a display other than the one - // set by the environment variable DISPLAY - - if ((++i) >= argc) { - fprintf(stderr, - i18n(mainSet, mainDISPLAYRequiresArg, - "error: '-display' requires an argument\n")); - - ::exit(1); - } - - session_display = argv[i]; - string dtmp = "DISPLAY="; - dtmp += session_display; - - if (putenv(const_cast(dtmp.c_str()))) { - fprintf(stderr, i18n(mainSet, mainWarnDisplaySet, - "warning: couldn't set environment variable 'DISPLAY'\n")); - perror("putenv()"); - } - } else if (! strcmp(argv[i], "-version")) { - // print current version string - printf("Openbox %s : (c) 2002 - 2002 Ben Jansens\n" - " 2001 - 2002 Sean 'Shaleh' Perry\n" - " 1997 - 2000, 2002 Brad Hughes\n\n", - __openbox_version); - - ::exit(0); - } else if (! strcmp(argv[i], "-help")) { - showHelp(0); - } else { // invalid command line option - showHelp(-1); + // initialize the locale + if (!setlocale(LC_ALL, "")) + printf("Couldn't set locale from environment.\n"); + bindtextdomain(PACKAGE, LOCALEDIR); + bind_textdomain_codeset(PACKAGE, "UTF-8"); + textdomain(PACKAGE); + + 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); } -#ifdef __EMX__ - _chdir2(getenv("X11ROOT")); -#endif // __EMX__ - - Blackbox blackbox(argv, session_display, rc_file, menu_file); - blackbox.eventLoop(); - - return(0); + delete openbox; // shutdown }