diff --git a/UI/forms/OBSBasic.ui b/UI/forms/OBSBasic.ui
index ed0d09cf2..d3b35fccd 100644
--- a/UI/forms/OBSBasic.ui
+++ b/UI/forms/OBSBasic.ui
@@ -713,12 +713,6 @@
-
-
-
-
-
-
@@ -2187,61 +2181,6 @@
Basic.MainMenu.Docks.LockDocks
-
-
- true
-
-
- true
-
-
- Basic.Main.Scenes
-
-
-
-
- true
-
-
- true
-
-
- Basic.Main.Sources
-
-
-
-
- true
-
-
- true
-
-
- Mixer
-
-
-
-
- true
-
-
- true
-
-
- Basic.SceneTransitions
-
-
-
-
- true
-
-
- true
-
-
- Basic.Main.Controls
-
-
Basic.MainMenu.Help.HelpPortal
@@ -2262,17 +2201,6 @@
Basic.MainMenu.Help.Discord
-
-
- true
-
-
- true
-
-
- Basic.Stats
-
-
Basic.MainMenu.Help.About
diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp
index 7de3ad2ce..9304b6a3f 100644
--- a/UI/window-basic-main.cpp
+++ b/UI/window-basic-main.cpp
@@ -251,6 +251,32 @@ void assignDockToggle(QDockWidget *dock, QAction *action)
dock->connect(action, &QAction::toggled, handleMenuToggle);
}
+void setupDockAction(QDockWidget *dock)
+{
+ QAction *action = dock->toggleViewAction();
+
+ auto neverDisable = [action]() {
+ QSignalBlocker block(action);
+ action->setEnabled(true);
+ };
+
+ auto newToggleView = [dock](bool check) {
+ QSignalBlocker block(dock);
+ dock->setVisible(check);
+ };
+
+ // Replace the slot connected by default
+ action->disconnect(SIGNAL(triggered(bool)));
+ dock->connect(action, &QAction::triggered, newToggleView);
+
+ // Make the action unable to be disabled
+#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
+ action->connect(action, &QAction::changed, neverDisable);
+#else
+ action->connect(action, &QAction::enabledChanged, neverDisable);
+#endif
+}
+
extern void RegisterTwitchAuth();
extern void RegisterRestreamAuth();
#if YOUTUBE_ENABLED
@@ -423,12 +449,20 @@ OBSBasic::OBSBasic(QWidget *parent)
addNudge(Qt::SHIFT | Qt::Key_Left, MoveDir::Left, 10);
addNudge(Qt::SHIFT | Qt::Key_Right, MoveDir::Right, 10);
- assignDockToggle(ui->scenesDock, ui->toggleScenes);
- assignDockToggle(ui->sourcesDock, ui->toggleSources);
- assignDockToggle(ui->mixerDock, ui->toggleMixer);
- assignDockToggle(ui->transitionsDock, ui->toggleTransitions);
- assignDockToggle(ui->controlsDock, ui->toggleControls);
- assignDockToggle(statsDock, ui->toggleStats);
+ /* Setup dock toggle action
+ * And hide all docks before restoring parent geometry */
+#define SETUP_DOCK(dock) \
+ setupDockAction(dock); \
+ ui->menuDocks->addAction(dock->toggleViewAction()); \
+ dock->setVisible(false);
+
+ SETUP_DOCK(ui->scenesDock);
+ SETUP_DOCK(ui->sourcesDock);
+ SETUP_DOCK(ui->mixerDock);
+ SETUP_DOCK(ui->transitionsDock);
+ SETUP_DOCK(ui->controlsDock);
+ SETUP_DOCK(statsDock);
+#undef SETUP_DOCK
// Register shortcuts for Undo/Redo
ui->actionMainUndo->setShortcut(Qt::CTRL | Qt::Key_Z);
@@ -440,14 +474,6 @@ OBSBasic::OBSBasic(QWidget *parent)
ui->actionMainUndo->setShortcutContext(Qt::ApplicationShortcut);
ui->actionMainRedo->setShortcutContext(Qt::ApplicationShortcut);
- //hide all docking panes
- ui->toggleScenes->setChecked(false);
- ui->toggleSources->setChecked(false);
- ui->toggleMixer->setChecked(false);
- ui->toggleTransitions->setChecked(false);
- ui->toggleControls->setChecked(false);
- ui->toggleStats->setChecked(false);
-
QPoint curPos;
//restore parent window geometry
@@ -2015,10 +2041,12 @@ void OBSBasic::OBSInit()
QAction *action = new QAction(QTStr("Basic.MainMenu.Docks."
"CustomBrowserDocks"),
this);
- ui->menuDocks->insertAction(ui->toggleScenes, action);
+ ui->menuDocks->insertAction(ui->scenesDock->toggleViewAction(),
+ action);
connect(action, &QAction::triggered, this,
&OBSBasic::ManageExtraBrowserDocks);
- ui->menuDocks->insertSeparator(ui->toggleScenes);
+ ui->menuDocks->insertSeparator(
+ ui->scenesDock->toggleViewAction());
LoadExtraBrowserDocks();
}