diff --git a/UI/data/locale/en-US.ini b/UI/data/locale/en-US.ini
index 64ff69aa9..3179cc363 100644
--- a/UI/data/locale/en-US.ini
+++ b/UI/data/locale/en-US.ini
@@ -112,6 +112,7 @@ MoveSourceUp="Move Source(s) Up"
MoveSourceDown="Move Source(s) Down"
SourceProperties="Open Source Properties"
SourceFilters="Open Source Filters"
+MixerToolbarMenu="Audio Mixer Menu"
# warning for plugin load failures
PluginsFailedToLoad.Title="Plugin Load Error"
diff --git a/UI/data/themes/Acri.qss b/UI/data/themes/Acri.qss
index b709c3d2b..39020c639 100644
--- a/UI/data/themes/Acri.qss
+++ b/UI/data/themes/Acri.qss
@@ -403,6 +403,10 @@ QToolButton:pressed {
qproperty-icon: url(./Dark/dots-vert.svg);
}
+* [themeID="cogsIcon"] {
+ qproperty-icon: url(./Dark/cogs.svg);
+}
+
/* Tab Widget */
QTabWidget::pane { /* The tab widget frame */
diff --git a/UI/data/themes/Dark.qss b/UI/data/themes/Dark.qss
index 8f745d791..ea3ea23a2 100644
--- a/UI/data/themes/Dark.qss
+++ b/UI/data/themes/Dark.qss
@@ -310,6 +310,10 @@ QToolButton:pressed {
qproperty-icon: url(./Dark/dots-vert.svg);
}
+* [themeID="cogsIcon"] {
+ qproperty-icon: url(./Dark/cogs.svg);
+}
+
/* Tab Widget */
QTabWidget::pane { /* The tab widget frame */
diff --git a/UI/data/themes/Dark/cogs.svg b/UI/data/themes/Dark/cogs.svg
new file mode 100644
index 000000000..398875442
--- /dev/null
+++ b/UI/data/themes/Dark/cogs.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/UI/data/themes/Rachni.qss b/UI/data/themes/Rachni.qss
index 7ba73b4f8..73d5a50c3 100644
--- a/UI/data/themes/Rachni.qss
+++ b/UI/data/themes/Rachni.qss
@@ -540,6 +540,10 @@ QToolButton:pressed {
qproperty-icon: url(./Dark/dots-vert.svg);
}
+* [themeID="cogsIcon"] {
+ qproperty-icon: url(./Dark/cogs.svg);
+}
+
/***********************/
/* --- Combo boxes --- */
/***********************/
diff --git a/UI/data/themes/System.qss b/UI/data/themes/System.qss
index 69bd06c3b..5ec7f46c1 100644
--- a/UI/data/themes/System.qss
+++ b/UI/data/themes/System.qss
@@ -50,6 +50,10 @@ OBSThemeMeta {
qproperty-icon: url(:res/images/dots-vert.svg);
}
+* [themeID="cogsIcon"] {
+ qproperty-icon: url(:/res/images/cogs.svg);
+}
+
MuteCheckBox {
outline: none;
}
diff --git a/UI/data/themes/Yami.qss b/UI/data/themes/Yami.qss
index 51aeab6c2..343006606 100644
--- a/UI/data/themes/Yami.qss
+++ b/UI/data/themes/Yami.qss
@@ -458,6 +458,10 @@ QToolButton:pressed {
qproperty-icon: url(./Dark/refresh.svg);
}
+* [themeID="cogsIcon"] {
+ qproperty-icon: url(./Dark/cogs.svg);
+}
+
#sourceInteractButton {
qproperty-icon: url(./Dark/interact.svg);
}
diff --git a/UI/forms/OBSBasic.ui b/UI/forms/OBSBasic.ui
index 60f4e8f0c..435970950 100644
--- a/UI/forms/OBSBasic.ui
+++ b/UI/forms/OBSBasic.ui
@@ -1020,113 +1020,156 @@
0
-
-
-
-
- Qt::CustomContextMenu
+
+
+ QFrame::StyledPanel
+
+
+ QFrame::Sunken
+
+
+
+ 0
-
- QFrame::StyledPanel
+
+ 0
-
- QFrame::Sunken
+
+ 0
-
- Qt::ScrollBarAsNeeded
+
+ 0
-
- Qt::ScrollBarAlwaysOff
+
+ 0
-
- true
-
-
-
-
- 0
- 0
- 67
- 16
-
-
-
-
- 0
- 0
-
-
-
-
- 0
+
-
+
+
+
+ Qt::CustomContextMenu
+
+
+ QFrame::StyledPanel
+
+
+ QFrame::Sunken
+
+
+ Qt::ScrollBarAsNeeded
+
+
+ Qt::ScrollBarAlwaysOff
+
+
+ true
+
+
+
+
+ 0
+ 0
+ 74
+ 16
+
+
+
+
+ 0
+ 0
+
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+
+
+
+
+ Qt::CustomContextMenu
+
+
+ QFrame::StyledPanel
+
+
+ QFrame::Sunken
+
+
+ Qt::ScrollBarAlwaysOff
+
+
+ Qt::ScrollBarAsNeeded
+
+
+ true
+
+
+
+
+ 0
+ 0
+ 16
+ 28
+
+
+
+
+ 0
+ 0
+
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+
+
+
+
+ -
+
+
+
+ 16
+ 16
+
-
- 0
+
+ false
-
- 0
-
-
- 0
-
-
- 0
-
-
-
-
-
-
- Qt::CustomContextMenu
-
-
- QFrame::StyledPanel
-
-
- QFrame::Sunken
-
-
- Qt::ScrollBarAlwaysOff
-
-
- Qt::ScrollBarAsNeeded
-
-
- true
-
-
-
-
- 0
- 0
- 16
- 28
-
-
-
-
- 0
- 0
-
-
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
-
-
+
+
+
+
+
+
@@ -2253,6 +2296,33 @@
Undo.Redo
+
+
+
+ :/settings/images/settings/advanced.svg:/settings/images/settings/advanced.svg
+
+
+ AdvAudioProps
+
+
+ Basic.AdvAudio
+
+
+ cogsIcon
+
+
+
+
+
+ :/res/images/dots-vert.svg:/res/images/dots-vert.svg
+
+
+ MixerToolbarMenu
+
+
+ menuIconSmall
+
+
diff --git a/UI/forms/images/cogs.svg b/UI/forms/images/cogs.svg
new file mode 100644
index 000000000..4f4c3f2e7
--- /dev/null
+++ b/UI/forms/images/cogs.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/UI/forms/obs.qrc b/UI/forms/obs.qrc
index 977cfa39d..c88a11b45 100644
--- a/UI/forms/obs.qrc
+++ b/UI/forms/obs.qrc
@@ -61,6 +61,7 @@
images/interact.svg
images/dots.svg
images/dots-vert.svg
+ images/cogs.svg
images/settings/output.svg
diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp
index 18c228f6d..891ecebbc 100644
--- a/UI/window-basic-main.cpp
+++ b/UI/window-basic-main.cpp
@@ -581,6 +581,14 @@ void OBSBasic::copyActionsDynamicProperties()
temp->setProperty(y, x->property(y));
}
}
+
+ for (QAction *x : ui->mixerToolbar->actions()) {
+ QWidget *temp = ui->mixerToolbar->widgetForAction(x);
+
+ for (QByteArray &y : x->dynamicPropertyNames()) {
+ temp->setProperty(y, x->property(y));
+ }
+ }
}
void OBSBasic::UpdateVolumeControlsDecayRate()
@@ -4960,6 +4968,31 @@ void OBSBasic::on_actionAdvAudioProperties_triggered()
advAudioWindow->SetIconsVisible(iconsVisible);
}
+void OBSBasic::on_actionMixerToolbarAdvAudio_triggered()
+{
+ on_actionAdvAudioProperties_triggered();
+}
+
+void OBSBasic::on_actionMixerToolbarMenu_triggered()
+{
+ QAction unhideAllAction(QTStr("UnhideAll"), this);
+ connect(&unhideAllAction, &QAction::triggered, this,
+ &OBSBasic::UnhideAllAudioControls, Qt::DirectConnection);
+
+ QAction toggleControlLayoutAction(QTStr("VerticalLayout"), this);
+ toggleControlLayoutAction.setCheckable(true);
+ toggleControlLayoutAction.setChecked(config_get_bool(
+ GetGlobalConfig(), "BasicWindow", "VerticalVolControl"));
+ connect(&toggleControlLayoutAction, &QAction::changed, this,
+ &OBSBasic::ToggleVolControlLayout, Qt::DirectConnection);
+
+ QMenu popup;
+ popup.addAction(&unhideAllAction);
+ popup.addSeparator();
+ popup.addAction(&toggleControlLayoutAction);
+ popup.exec(QCursor::pos());
+}
+
void OBSBasic::on_scenes_currentItemChanged(QListWidgetItem *current,
QListWidgetItem *prev)
{
diff --git a/UI/window-basic-main.hpp b/UI/window-basic-main.hpp
index cc19f2b33..3bdb0bff7 100644
--- a/UI/window-basic-main.hpp
+++ b/UI/window-basic-main.hpp
@@ -995,6 +995,8 @@ private slots:
void on_action_Settings_triggered();
void on_actionShowMissingFiles_triggered();
void on_actionAdvAudioProperties_triggered();
+ void on_actionMixerToolbarAdvAudio_triggered();
+ void on_actionMixerToolbarMenu_triggered();
void on_actionShowLogs_triggered();
void on_actionUploadCurrentLog_triggered();
void on_actionUploadLastLog_triggered();