_focused_client = 0;
_sync = false;
_single = false;
+ _remote = false;
parseCommandLine(argc, 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;
_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();
- }
}
_sync = true;
} else if (arg == "-single") {
_single = true;
+ } else if (arg == "-remote") {
+ _remote = true;
} else if (arg == "-version") {
showVersion();
::exit(0);
// 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\
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