X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fopenbox.cc;h=d2ce85fd2b990697e9e37637b60e5241e621fdba;hb=7f561a6a7acee71d55eecc9ed2bd278147ce2536;hp=d068880baf08e8c1a6d66c2dc3adc5fea180419b;hpb=7fe3301e7ea905a8a76d54c22751f3d8a346e28b;p=chaz%2Fopenbox diff --git a/src/openbox.cc b/src/openbox.cc index d068880b..d2ce85fd 100644 --- a/src/openbox.cc +++ b/src/openbox.cc @@ -14,6 +14,7 @@ #include "otk/util.hh" #include "otk/rendercolor.hh" #include "otk/renderstyle.hh" +#include "otk/messagedialog.hh" extern "C" { #include @@ -94,6 +95,7 @@ Openbox::Openbox(int argc, char **argv) _focused_client = 0; _sync = false; _single = false; + _remote = false; parseCommandLine(argc, argv); @@ -130,20 +132,9 @@ Openbox::Openbox(int argc, char **argv) _cursors.ul_angle = XCreateFontCursor(**otk::display, XC_ul_angle); _cursors.ur_angle = XCreateFontCursor(**otk::display, XC_ur_angle); - // initialize scripting - python_init(argv[0]); - - // load config values - //python_exec(SCRIPTDIR"/config.py"); // load openbox config values - // run all of the python scripts - //python_exec(SCRIPTDIR"/builtins.py"); // builtin callbacks - //python_exec(SCRIPTDIR"/focus.py"); // focus helpers - // run the user's script or the system defaults if that fails - if (!python_exec(_scriptfilepath.c_str())) - python_exec(SCRIPTDIR"/defaults.py"); // system default bahaviors - // initialize all the screens _focused_screen = 0; + _managed_count = 0; for (int i = 0, max = ScreenCount(**otk::display); i < max; ++i) { Screen *screen; @@ -158,26 +149,55 @@ Openbox::Openbox(int argc, char **argv) _screens.push_back(screen); if (!_focused_screen) // set this to the first screen managed _focused_screen = screen; + _managed_count++; } else { delete screen; _screens.push_back(0); } } - assert(_focused_screen); - - if (_screens.empty()) { + if (!_managed_count) { printf(_("No screens were found without a window manager. Exiting.\n")); ::exit(1); } - ScreenList::iterator it, end = _screens.end(); - for (it = _screens.begin(); it != end; ++it) { - (*it)->manageExisting(); + assert(_focused_screen); + + // initialize scripting + python_init(argv[0]); + + // load the theme XXX TEMP SHIT + otk::RenderStyle::setStyle(0, ""); + + int ret = python_exec(_scriptfilepath.c_str()); + if (ret == 2) { + std::string msg; + msg += _("An error occured while executing the python scripts."); + msg += "\n\n"; + msg += _("See the exact error message in Openbox's output for details."); + otk::MessageDialog dia(this, _("Python Error"), msg); + otk::DialogButton ok(_("Okay"), true); + otk::DialogButton retry(_("Restart")); + dia.addButton(ok); + dia.addButton(retry); + dia.show(); + dia.focus(); + const otk::DialogButton &res = dia.run(); + if (res == retry) { + _restart = _shutdown = true; + return; + } } + + if (ret) + python_exec(SCRIPTDIR"/defaults.py"); // system default bahaviors + + ScreenList::iterator it, end = _screens.end(); + for (it = _screens.begin(); it != end; ++it) + if (*it) (*it)->manageExisting(); // grab any keys set up before the screens existed - _bindings->grabKeys(true); + //_bindings->grabKeys(true); // set up input focus setFocusedClient(0); @@ -231,6 +251,8 @@ void Openbox::parseCommandLine(int argc, char **argv) _sync = true; } else if (arg == "-single") { _single = true; + } else if (arg == "-remote") { + _remote = true; } else if (arg == "-version") { showVersion(); ::exit(0); @@ -262,7 +284,8 @@ void Openbox::showHelp() // print program usage and command line options printf(_("Usage: %s [OPTIONS...]\n\ Options:\n\ - -display use display connection.\n\ + -remote optimize for a remote (low bandwidth) connection to the\n\ + display/Xserver.\n\ -single run on a single screen (default is to run every one).\n\ -rc use alternate resource file.\n\ -menu use alternate menu file.\n\ @@ -306,8 +329,10 @@ void Openbox::showHelp() void Openbox::eventLoop() { while (true) { - dispatchEvents(); // from otk::EventDispatcher - XFlush(**otk::display); // flush here before we go wait for timers + dispatchEvents(false); // from otk::EventDispatcher +// XFlush(**otk::display); // flush here before we go wait for timers + // .. the XPending() should have done this last + // already, it does a flush when it returns 0 // don't wait if we're to shutdown if (_shutdown) break; otk::Timer::dispatchTimers(!_sync); // wait if not in sync mode