]> Dogcows Code - chaz/openbox/blobdiff - src/openbox.cc
hack so text shows up
[chaz/openbox] / src / openbox.cc
index 499e5a1c3eeba5c12250e0d7d9b6b9677f3045ae..d2ce85fd2b990697e9e37637b60e5241e621fdba 100644 (file)
@@ -95,6 +95,7 @@ Openbox::Openbox(int argc, char **argv)
   _focused_client = 0;
   _sync = false;
   _single = false;
+  _remote = false;
 
   parseCommandLine(argc, argv);
 
@@ -131,24 +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]);
-  
-  // run the user's script or the system defaults if that fails
-  bool pyerr = false;
-  if (!python_exec(_scriptfilepath.c_str())) {
-    pyerr = true;
-
-    // reset all the python stuff
-    _bindings->removeAllKeys();
-    _bindings->removeAllButtons();
-    _bindings->removeAllEvents();
-    
-    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;
@@ -163,43 +149,60 @@ 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);
   
   _state = State_Normal; // done starting
-
-  if (pyerr) {
-    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);
-    dia.addButton(otk::DialogButton("OK", true));
-    dia.show();
-    dia.focus();
-    dia.run();
-  }
 }
 
 
@@ -248,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);
@@ -279,7 +284,8 @@ void Openbox::showHelp()
   // print program usage and command line options
   printf(_("Usage: %s [OPTIONS...]\n\
   Options:\n\
-  -display <string>  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 <string>       use alternate resource file.\n\
   -menu <string>     use alternate menu file.\n\
@@ -323,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
This page took 0.028077 seconds and 4 git commands to generate.