From 081fc548c58f56be471df670c99b6620f24c4367 Mon Sep 17 00:00:00 2001 From: Matt Gajownik Date: Sat, 27 Jun 2020 12:14:40 +1000 Subject: [PATCH] UI: Add setting for taskbar color --- UI/data/locale/en-US.ini | 3 ++- UI/forms/OBSBasicSettings.ui | 10 ++++++++++ UI/obs-app.cpp | 4 ++++ UI/window-basic-main.cpp | 17 +++++++++++++---- UI/window-basic-main.hpp | 3 +++ UI/window-basic-settings.cpp | 21 +++++++++++++++++++-- 6 files changed, 51 insertions(+), 7 deletions(-) diff --git a/UI/data/locale/en-US.ini b/UI/data/locale/en-US.ini index 6a11e28d6..ac19483c6 100644 --- a/UI/data/locale/en-US.ini +++ b/UI/data/locale/en-US.ini @@ -651,9 +651,10 @@ Basic.Settings.General.RecordWhenStreaming="Automatically record when streaming" Basic.Settings.General.KeepRecordingWhenStreamStops="Keep recording when stream stops" Basic.Settings.General.ReplayBufferWhileStreaming="Automatically start replay buffer when streaming" Basic.Settings.General.KeepReplayBufferStreamStops="Keep replay buffer active when stream stops" -Basic.Settings.General.SysTray="System Tray" +Basic.Settings.General.SysTray="System Tray/Taskbar" Basic.Settings.General.SysTrayWhenStarted="Minimize to system tray when started" Basic.Settings.General.SystemTrayHideMinimize="Always minimize to system tray instead of task bar" +Basic.Settings.General.TaskbarStatusColor="Change taskbar color when output is active" Basic.Settings.General.SaveProjectors="Save projectors on exit" Basic.Settings.General.Preview="Preview" Basic.Settings.General.OverflowHidden="Hide overflow" diff --git a/UI/forms/OBSBasicSettings.ui b/UI/forms/OBSBasicSettings.ui index 6fc4f718b..01e0d3cd1 100644 --- a/UI/forms/OBSBasicSettings.ui +++ b/UI/forms/OBSBasicSettings.ui @@ -534,6 +534,16 @@ + + + + true + + + Basic.Settings.General.TaskbarStatusColor + + + diff --git a/UI/obs-app.cpp b/UI/obs-app.cpp index 6ccf2a46c..7ad287a69 100644 --- a/UI/obs-app.cpp +++ b/UI/obs-app.cpp @@ -420,6 +420,10 @@ bool OBSApp::InitGlobalConfigDefaults() "KeepRecordingWhenStreamStops", false); config_set_default_bool(globalConfig, "BasicWindow", "SysTrayEnabled", true); +#ifdef _WIN32 + config_set_default_bool(globalConfig, "BasicWindow", + "TaskbarStatusColor", true); +#endif config_set_default_bool(globalConfig, "BasicWindow", "SysTrayWhenStarted", false); config_set_default_bool(globalConfig, "BasicWindow", "SaveProjectors", diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index 8fe74e11f..61ed31b5c 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -5392,7 +5392,8 @@ inline void OBSBasic::OnActivate() UpdateProcessPriority(); #ifdef _WIN32 - taskProg->show(); + if (taskbarStatusColor()) + taskProg->show(); taskProg->resume(); taskProg->setValue(1); taskBtn->setOverlayIcon(QIcon::fromTheme( @@ -5426,7 +5427,8 @@ inline void OBSBasic::OnDeactivate() } else { if (os_atomic_load_bool(&recording_paused)) { #ifdef _WIN32 - taskProg->show(); + if (taskbarStatusColor()) + taskProg->show(); taskProg->pause(); taskBtn->setOverlayIcon(QIcon::fromTheme( "obs-paused", @@ -5437,7 +5439,8 @@ inline void OBSBasic::OnDeactivate() QIcon(":/res/images/obs_paused.png")); } else { #ifdef _WIN32 - taskProg->show(); + if (taskbarStatusColor()) + taskProg->show(); taskProg->resume(); taskBtn->setOverlayIcon(QIcon::fromTheme( "obs-active", @@ -7451,7 +7454,13 @@ bool OBSBasic::sysTrayMinimizeToTray() return config_get_bool(GetGlobalConfig(), "BasicWindow", "SysTrayMinimizeToTray"); } - +#ifdef _WIN32 +bool OBSBasic::taskbarStatusColor() +{ + return config_get_bool(GetGlobalConfig(), "BasicWindow", + "TaskbarStatusColor"); +} +#endif void OBSBasic::on_actionCopySource_triggered() { copyStrings.clear(); diff --git a/UI/window-basic-main.hpp b/UI/window-basic-main.hpp index d2cc692a9..69e10c87f 100644 --- a/UI/window-basic-main.hpp +++ b/UI/window-basic-main.hpp @@ -465,6 +465,9 @@ private: void ReplayBufferClicked(); bool sysTrayMinimizeToTray(); +#ifdef _WIN32 + bool taskbarStatusColor(); +#endif void EnumDialogs(); diff --git a/UI/window-basic-settings.cpp b/UI/window-basic-settings.cpp index a55a02139..0ed483c4d 100644 --- a/UI/window-basic-settings.cpp +++ b/UI/window-basic-settings.cpp @@ -398,6 +398,9 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent) HookWidget(ui->systemTrayEnabled, CHECK_CHANGED, GENERAL_CHANGED); HookWidget(ui->systemTrayWhenStarted,CHECK_CHANGED, GENERAL_CHANGED); HookWidget(ui->systemTrayAlways, CHECK_CHANGED, GENERAL_CHANGED); +#ifdef _WIN32 + HookWidget(ui->taskbarColor, CHECK_CHANGED, GENERAL_CHANGED); +#endif HookWidget(ui->saveProjectors, CHECK_CHANGED, GENERAL_CHANGED); HookWidget(ui->snappingEnabled, CHECK_CHANGED, GENERAL_CHANGED); HookWidget(ui->screenSnapping, CHECK_CHANGED, GENERAL_CHANGED); @@ -629,6 +632,7 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent) delete ui->enableNewSocketLoop; delete ui->enableLowLatencyMode; delete ui->browserHWAccel; + delete ui->taskbarColor; delete ui->sourcesGroup; #if defined(__APPLE__) || HAVE_PULSEAUDIO delete ui->disableAudioDucking; @@ -643,6 +647,7 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent) ui->enableNewSocketLoop = nullptr; ui->enableLowLatencyMode = nullptr; ui->browserHWAccel = nullptr; + ui->taskbarColor = nullptr; ui->sourcesGroup = nullptr; #if defined(__APPLE__) || HAVE_PULSEAUDIO ui->disableAudioDucking = nullptr; @@ -1198,7 +1203,11 @@ void OBSBasicSettings::LoadGeneralSettings() bool systemTrayAlways = config_get_bool( GetGlobalConfig(), "BasicWindow", "SysTrayMinimizeToTray"); ui->systemTrayAlways->setChecked(systemTrayAlways); - +#ifdef _WIN32 + bool taskbarColor = config_get_bool(GetGlobalConfig(), "BasicWindow", + "TaskbarStatusColor"); + ui->taskbarColor->setChecked(taskbarColor); +#endif bool saveProjectors = config_get_bool(GetGlobalConfig(), "BasicWindow", "SaveProjectors"); ui->saveProjectors->setChecked(saveProjectors); @@ -2994,7 +3003,15 @@ void OBSBasicSettings::SaveGeneralSettings() config_set_bool(GetGlobalConfig(), "BasicWindow", "SysTrayMinimizeToTray", ui->systemTrayAlways->isChecked()); - +#ifdef _WIN32 + if (WidgetChanged(ui->taskbarColor)) { + bool enable_color = ui->taskbarColor->isChecked(); + config_set_bool(GetGlobalConfig(), "BasicWindow", + "TaskbarStatusColor", enable_color); + if (!enable_color) + main->taskProg->setVisible(enable_color); + } +#endif if (WidgetChanged(ui->saveProjectors)) config_set_bool(GetGlobalConfig(), "BasicWindow", "SaveProjectors",