diff --git a/interface/src/ui/ScriptEditorWidget.cpp b/interface/src/ui/ScriptEditorWidget.cpp index ae5d69b1aa..f519a6f4fd 100644 --- a/interface/src/ui/ScriptEditorWidget.cpp +++ b/interface/src/ui/ScriptEditorWidget.cpp @@ -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; } diff --git a/interface/src/ui/ScriptEditorWidget.h b/interface/src/ui/ScriptEditorWidget.h index 3e95ea322b..f3e09971dc 100644 --- a/interface/src/ui/ScriptEditorWidget.h +++ b/interface/src/ui/ScriptEditorWidget.h @@ -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