diff --git a/data/locale/en-US.ini b/data/locale/en-US.ini
index dfd70c1b..76942b12 100644
--- a/data/locale/en-US.ini
+++ b/data/locale/en-US.ini
@@ -38,6 +38,8 @@ AdvSceneSwitcher.generalTab.generalBehavior.logLevel.verbose="Verbose logging"
AdvSceneSwitcher.generalTab.generalBehavior.saveWindowGeo="Save window position and size"
AdvSceneSwitcher.generalTab.generalBehavior.showTrayNotifications="Show system tray notifications"
AdvSceneSwitcher.generalTab.generalBehavior.disableUIHints="Disable UI hints"
+AdvSceneSwitcher.generalTab.generalBehavior.disableInactiveStatusBlink="Disable blinking of the inactive status"
+AdvSceneSwitcher.generalTab.generalBehavior.disableInactiveStatusBlink.tooltip="Only affects the inactive status label in the settings window and status dock."
AdvSceneSwitcher.generalTab.generalBehavior.comboBoxFilterDisable="Disable filtering by typing in drop down menus"
AdvSceneSwitcher.generalTab.generalBehavior.warnPluginLoadFailure="Display warning if plugins cannot be loaded"
AdvSceneSwitcher.generalTab.generalBehavior.suppressCrashRecoveryDialog="Do not ask to keep the plugin stopped after an unclean shutdown"
diff --git a/forms/advanced-scene-switcher.ui b/forms/advanced-scene-switcher.ui
index 255cacfa..916286fd 100644
--- a/forms/advanced-scene-switcher.ui
+++ b/forms/advanced-scene-switcher.ui
@@ -319,6 +319,16 @@
+ -
+
+
+ AdvSceneSwitcher.generalTab.generalBehavior.disableInactiveStatusBlink.tooltip
+
+
+ AdvSceneSwitcher.generalTab.generalBehavior.disableInactiveStatusBlink
+
+
+
-
diff --git a/lib/advanced-scene-switcher.hpp b/lib/advanced-scene-switcher.hpp
index 14172a54..5c794ef2 100644
--- a/lib/advanced-scene-switcher.hpp
+++ b/lib/advanced-scene-switcher.hpp
@@ -61,6 +61,7 @@ public slots:
void on_saveWindowGeo_stateChanged(int state);
void on_showTrayNotifications_stateChanged(int state);
void on_uiHintsDisable_stateChanged(int state);
+ void on_inactiveStatusBlinkDisable_stateChanged(int state);
void on_disableComboBoxFilter_stateChanged(int state);
void on_warnPluginLoadFailure_stateChanged(int state);
void on_suppressCrashRecoveryDialog_stateChanged(int state);
diff --git a/lib/general.cpp b/lib/general.cpp
index aad09668..5993c470 100644
--- a/lib/general.cpp
+++ b/lib/general.cpp
@@ -181,6 +181,15 @@ void AdvSceneSwitcher::on_uiHintsDisable_stateChanged(int state)
switcher->disableHints = state;
}
+void AdvSceneSwitcher::on_inactiveStatusBlinkDisable_stateChanged(int state)
+{
+ if (loading) {
+ return;
+ }
+
+ switcher->disableInactiveStatusBlink = state;
+}
+
void AdvSceneSwitcher::on_disableComboBoxFilter_stateChanged(int state)
{
if (loading) {
@@ -626,6 +635,8 @@ void SwitcherData::SaveGeneralSettings(obs_data_t *obj)
obs_data_set_bool(obj, "showSystemTrayNotifications",
showSystemTrayNotifications);
obs_data_set_bool(obj, "disableHints", disableHints);
+ obs_data_set_bool(obj, "disableInactiveStatusBlink",
+ disableInactiveStatusBlink);
obs_data_set_bool(obj, "disableFilterComboboxFilter",
disableFilterComboboxFilter);
obs_data_set_bool(obj, "warnPluginLoadFailure", warnPluginLoadFailure);
@@ -698,6 +709,8 @@ void SwitcherData::LoadGeneralSettings(obs_data_t *obj)
showSystemTrayNotifications =
obs_data_get_bool(obj, "showSystemTrayNotifications");
disableHints = obs_data_get_bool(obj, "disableHints");
+ disableInactiveStatusBlink =
+ obs_data_get_bool(obj, "disableInactiveStatusBlink");
disableFilterComboboxFilter =
obs_data_get_bool(obj, "disableFilterComboboxFilter");
obs_data_set_default_bool(obj, "warnPluginLoadFailure", true);
@@ -1021,6 +1034,8 @@ void AdvSceneSwitcher::SetupGeneralTab()
ui->showTrayNotifications->setChecked(
switcher->showSystemTrayNotifications);
ui->uiHintsDisable->setChecked(switcher->disableHints);
+ ui->inactiveStatusBlinkDisable->setChecked(
+ switcher->disableInactiveStatusBlink);
ui->disableComboBoxFilter->setChecked(
switcher->disableFilterComboboxFilter);
FilterComboBox::SetFilterBehaviourEnabled(
diff --git a/lib/switcher-data.hpp b/lib/switcher-data.hpp
index 27d02162..7ed3fd07 100644
--- a/lib/switcher-data.hpp
+++ b/lib/switcher-data.hpp
@@ -161,6 +161,7 @@ public:
QStringList loadFailureLibs;
bool warnPluginLoadFailure = true;
bool disableHints = false;
+ bool disableInactiveStatusBlink = false;
bool disableFilterComboboxFilter = false;
bool hideLegacyTabs = true;
bool settingsLockEnabled = false;
diff --git a/lib/utils/plugin-state-helpers.cpp b/lib/utils/plugin-state-helpers.cpp
index 75ca49b7..b6df6eeb 100644
--- a/lib/utils/plugin-state-helpers.cpp
+++ b/lib/utils/plugin-state-helpers.cpp
@@ -338,6 +338,12 @@ bool HighlightUIElementsEnabled()
return GetSwitcher() && !GetSwitcher()->disableHints;
}
+bool InactiveStatusBlinkEnabled()
+{
+ return HighlightUIElementsEnabled() &&
+ !GetSwitcher()->disableInactiveStatusBlink;
+}
+
bool OBSIsShuttingDown()
{
return !GetSwitcher() || GetSwitcher()->obsIsShuttingDown;
diff --git a/lib/utils/plugin-state-helpers.hpp b/lib/utils/plugin-state-helpers.hpp
index 0ee36edc..6e1a31fc 100644
--- a/lib/utils/plugin-state-helpers.hpp
+++ b/lib/utils/plugin-state-helpers.hpp
@@ -49,6 +49,7 @@ EXPORT std::string PreviousForegroundWindowTitle();
EXPORT bool SettingsWindowIsOpened();
EXPORT bool HighlightUIElementsEnabled();
+EXPORT bool InactiveStatusBlinkEnabled();
EXPORT bool OBSIsShuttingDown();
EXPORT bool InitialLoadIsComplete();
diff --git a/lib/utils/status-control.cpp b/lib/utils/status-control.cpp
index d8395afd..1f1fb497 100644
--- a/lib/utils/status-control.cpp
+++ b/lib/utils/status-control.cpp
@@ -134,17 +134,13 @@ void StatusControl::ButtonClicked()
void StatusControl::UpdateStatus()
{
- if (PluginIsRunning()) {
- if (!_setToStopped) {
- return;
- }
+ const bool running = PluginIsRunning();
+ if (running && _setToStopped) {
SetStarted();
- } else {
- if (_setToStopped) {
- return;
- }
+ } else if (!running && !_setToStopped) {
SetStopped();
}
+ UpdateStatusHighlight();
}
void StatusControl::SetStarted()
@@ -152,12 +148,9 @@ void StatusControl::SetStarted()
_button->setText(
obs_module_text("AdvSceneSwitcher.generalTab.status.stop"));
_status->setText(obs_module_text("AdvSceneSwitcher.status.active"));
- if (_pulse) {
- _pulse->deleteLater();
- _pulse = nullptr;
- }
SetStatusStyleSheet(false);
_setToStopped = false;
+ UpdateStatusHighlight();
}
void StatusControl::SetStopped()
@@ -166,11 +159,21 @@ void StatusControl::SetStopped()
obs_module_text("AdvSceneSwitcher.generalTab.status.start"));
_status->setText(obs_module_text("AdvSceneSwitcher.status.inactive"));
SetStatusStyleSheet(true);
- if (HighlightUIElementsEnabled()) {
- _pulse = HighlightWidget(_status, QColor(Qt::red),
- QColor(0, 0, 0, 0));
- }
_setToStopped = true;
+ UpdateStatusHighlight();
+}
+
+void StatusControl::UpdateStatusHighlight()
+{
+ if (_setToStopped && InactiveStatusBlinkEnabled()) {
+ if (!_pulse) {
+ _pulse = HighlightWidget(_status, QColor(Qt::red),
+ QColor(0, 0, 0, 0));
+ }
+ } else if (_pulse) {
+ delete _pulse;
+ _pulse = nullptr;
+ }
}
void StatusControl::SetStatusStyleSheet(bool stopped) const
diff --git a/lib/utils/status-control.hpp b/lib/utils/status-control.hpp
index df88d94c..5715a392 100644
--- a/lib/utils/status-control.hpp
+++ b/lib/utils/status-control.hpp
@@ -25,6 +25,7 @@ private:
void SetStopped();
void SetStarted();
void SetStatusStyleSheet(bool stopped) const;
+ void UpdateStatusHighlight();
QPushButton *_button;
QHBoxLayout *_buttonLayout;