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(); }