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;