Add option to disable shutdown confirmation dialog

This commit is contained in:
WarmUpTill 2025-08-23 20:03:21 +02:00 committed by WarmUpTill
parent 0dfa4fe2c0
commit 4e561320f7
8 changed files with 48 additions and 18 deletions

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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="启动虚拟摄像机"

View File

@ -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;
}

View File

@ -3,6 +3,8 @@
#include "file-selection.hpp"
#include <obs.hpp>
#include <QCheckBox>
#include <QLabel>
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<MacroActionPluginState> _entryData;
bool _loading = true;