History

Fix Script Editor run-on-the-fly crashing

Wait for script engine to stop before restarting.

David Rowe committed 12 years ago

Commit 48fb1561 parent 9449ad72 files · +14 −2Browse files

Showing the changes to interface/src/ui/ScriptEditorWidget.cpp (1 of 2 files). Show all

Unified · Split

interface/src/ui/ScriptEditorWidget.cpp+12−2
@@ -28,7 +28,8 @@ · 27 unmodified lines
2828
2929 ScriptEditorWidget::ScriptEditorWidget() :
3030 _scriptEditorWidgetUI(new Ui::ScriptEditorWidget),
31− _scriptEngine(NULL)
31+ _scriptEngine(NULL),
32+ _isRestarting(false)
3233 {
3334 _scriptEditorWidgetUI->setupUi(this);
3435
@@ -52,8 +53,9 @@ ScriptEditorWidget::~ScriptEditorWidget() { · 17 unmodified lines
5253
5354 void ScriptEditorWidget::onScriptModified() {
5455 if(_scriptEditorWidgetUI->onTheFlyCheckBox->isChecked() && isRunning()) {
56+ _isRestarting = true;
5557 setRunning(false);
56− setRunning(true);
58+ // Script is restarted once current script instance finishes.
5759 }
5860 }
5961
@@ -62,6 +64,13 @@ void ScriptEditorWidget::onScriptEnding() { · 2 unmodified lines
6264 _scriptEngine = NULL;
6365 }
6466
67+void ScriptEditorWidget::onScriptFinished(const QString& scriptPath) {
68+ if (_isRestarting) {
69+ _isRestarting = false;
70+ setRunning(true);
71+ }
72+}
73+
6574 bool ScriptEditorWidget::isModified() {
6675 return _scriptEditorWidgetUI->scriptEdit->document()->isModified();
6776 }
@@ -93,6 +102,7 @@ bool ScriptEditorWidget::setRunning(bool run) { · 25 unmodified lines
93102 connect(_scriptEngine, &ScriptEngine::printedMessage, this, &ScriptEditorWidget::onScriptPrint);
94103 connect(_scriptEngine, &ScriptEngine::scriptEnding, this, &ScriptEditorWidget::onScriptEnding);
95104 } else {
105+ connect(_scriptEngine, &ScriptEngine::finished, this, &ScriptEditorWidget::onScriptFinished);
96106 Application::getInstance()->stopScript(_currentScript);
97107 _scriptEngine = NULL;
98108 }