History

Fixed script editor crash when script calls Script.stop(). Also made the processEraseMessage wait until it can lock to ensure particles are deleted.

barnold1953 committed 12 years ago

Commit 5013c8c1 parent 4036f924 files · +22 −10Browse files

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

Unified · Split

interface/src/ui/ScriptEditorWidget.cpp+10−0
@@ -57,6 +57,11 @@ void ScriptEditorWidget::onScriptModified() { · 56 unmodified lines
5757 }
5858 }
5959
60+void ScriptEditorWidget::onScriptEnding() {
61+ // signals will automatically be disonnected when the _scriptEngine is deleted later
62+ _scriptEngine = NULL;
63+}
64+
6065 bool ScriptEditorWidget::isModified() {
6166 return _scriptEditorWidgetUI->scriptEdit->document()->isModified();
6267 }
@@ -69,11 +74,13 @@ bool ScriptEditorWidget::setRunning(bool run) { · 6 unmodified lines
6974 if (run && !save()) {
7075 return false;
7176 }
77+
7278 // Clean-up old connections.
7379 if (_scriptEngine != NULL) {
7480 disconnect(_scriptEngine, &ScriptEngine::runningStateChanged, this, &ScriptEditorWidget::runningStateChanged);
7581 disconnect(_scriptEngine, &ScriptEngine::errorMessage, this, &ScriptEditorWidget::onScriptError);
7682 disconnect(_scriptEngine, &ScriptEngine::printedMessage, this, &ScriptEditorWidget::onScriptPrint);
83+ disconnect(_scriptEngine, &ScriptEngine::scriptEnding, this, &ScriptEditorWidget::onScriptEnding);
7784 }
7885
7986 if (run) {
@@ -83,6 +90,7 @@ bool ScriptEditorWidget::setRunning(bool run) { · 3 unmodified lines
8390 // Make new connections.
8491 connect(_scriptEngine, &ScriptEngine::errorMessage, this, &ScriptEditorWidget::onScriptError);
8592 connect(_scriptEngine, &ScriptEngine::printedMessage, this, &ScriptEditorWidget::onScriptPrint);
93+ connect(_scriptEngine, &ScriptEngine::scriptEnding, this, &ScriptEditorWidget::onScriptEnding);
8694 } else {
8795 Application::getInstance()->stopScript(_currentScript);
8896 _scriptEngine = NULL;
@@ -125,6 +133,7 @@ void ScriptEditorWidget::loadFile(const QString& scriptPath) { · 36 unmodified lines
125133 disconnect(_scriptEngine, &ScriptEngine::runningStateChanged, this, &ScriptEditorWidget::runningStateChanged);
126134 disconnect(_scriptEngine, &ScriptEngine::errorMessage, this, &ScriptEditorWidget::onScriptError);
127135 disconnect(_scriptEngine, &ScriptEngine::printedMessage, this, &ScriptEditorWidget::onScriptPrint);
136+ disconnect(_scriptEngine, &ScriptEngine::scriptEnding, this, &ScriptEditorWidget::onScriptEnding);
128137 }
129138 } else {
130139 QNetworkAccessManager* networkManager = new QNetworkAccessManager(this);
@@ -144,6 +153,7 @@ void ScriptEditorWidget::loadFile(const QString& scriptPath) { · 13 unmodified lines
144153 connect(_scriptEngine, &ScriptEngine::runningStateChanged, this, &ScriptEditorWidget::runningStateChanged);
145154 connect(_scriptEngine, &ScriptEngine::errorMessage, this, &ScriptEditorWidget::onScriptError);
146155 connect(_scriptEngine, &ScriptEngine::printedMessage, this, &ScriptEditorWidget::onScriptPrint);
156+ connect(_scriptEngine, &ScriptEngine::scriptEnding, this, &ScriptEditorWidget::onScriptEnding);
147157 }
148158 }
149159