mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-09 14:40:40 +02:00
Fix Script Editor run-on-the-fly crashing
Wait for script engine to stop before restarting.
This commit is contained in:
parent
9449ad7192
commit
48fb156e28
2 changed files with 14 additions and 2 deletions
|
@ -28,7 +28,8 @@
|
||||||
|
|
||||||
ScriptEditorWidget::ScriptEditorWidget() :
|
ScriptEditorWidget::ScriptEditorWidget() :
|
||||||
_scriptEditorWidgetUI(new Ui::ScriptEditorWidget),
|
_scriptEditorWidgetUI(new Ui::ScriptEditorWidget),
|
||||||
_scriptEngine(NULL)
|
_scriptEngine(NULL),
|
||||||
|
_isRestarting(false)
|
||||||
{
|
{
|
||||||
_scriptEditorWidgetUI->setupUi(this);
|
_scriptEditorWidgetUI->setupUi(this);
|
||||||
|
|
||||||
|
@ -52,8 +53,9 @@ ScriptEditorWidget::~ScriptEditorWidget() {
|
||||||
|
|
||||||
void ScriptEditorWidget::onScriptModified() {
|
void ScriptEditorWidget::onScriptModified() {
|
||||||
if(_scriptEditorWidgetUI->onTheFlyCheckBox->isChecked() && isRunning()) {
|
if(_scriptEditorWidgetUI->onTheFlyCheckBox->isChecked() && isRunning()) {
|
||||||
|
_isRestarting = true;
|
||||||
setRunning(false);
|
setRunning(false);
|
||||||
setRunning(true);
|
// Script is restarted once current script instance finishes.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -62,6 +64,13 @@ void ScriptEditorWidget::onScriptEnding() {
|
||||||
_scriptEngine = NULL;
|
_scriptEngine = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ScriptEditorWidget::onScriptFinished(const QString& scriptPath) {
|
||||||
|
if (_isRestarting) {
|
||||||
|
_isRestarting = false;
|
||||||
|
setRunning(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool ScriptEditorWidget::isModified() {
|
bool ScriptEditorWidget::isModified() {
|
||||||
return _scriptEditorWidgetUI->scriptEdit->document()->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::printedMessage, this, &ScriptEditorWidget::onScriptPrint);
|
||||||
connect(_scriptEngine, &ScriptEngine::scriptEnding, this, &ScriptEditorWidget::onScriptEnding);
|
connect(_scriptEngine, &ScriptEngine::scriptEnding, this, &ScriptEditorWidget::onScriptEnding);
|
||||||
} else {
|
} else {
|
||||||
|
connect(_scriptEngine, &ScriptEngine::finished, this, &ScriptEditorWidget::onScriptFinished);
|
||||||
Application::getInstance()->stopScript(_currentScript);
|
Application::getInstance()->stopScript(_currentScript);
|
||||||
_scriptEngine = NULL;
|
_scriptEngine = NULL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,11 +47,13 @@ private slots:
|
||||||
void onScriptPrint(const QString& message);
|
void onScriptPrint(const QString& message);
|
||||||
void onScriptModified();
|
void onScriptModified();
|
||||||
void onScriptEnding();
|
void onScriptEnding();
|
||||||
|
void onScriptFinished(const QString& scriptName);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::ScriptEditorWidget* _scriptEditorWidgetUI;
|
Ui::ScriptEditorWidget* _scriptEditorWidgetUI;
|
||||||
ScriptEngine* _scriptEngine;
|
ScriptEngine* _scriptEngine;
|
||||||
QString _currentScript;
|
QString _currentScript;
|
||||||
|
bool _isRestarting;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // hifi_ScriptEditorWidget_h
|
#endif // hifi_ScriptEditorWidget_h
|
||||||
|
|
Loading…
Reference in a new issue