diff --git a/UI/data/themes/Acri.qss b/UI/data/themes/Acri.qss
index 496c550552d89a..0cf4d594eb9a65 100644
--- a/UI/data/themes/Acri.qss
+++ b/UI/data/themes/Acri.qss
@@ -1103,6 +1103,7 @@ OBSBasic {
qproperty-groupIcon: url(./Dark/sources/group.svg);
qproperty-sceneIcon: url(./Dark/sources/scene.svg);
qproperty-defaultIcon: url(./Dark/sources/default.svg);
+ qproperty-audioProcessOutputIcon: url(./Dark/sources/windowaudio.svg);
}
/* Scene Tree */
diff --git a/UI/data/themes/Dark.qss b/UI/data/themes/Dark.qss
index 4cf1d96c679f81..5c95fa8571c7a6 100644
--- a/UI/data/themes/Dark.qss
+++ b/UI/data/themes/Dark.qss
@@ -817,6 +817,7 @@ OBSBasic {
qproperty-groupIcon: url(./Dark/sources/group.svg);
qproperty-sceneIcon: url(./Dark/sources/scene.svg);
qproperty-defaultIcon: url(./Dark/sources/default.svg);
+ qproperty-audioProcessOutputIcon: url(./Dark/sources/windowaudio.svg);
}
/* Scene Tree */
diff --git a/UI/data/themes/Dark/sources/windowaudio.svg b/UI/data/themes/Dark/sources/windowaudio.svg
new file mode 100644
index 00000000000000..5a78397d7464f7
--- /dev/null
+++ b/UI/data/themes/Dark/sources/windowaudio.svg
@@ -0,0 +1 @@
+
diff --git a/UI/data/themes/Rachni.qss b/UI/data/themes/Rachni.qss
index a7e4fcdec7947b..f1c7eff8057db6 100644
--- a/UI/data/themes/Rachni.qss
+++ b/UI/data/themes/Rachni.qss
@@ -1392,6 +1392,7 @@ OBSBasic {
qproperty-groupIcon: url(./Dark/sources/group.svg);
qproperty-sceneIcon: url(./Dark/sources/scene.svg);
qproperty-defaultIcon: url(./Dark/sources/default.svg);
+ qproperty-audioProcessOutputIcon: url(./Dark/sources/windowaudio.svg);
}
/* Scene Tree */
diff --git a/UI/data/themes/System.qss b/UI/data/themes/System.qss
index bd4ae72a8e7724..d54f541b8b34a3 100644
--- a/UI/data/themes/System.qss
+++ b/UI/data/themes/System.qss
@@ -242,6 +242,7 @@ OBSBasic {
qproperty-groupIcon: url(:res/images/sources/group.svg);
qproperty-sceneIcon: url(:res/images/sources/scene.svg);
qproperty-defaultIcon: url(:res/images/sources/default.svg);
+ qproperty-audioProcessOutputIcon: url(:res/images/sources/windowaudio.svg);
}
/* Scene Tree */
diff --git a/UI/forms/images/sources/windowaudio.svg b/UI/forms/images/sources/windowaudio.svg
new file mode 100644
index 00000000000000..b1a36e7a4239de
--- /dev/null
+++ b/UI/forms/images/sources/windowaudio.svg
@@ -0,0 +1 @@
+
diff --git a/UI/forms/obs.qrc b/UI/forms/obs.qrc
index 7217964206ac14..d55cad144530cd 100644
--- a/UI/forms/obs.qrc
+++ b/UI/forms/obs.qrc
@@ -43,6 +43,7 @@
images/sources/text.svg
images/sources/window.svg
images/sources/default.svg
+ images/sources/windowaudio.svg
images/recording-active.svg
images/recording-inactive.svg
images/recording-pause.svg
diff --git a/UI/window-basic-main-icons.cpp b/UI/window-basic-main-icons.cpp
index 56096bbed66a15..eabda2a73518f2 100644
--- a/UI/window-basic-main-icons.cpp
+++ b/UI/window-basic-main-icons.cpp
@@ -32,6 +32,8 @@ QIcon OBSBasic::GetSourceIcon(const char *id) const
case OBS_ICON_TYPE_CUSTOM:
//TODO: Add ability for sources to define custom icons
return GetDefaultIcon();
+ case OBS_ICON_TYPE_PROCESS_AUDIO_OUTPUT:
+ return GetAudioProcessOutputIcon();
default:
return GetDefaultIcon();
}
@@ -112,6 +114,11 @@ void OBSBasic::SetDefaultIcon(const QIcon &icon)
defaultIcon = icon;
}
+void OBSBasic::SetAudioProcessOutputIcon(const QIcon &icon)
+{
+ audioProcessOutputIcon = icon;
+}
+
QIcon OBSBasic::GetImageIcon() const
{
return imageIcon;
@@ -186,3 +193,8 @@ QIcon OBSBasic::GetDefaultIcon() const
{
return defaultIcon;
}
+
+QIcon OBSBasic::GetAudioProcessOutputIcon() const
+{
+ return audioProcessOutputIcon;
+}
diff --git a/UI/window-basic-main.hpp b/UI/window-basic-main.hpp
index f79749dc3965f0..feef6a65fc5a55 100644
--- a/UI/window-basic-main.hpp
+++ b/UI/window-basic-main.hpp
@@ -165,6 +165,8 @@ class OBSBasic : public OBSMainWindow {
DESIGNABLE true)
Q_PROPERTY(QIcon defaultIcon READ GetDefaultIcon WRITE SetDefaultIcon
DESIGNABLE true)
+ Q_PROPERTY(QIcon audioProcessOutputIcon READ GetAudioProcessOutputIcon
+ WRITE SetAudioProcessOutputIcon DESIGNABLE true)
friend class OBSAbout;
friend class OBSBasicPreview;
@@ -560,6 +562,7 @@ class OBSBasic : public OBSMainWindow {
QIcon groupIcon;
QIcon sceneIcon;
QIcon defaultIcon;
+ QIcon audioProcessOutputIcon;
QIcon GetImageIcon() const;
QIcon GetColorIcon() const;
@@ -574,6 +577,7 @@ class OBSBasic : public OBSMainWindow {
QIcon GetMediaIcon() const;
QIcon GetBrowserIcon() const;
QIcon GetDefaultIcon() const;
+ QIcon GetAudioProcessOutputIcon() const;
QSlider *tBar;
bool tBarActive = false;
@@ -773,6 +777,7 @@ private slots:
void SetGroupIcon(const QIcon &icon);
void SetSceneIcon(const QIcon &icon);
void SetDefaultIcon(const QIcon &icon);
+ void SetAudioProcessOutputIcon(const QIcon &icon);
void TBarChanged(int value);
void TBarReleased();
diff --git a/libobs/obs-source.h b/libobs/obs-source.h
index 18a3ecc49ddc7f..0edbf0bf61b389 100644
--- a/libobs/obs-source.h
+++ b/libobs/obs-source.h
@@ -58,6 +58,7 @@ enum obs_icon_type {
OBS_ICON_TYPE_MEDIA,
OBS_ICON_TYPE_BROWSER,
OBS_ICON_TYPE_CUSTOM,
+ OBS_ICON_TYPE_PROCESS_AUDIO_OUTPUT,
};
enum obs_media_state {