From 6f0280afc2d3e15df7f5e56f8cc706ad29df86ae Mon Sep 17 00:00:00 2001 From: Silent Date: Tue, 28 Feb 2023 19:53:31 +0100 Subject: [PATCH] Qt: Add a context menu to the toolbar's Settings button when the game is running A new small context menu that allows to select between global settings and game settings. --- src/duckstation-qt/mainwindow.cpp | 17 +++++++++++++++++ src/duckstation-qt/mainwindow.h | 4 ++++ src/duckstation-qt/mainwindow.ui | 19 +++++++++++++++++-- 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/src/duckstation-qt/mainwindow.cpp b/src/duckstation-qt/mainwindow.cpp index 74389cff8..fff5d8f5f 100644 --- a/src/duckstation-qt/mainwindow.cpp +++ b/src/duckstation-qt/mainwindow.cpp @@ -1555,6 +1555,10 @@ void MainWindow::setupAdditionalUi() m_status_vps_widget->setFixedSize(125, 16); m_status_vps_widget->hide(); + m_settings_toolbar_menu = new QMenu(m_ui.toolBar); + m_settings_toolbar_menu->addAction(m_ui.actionSettings); + m_settings_toolbar_menu->addAction(m_ui.actionViewGameProperties); + m_ui.actionGridViewShowTitles->setChecked(m_game_list_widget->getShowGridCoverTitles()); updateDebugMenuVisibility(); @@ -1943,6 +1947,7 @@ void MainWindow::connectSignals() connect(m_ui.actionExit, &QAction::triggered, this, &MainWindow::close); connect(m_ui.actionFullscreen, &QAction::triggered, g_emu_thread, &EmuThread::toggleFullscreen); connect(m_ui.actionSettings, &QAction::triggered, [this]() { doSettings(); }); + connect(m_ui.actionSettings2, &QAction::triggered, this, &MainWindow::onSettingsTriggeredFromToolbar); connect(m_ui.actionGeneralSettings, &QAction::triggered, [this]() { doSettings("General"); }); connect(m_ui.actionBIOSSettings, &QAction::triggered, [this]() { doSettings("BIOS"); }); connect(m_ui.actionConsoleSettings, &QAction::triggered, [this]() { doSettings("Console"); }); @@ -2750,6 +2755,18 @@ void MainWindow::onToolsOpenDataDirectoryTriggered() QtUtils::OpenURL(this, QUrl::fromLocalFile(QString::fromStdString(EmuFolders::DataRoot))); } +void MainWindow::onSettingsTriggeredFromToolbar() +{ + if (s_system_valid) + { + m_settings_toolbar_menu->exec(QCursor::pos()); + } + else + { + doSettings(); + } +} + void MainWindow::checkForUpdates(bool display_message) { if (!AutoUpdaterDialog::isSupported()) diff --git a/src/duckstation-qt/mainwindow.h b/src/duckstation-qt/mainwindow.h index ec1aa123f..ff61056a1 100644 --- a/src/duckstation-qt/mainwindow.h +++ b/src/duckstation-qt/mainwindow.h @@ -5,6 +5,7 @@ #include #include #include +#include #include #include #include @@ -156,6 +157,7 @@ private Q_SLOTS: void onToolsCoverDownloaderTriggered(); void onToolsCheatManagerTriggered(); void onToolsOpenDataDirectoryTriggered(); + void onSettingsTriggeredFromToolbar(); void onGameListRefreshComplete(); void onGameListRefreshProgress(const QString& status, int current, int total); @@ -264,6 +266,8 @@ private: QLabel* m_status_vps_widget = nullptr; QLabel* m_status_resolution_widget = nullptr; + QMenu* m_settings_toolbar_menu = nullptr; + SettingsDialog* m_settings_dialog = nullptr; ControllerSettingsDialog* m_controller_settings_dialog = nullptr; diff --git a/src/duckstation-qt/mainwindow.ui b/src/duckstation-qt/mainwindow.ui index cf1f8e42c..801d72072 100644 --- a/src/duckstation-qt/mainwindow.ui +++ b/src/duckstation-qt/mainwindow.ui @@ -277,7 +277,7 @@ - + @@ -610,7 +610,22 @@ .. - &Settings... + &Settings + + + QAction::PreferencesRole + + + + + + .. + + + &Settings + + + QAction::PreferencesRole