Fix Script Editor run-on-the-fly crashing

Wait for script engine to stop before restarting.
This commit is contained in:
David Rowe 2014-06-29 19:47:00 -07:00
parent 9449ad7192
commit 48fb156e28
2 changed files with 14 additions and 2 deletions

View file

@ -28,7 +28,8 @@
ScriptEditorWidget::ScriptEditorWidget() :
_scriptEditorWidgetUI(new Ui::ScriptEditorWidget),
_scriptEngine(NULL)
_scriptEngine(NULL),
_isRestarting(false)
{
_scriptEditorWidgetUI->setupUi(this);
@ -52,8 +53,9 @@ ScriptEditorWidget::~ScriptEditorWidget() {
void ScriptEditorWidget::onScriptModified() {
if(_scriptEditorWidgetUI->onTheFlyCheckBox->isChecked() && isRunning()) {
_isRestarting = true;
setRunning(false);
setRunning(true);
// Script is restarted once current script instance finishes.
}
}
@ -62,6 +64,13 @@ void ScriptEditorWidget::onScriptEnding() {
_scriptEngine = NULL;
}
void ScriptEditorWidget::onScriptFinished(const QString& scriptPath) {
if (_isRestarting) {
_isRestarting = false;
setRunning(true);
}
}
bool ScriptEditorWidget::isModified() {
return _scriptEditorWidgetUI->scriptEdit->document()->isModified();
}
@ -93,6 +102,7 @@ bool ScriptEditorWidget::setRunning(bool run) {
connect(_scriptEngine, &ScriptEngine::printedMessage, this, &ScriptEditorWidget::onScriptPrint);
connect(_scriptEngine, &ScriptEngine::scriptEnding, this, &ScriptEditorWidget::onScriptEnding);
} else {
connect(_scriptEngine, &ScriptEngine::finished, this, &ScriptEditorWidget::onScriptFinished);
Application::getInstance()->stopScript(_currentScript);
_scriptEngine = NULL;
}

View file

@ -47,11 +47,13 @@ private slots:
void onScriptPrint(const QString& message);
void onScriptModified();
void onScriptEnding();
void onScriptFinished(const QString& scriptName);
private:
Ui::ScriptEditorWidget* _scriptEditorWidgetUI;
ScriptEngine* _scriptEngine;
QString _currentScript;
bool _isRestarting;
};
#endif // hifi_ScriptEditorWidget_h