History

Rework old fix for Script Editor Script.stop() crash

David Rowe committed 12 years ago

Commit 74200781 parent 48fb1563 files · +6 −13Browse files

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

Unified · Split

interface/src/ui/ScriptEditorWidget.cpp+5−12
@@ -59,12 +59,8 @@ void ScriptEditorWidget::onScriptModified() { · 58 unmodified lines
59 }59 }
60}60}
61 61
62void ScriptEditorWidget::onScriptEnding() {
63 // signals will automatically be disonnected when the _scriptEngine is deleted later
64 _scriptEngine = NULL;
65}
66
67void ScriptEditorWidget::onScriptFinished(const QString& scriptPath) {62void ScriptEditorWidget::onScriptFinished(const QString& scriptPath) {
63 _scriptEngine = NULL;
68 if (_isRestarting) {64 if (_isRestarting) {
69 _isRestarting = false;65 _isRestarting = false;
70 setRunning(true);66 setRunning(true);
@@ -84,23 +80,20 @@ bool ScriptEditorWidget::setRunning(bool run) { · 13 unmodified lines
84 return false;80 return false;
85 }81 }
86 82
87 // Clean-up old connections.
88 if (_scriptEngine != NULL) {83 if (_scriptEngine != NULL) {
89 disconnect(_scriptEngine, &ScriptEngine::runningStateChanged, this, &ScriptEditorWidget::runningStateChanged);84 disconnect(_scriptEngine, &ScriptEngine::runningStateChanged, this, &ScriptEditorWidget::runningStateChanged);
90 disconnect(_scriptEngine, &ScriptEngine::errorMessage, this, &ScriptEditorWidget::onScriptError);85 disconnect(_scriptEngine, &ScriptEngine::errorMessage, this, &ScriptEditorWidget::onScriptError);
91 disconnect(_scriptEngine, &ScriptEngine::printedMessage, this, &ScriptEditorWidget::onScriptPrint);86 disconnect(_scriptEngine, &ScriptEngine::printedMessage, this, &ScriptEditorWidget::onScriptPrint);
92 disconnect(_scriptEngine, &ScriptEngine::scriptEnding, this, &ScriptEditorWidget::onScriptEnding);87 disconnect(_scriptEngine, &ScriptEngine::finished, this, &ScriptEditorWidget::onScriptFinished);
93 }88 }
94 89
95 if (run) {90 if (run) {
96 const QString& scriptURLString = QUrl(_currentScript).toString();91 const QString& scriptURLString = QUrl(_currentScript).toString();
97 _scriptEngine = Application::getInstance()->loadScript(scriptURLString, true);92 _scriptEngine = Application::getInstance()->loadScript(scriptURLString, true);
98 connect(_scriptEngine, &ScriptEngine::runningStateChanged, this, &ScriptEditorWidget::runningStateChanged);93 connect(_scriptEngine, &ScriptEngine::runningStateChanged, this, &ScriptEditorWidget::runningStateChanged);
99
100 // Make new connections.
101 connect(_scriptEngine, &ScriptEngine::errorMessage, this, &ScriptEditorWidget::onScriptError);94 connect(_scriptEngine, &ScriptEngine::errorMessage, this, &ScriptEditorWidget::onScriptError);
102 connect(_scriptEngine, &ScriptEngine::printedMessage, this, &ScriptEditorWidget::onScriptPrint);95 connect(_scriptEngine, &ScriptEngine::printedMessage, this, &ScriptEditorWidget::onScriptPrint);
103 connect(_scriptEngine, &ScriptEngine::scriptEnding, this, &ScriptEditorWidget::onScriptEnding);96 connect(_scriptEngine, &ScriptEngine::finished, this, &ScriptEditorWidget::onScriptFinished);
104 } else {97 } else {
105 connect(_scriptEngine, &ScriptEngine::finished, this, &ScriptEditorWidget::onScriptFinished);98 connect(_scriptEngine, &ScriptEngine::finished, this, &ScriptEditorWidget::onScriptFinished);
106 Application::getInstance()->stopScript(_currentScript);99 Application::getInstance()->stopScript(_currentScript);
@@ -144,7 +137,7 @@ void ScriptEditorWidget::loadFile(const QString& scriptPath) { · 37 unmodified lines
144 disconnect(_scriptEngine, &ScriptEngine::runningStateChanged, this, &ScriptEditorWidget::runningStateChanged);137 disconnect(_scriptEngine, &ScriptEngine::runningStateChanged, this, &ScriptEditorWidget::runningStateChanged);
145 disconnect(_scriptEngine, &ScriptEngine::errorMessage, this, &ScriptEditorWidget::onScriptError);138 disconnect(_scriptEngine, &ScriptEngine::errorMessage, this, &ScriptEditorWidget::onScriptError);
146 disconnect(_scriptEngine, &ScriptEngine::printedMessage, this, &ScriptEditorWidget::onScriptPrint);139 disconnect(_scriptEngine, &ScriptEngine::printedMessage, this, &ScriptEditorWidget::onScriptPrint);
147 disconnect(_scriptEngine, &ScriptEngine::scriptEnding, this, &ScriptEditorWidget::onScriptEnding);140 disconnect(_scriptEngine, &ScriptEngine::finished, this, &ScriptEditorWidget::onScriptFinished);
148 }141 }
149 } else {142 } else {
150 QNetworkAccessManager* networkManager = new QNetworkAccessManager(this);143 QNetworkAccessManager* networkManager = new QNetworkAccessManager(this);
@@ -165,7 +158,7 @@ void ScriptEditorWidget::loadFile(const QString& scriptPath) { · 14 unmodified lines
165 connect(_scriptEngine, &ScriptEngine::runningStateChanged, this, &ScriptEditorWidget::runningStateChanged);158 connect(_scriptEngine, &ScriptEngine::runningStateChanged, this, &ScriptEditorWidget::runningStateChanged);
166 connect(_scriptEngine, &ScriptEngine::errorMessage, this, &ScriptEditorWidget::onScriptError);159 connect(_scriptEngine, &ScriptEngine::errorMessage, this, &ScriptEditorWidget::onScriptError);
167 connect(_scriptEngine, &ScriptEngine::printedMessage, this, &ScriptEditorWidget::onScriptPrint);160 connect(_scriptEngine, &ScriptEngine::printedMessage, this, &ScriptEditorWidget::onScriptPrint);
168 connect(_scriptEngine, &ScriptEngine::scriptEnding, this, &ScriptEditorWidget::onScriptEnding);161 connect(_scriptEngine, &ScriptEngine::finished, this, &ScriptEditorWidget::onScriptFinished);
169 }162 }
170}163}
171 164