diff --git a/UI/data/locale/en-US.ini b/UI/data/locale/en-US.ini
index 6da26759c..5df9389a3 100644
--- a/UI/data/locale/en-US.ini
+++ b/UI/data/locale/en-US.ini
@@ -653,9 +653,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 0fead5c0e..8d97dfe25 100644
--- a/UI/window-basic-main.cpp
+++ b/UI/window-basic-main.cpp
@@ -5393,7 +5393,8 @@ inline void OBSBasic::OnActivate()
UpdateProcessPriority();
#ifdef _WIN32
- taskProg->show();
+ if (taskbarStatusColor())
+ taskProg->show();
taskProg->resume();
taskProg->setValue(1);
taskBtn->setOverlayIcon(QIcon::fromTheme(
@@ -5427,7 +5428,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",
@@ -5438,7 +5440,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",
@@ -7452,7 +7455,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",