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
28 28
29ScriptEditorWidget::ScriptEditorWidget() :29ScriptEditorWidget::ScriptEditorWidget() :
30 _scriptEditorWidgetUI(new Ui::ScriptEditorWidget),30 _scriptEditorWidgetUI(new Ui::ScriptEditorWidget),
31 _scriptEngine(NULL)31 _scriptEngine(NULL),
32 _isRestarting(false)
32{33{
33 _scriptEditorWidgetUI->setupUi(this);34 _scriptEditorWidgetUI->setupUi(this);
34 35
@@ -52,8 +53,9 @@ ScriptEditorWidget::~ScriptEditorWidget() { · 17 unmodified lines
52 53
53void ScriptEditorWidget::onScriptModified() {54void ScriptEditorWidget::onScriptModified() {
54 if(_scriptEditorWidgetUI->onTheFlyCheckBox->isChecked() && isRunning()) {55 if(_scriptEditorWidgetUI->onTheFlyCheckBox->isChecked() && isRunning()) {
56 _isRestarting = true;
55 setRunning(false);57 setRunning(false);
56 setRunning(true);58 // Script is restarted once current script instance finishes.
57 }59 }
58}60}
59 61
@@ -62,6 +64,13 @@ void ScriptEditorWidget::onScriptEnding() { · 2 unmodified lines
62 _scriptEngine = NULL;64 _scriptEngine = NULL;
63}65}
64 66
67void ScriptEditorWidget::onScriptFinished(const QString& scriptPath) {
68 if (_isRestarting) {
69 _isRestarting = false;
70 setRunning(true);
71 }
72}
73
65bool ScriptEditorWidget::isModified() {74bool ScriptEditorWidget::isModified() {
66 return _scriptEditorWidgetUI->scriptEdit->document()->isModified();75 return _scriptEditorWidgetUI->scriptEdit->document()->isModified();
67}76}
@@ -93,6 +102,7 @@ bool ScriptEditorWidget::setRunning(bool run) { · 25 unmodified lines
93 connect(_scriptEngine, &ScriptEngine::printedMessage, this, &ScriptEditorWidget::onScriptPrint);102 connect(_scriptEngine, &ScriptEngine::printedMessage, this, &ScriptEditorWidget::onScriptPrint);
94 connect(_scriptEngine, &ScriptEngine::scriptEnding, this, &ScriptEditorWidget::onScriptEnding);103 connect(_scriptEngine, &ScriptEngine::scriptEnding, this, &ScriptEditorWidget::onScriptEnding);
95 } else {104 } else {
105 connect(_scriptEngine, &ScriptEngine::finished, this, &ScriptEditorWidget::onScriptFinished);
96 Application::getInstance()->stopScript(_currentScript);106 Application::getInstance()->stopScript(_currentScript);
97 _scriptEngine = NULL;107 _scriptEngine = NULL;
98 }108 }