diff --git a/data/locale/de-DE.ini b/data/locale/de-DE.ini index ca4a091f..38a3e890 100644 --- a/data/locale/de-DE.ini +++ b/data/locale/de-DE.ini @@ -466,7 +466,7 @@ AdvSceneSwitcher.action.pluginState.type.stop="Erweiterten Automatischen Szenenw AdvSceneSwitcher.action.pluginState.type.noMatch="Ändern des Nichtübereinstimmungsverhaltens:" AdvSceneSwitcher.action.pluginState.type.import="Einstellungen importieren aus" AdvSceneSwitcher.action.pluginState.importWarning="Hinweis: Die Aktion wird ignoriert, solange das Einstellungsfenster geöffnet ist." -AdvSceneSwitcher.action.pluginState.entry="{{actions}}{{values}}{{scenes}}{{settings}}{{settingsWarning}}" +AdvSceneSwitcher.action.pluginState.entry="{{actions}}{{values}}{{scenes}}{{settings}}" AdvSceneSwitcher.action.virtualCamera="Virtuelle Kamera" AdvSceneSwitcher.action.virtualCamera.type.stop="Virtuelle Kamera stoppen" AdvSceneSwitcher.action.virtualCamera.type.start="Virtuelle Kamera starten" diff --git a/data/locale/en-US.ini b/data/locale/en-US.ini index 22d88b66..d28ea359 100644 --- a/data/locale/en-US.ini +++ b/data/locale/en-US.ini @@ -985,7 +985,8 @@ AdvSceneSwitcher.action.pluginState.terminateConfirm="OBS will be shut down auto AdvSceneSwitcher.action.pluginState.type.enableMacroHighlighting="Enable macro highlighting" AdvSceneSwitcher.action.pluginState.type.disableMacroHighlighting="Disable macro highlighting" AdvSceneSwitcher.action.pluginState.type.toggleMacroHighlighting="Toggle macro highlighting" -AdvSceneSwitcher.action.pluginState.entry="{{actions}}{{values}}{{scenes}}{{settings}}{{settingsWarning}}" +AdvSceneSwitcher.action.pluginState.confirmShutdown="Ask for shutdown confirmation" +AdvSceneSwitcher.action.pluginState.entry="{{actions}}{{values}}{{scenes}}{{settings}}" AdvSceneSwitcher.action.virtualCamera="Virtual camera" AdvSceneSwitcher.action.virtualCamera.type.stop="Stop virtual camera" AdvSceneSwitcher.action.virtualCamera.type.start="Start virtual camera" diff --git a/data/locale/es-ES.ini b/data/locale/es-ES.ini index 40d51ce4..1c041c81 100644 --- a/data/locale/es-ES.ini +++ b/data/locale/es-ES.ini @@ -383,7 +383,7 @@ AdvSceneSwitcher.action.pluginState.type.stop="Detener el complemento Advanced S AdvSceneSwitcher.action.pluginState.type.noMatch="Cambiar el comportamiento de no coincidencia:" AdvSceneSwitcher.action.pluginState.type.import="Importar configuración desde" AdvSceneSwitcher.action.pluginState.importWarning="Nota: la acción se ignorará mientras se abra la ventana de configuración." -AdvSceneSwitcher.action.pluginState.entry="{{actions}}{{values}}{{scenes}}{{settings}}{{settingsWarning}}" +AdvSceneSwitcher.action.pluginState.entry="{{actions}}{{values}}{{scenes}}{{settings}}" AdvSceneSwitcher.action.virtualCamera="Cámara virtual" AdvSceneSwitcher.action.virtualCamera.type.stop="Detener cámara virtual" AdvSceneSwitcher.action.virtualCamera.type.start="Iniciar cámara virtual" diff --git a/data/locale/pt-BR.ini b/data/locale/pt-BR.ini index 0d857287..a67c4b77 100644 --- a/data/locale/pt-BR.ini +++ b/data/locale/pt-BR.ini @@ -874,7 +874,7 @@ AdvSceneSwitcher.action.pluginState.type.import="Importar configurações de" AdvSceneSwitcher.action.pluginState.importWarning="Nota: Ação será ignorada enquanto a janela de configurações estiver aberta." AdvSceneSwitcher.action.pluginState.type.terminate="Desligar OBS" AdvSceneSwitcher.action.pluginState.terminateConfirm="O OBS será desligado automaticamente em 10 segundos!\nDeseja continuar com o desligamento do OBS?" -AdvSceneSwitcher.action.pluginState.entry="{{actions}}{{values}}{{scenes}}{{settings}}{{settingsWarning}}" +AdvSceneSwitcher.action.pluginState.entry="{{actions}}{{values}}{{scenes}}{{settings}}" AdvSceneSwitcher.action.virtualCamera="Câmera virtual" AdvSceneSwitcher.action.virtualCamera.type.stop="Parar câmera virtual" AdvSceneSwitcher.action.virtualCamera.type.start="Iniciar câmera virtual" diff --git a/data/locale/tr-TR.ini b/data/locale/tr-TR.ini index c9a20837..98bcf12b 100644 --- a/data/locale/tr-TR.ini +++ b/data/locale/tr-TR.ini @@ -312,7 +312,7 @@ AdvSceneSwitcher.action.pluginState.type.stop="Advanced Scene Switcher eklentisi AdvSceneSwitcher.action.pluginState.type.noMatch="Eşleşmeme davranışını değiştirin:" AdvSceneSwitcher.action.pluginState.type.import="Ayarları şuradan içe aktar:" AdvSceneSwitcher.action.pluginState.importWarning="Not: Ayarlar penceresi açılırken eylem göz ardı edilecektir." -AdvSceneSwitcher.action.pluginState.entry="{{actions}}{{values}}{{scenes}}{{settings}}{{settingsWarning}}" +AdvSceneSwitcher.action.pluginState.entry="{{actions}}{{values}}{{scenes}}{{settings}}" AdvSceneSwitcher.action.virtualCamera="Sanal Kamera" AdvSceneSwitcher.action.virtualCamera.type.stop="Sanal Kamerayı Durdur" AdvSceneSwitcher.action.virtualCamera.type.start="Sanal Kamerayı Başlat" diff --git a/data/locale/zh-CN.ini b/data/locale/zh-CN.ini index adc4793a..538fb12a 100644 --- a/data/locale/zh-CN.ini +++ b/data/locale/zh-CN.ini @@ -933,7 +933,7 @@ AdvSceneSwitcher.action.pluginState.type.import="导入设置" AdvSceneSwitcher.action.pluginState.importWarning="注意:当设置窗口打开时,操作将被忽略." AdvSceneSwitcher.action.pluginState.type.terminate="关闭OBS" AdvSceneSwitcher.action.pluginState.terminateConfirm="OBS将在10秒后自动关闭!\n你想继续关闭OBS吗?" -AdvSceneSwitcher.action.pluginState.entry="{{actions}}{{values}}{{scenes}}{{settings}}{{settingsWarning}}" +AdvSceneSwitcher.action.pluginState.entry="{{actions}}{{values}}{{scenes}}{{settings}}" AdvSceneSwitcher.action.virtualCamera="虚拟摄像机" AdvSceneSwitcher.action.virtualCamera.type.stop="停止虚拟摄像机" AdvSceneSwitcher.action.virtualCamera.type.start="启动虚拟摄像机" diff --git a/plugins/base/macro-action-plugin-state.cpp b/plugins/base/macro-action-plugin-state.cpp index 4b2e8d3f..b9e0e26d 100644 --- a/plugins/base/macro-action-plugin-state.cpp +++ b/plugins/base/macro-action-plugin-state.cpp @@ -56,7 +56,7 @@ static void setNoMatchBehaviour(int value, OBSWeakSource &scene) } } -static void closeOBSWindow() +static void closeOBSWindow(void *) { blog(LOG_WARNING, "closing OBS window now!"); auto obsWindow = @@ -69,7 +69,7 @@ static void closeOBSWindow() } } -static void terminateOBS(void *) +static void askTerminateOBS(void *) { static std::mutex mtx; static std::mutex waitMutex; @@ -107,10 +107,10 @@ static void terminateOBS(void *) if (abortTerminate) { blog(LOG_INFO, "OBS shutdown was aborted"); } else { - closeOBSWindow(); + closeOBSWindow(nullptr); } } else { - closeOBSWindow(); + closeOBSWindow(nullptr); } }); thread.detach(); @@ -143,9 +143,11 @@ bool MacroActionPluginState::PerformAction() // The settings will be invalid return false; case Action::TERMINATE: { - std::thread thread([]() { - obs_queue_task(OBS_TASK_UI, terminateOBS, nullptr, - false); + std::thread thread([this]() { + obs_queue_task(OBS_TASK_UI, + this->_confirmShutdown ? askTerminateOBS + : closeOBSWindow, + nullptr, false); }); thread.detach(); break; @@ -204,6 +206,7 @@ bool MacroActionPluginState::Save(obs_data_t *obj) const obs_data_set_int(obj, "value", _value); obs_data_set_string(obj, "scene", GetWeakSourceName(_scene).c_str()); _settingsPath.Save(obj, "settingsPath"); + obs_data_set_bool(obj, "confirmShutdown", _confirmShutdown); return true; } @@ -216,6 +219,9 @@ bool MacroActionPluginState::Load(obs_data_t *obj) const char *sceneName = obs_data_get_string(obj, "scene"); _scene = GetWeakSourceByName(sceneName); _settingsPath.Load(obj, "settingsPath"); + if (obs_data_has_user_value(obj, "confirmShutdown")) { + _confirmShutdown = obs_data_get_bool(obj, "confirmShutdown"); + } return true; } @@ -276,7 +282,9 @@ MacroActionPluginStateEdit::MacroActionPluginStateEdit( _scenes(new QComboBox(this)), _settings(new FileSelection()), _settingsWarning(new QLabel(obs_module_text( - "AdvSceneSwitcher.action.pluginState.importWarning"))) + "AdvSceneSwitcher.action.pluginState.importWarning"))), + _confirmShutdown(new QCheckBox(obs_module_text( + "AdvSceneSwitcher.action.pluginState.confirmShutdown"))) { populateActionSelection(_actions); PopulateSceneSelection(_scenes); @@ -289,16 +297,21 @@ MacroActionPluginStateEdit::MacroActionPluginStateEdit( this, SLOT(SceneChanged(const QString &))); QWidget::connect(_settings, SIGNAL(PathChanged(const QString &)), this, SLOT(PathChanged(const QString &))); + QWidget::connect(_confirmShutdown, SIGNAL(stateChanged(int)), this, + SLOT(ConfirmShutdownChanged(int))); - auto layout = new QHBoxLayout; + auto entryLayout = new QHBoxLayout; PlaceWidgets( obs_module_text("AdvSceneSwitcher.action.pluginState.entry"), - layout, + entryLayout, {{"{{actions}}", _actions}, {"{{values}}", _values}, {"{{scenes}}", _scenes}, - {"{{settings}}", _settings}, - {"{{settingsWarning}}", _settingsWarning}}); + {"{{settings}}", _settings}}); + auto layout = new QVBoxLayout; + layout->addLayout(entryLayout); + layout->addWidget(_settingsWarning); + layout->addWidget(_confirmShutdown); setLayout(layout); _entryData = entryData; @@ -316,6 +329,7 @@ void MacroActionPluginStateEdit::UpdateEntryData() _values->setCurrentIndex(_entryData->_value); _scenes->setCurrentText(GetWeakSourceName(_entryData->_scene).c_str()); _settings->SetPath(_entryData->_settingsPath); + _confirmShutdown->setChecked(_entryData->_confirmShutdown); SetWidgetVisibility(); } @@ -351,6 +365,12 @@ void MacroActionPluginStateEdit::PathChanged(const QString &text) _entryData->_settingsPath = text.toStdString(); } +void MacroActionPluginStateEdit::ConfirmShutdownChanged(int value) +{ + GUARD_LOADING_AND_LOCK(); + _entryData->_confirmShutdown = value; +} + void MacroActionPluginStateEdit::SetWidgetVisibility() { if (!_entryData) { @@ -361,6 +381,7 @@ void MacroActionPluginStateEdit::SetWidgetVisibility() _scenes->hide(); _settings->hide(); _settingsWarning->hide(); + _confirmShutdown->hide(); switch (_entryData->_action) { case MacroActionPluginState::Action::STOP: @@ -376,6 +397,9 @@ void MacroActionPluginStateEdit::SetWidgetVisibility() _settings->show(); _settingsWarning->show(); break; + case MacroActionPluginState::Action::TERMINATE: + _confirmShutdown->show(); + break; default: break; } diff --git a/plugins/base/macro-action-plugin-state.hpp b/plugins/base/macro-action-plugin-state.hpp index d2dbafeb..ba91d7e7 100644 --- a/plugins/base/macro-action-plugin-state.hpp +++ b/plugins/base/macro-action-plugin-state.hpp @@ -3,6 +3,8 @@ #include "file-selection.hpp" #include + +#include #include namespace advss { @@ -33,6 +35,7 @@ public: int _value = 0; StringVariable _settingsPath; OBSWeakSource _scene; + bool _confirmShutdown = true; private: static bool _registered; @@ -61,6 +64,7 @@ private slots: void ValueChanged(int value); void SceneChanged(const QString &text); void PathChanged(const QString &text); + void ConfirmShutdownChanged(int); private: void SetWidgetVisibility(); @@ -70,6 +74,7 @@ private: QComboBox *_scenes; FileSelection *_settings; QLabel *_settingsWarning; + QCheckBox *_confirmShutdown; std::shared_ptr _entryData; bool _loading = true;