order things to work correctly for now, with the python loading and the the config setting

This commit is contained in:
Dana Jansens 2003-02-16 18:09:06 +00:00
parent 2cbb95c3db
commit 893faed7b1

View file

@ -131,22 +131,6 @@ Openbox::Openbox(int argc, char **argv)
_cursors.ul_angle = XCreateFontCursor(**otk::display, XC_ul_angle); _cursors.ul_angle = XCreateFontCursor(**otk::display, XC_ul_angle);
_cursors.ur_angle = XCreateFontCursor(**otk::display, XC_ur_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 // initialize all the screens
_focused_screen = 0; _focused_screen = 0;
@ -177,29 +161,71 @@ Openbox::Openbox(int argc, char **argv)
} }
ScreenList::iterator it, end = _screens.end(); ScreenList::iterator it, end = _screens.end();
// run the user's script or the system defaults if that fails
bool pyerr, doretry;
do {
// initialize scripting
python_init(argv[0]);
// load all of the screens' configs here so we have a theme set if
// we decide to show the dialog below
for (it = _screens.begin(); it != end; ++it)
(*it)->config().load(); // load the defaults from config.py
pyerr = doretry = false;
// reset all the python stuff
_bindings->removeAllKeys();
_bindings->removeAllButtons();
_bindings->removeAllEvents();
int ret = python_exec(_scriptfilepath.c_str());
if (ret == 2)
pyerr = true;
if (ret) {
// reset all the python stuff
_bindings->removeAllKeys();
_bindings->removeAllButtons();
_bindings->removeAllEvents();
if (python_exec(SCRIPTDIR"/defaults.py")) // system default bahaviors
pyerr = true;
}
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);
otk::DialogButton ok(_("Okay"), true);
otk::DialogButton retry(_("Retry"));
dia.addButton(ok);
dia.addButton(retry);
dia.show();
dia.focus();
const otk::DialogButton &res = dia.run();
if (res == retry) {
doretry = true;
python_destroy(); // kill all the python modules so they reinit right
}
}
} while (pyerr && doretry);
for (it = _screens.begin(); it != end; ++it) { for (it = _screens.begin(); it != end; ++it) {
(*it)->config().load(); // load the config as the scripts may change it
(*it)->manageExisting(); (*it)->manageExisting();
} }
// grab any keys set up before the screens existed // grab any keys set up before the screens existed
_bindings->grabKeys(true); //_bindings->grabKeys(true);
// set up input focus // set up input focus
setFocusedClient(0); setFocusedClient(0);
_state = State_Normal; // done starting _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();
}
} }