From a542ded97cf6cd7dcd7d786d901f1821fa3c520f Mon Sep 17 00:00:00 2001 From: Mikko Saarinki Date: Sun, 28 Apr 2024 05:09:38 +0300 Subject: [PATCH] QMenubar option to show/hide itself (#10341) -------- Co-authored-by: Mikko Saarinki Co-authored-by: Jonathan White --- share/translations/keepassxc_en.ts | 18 ++++++++++---- src/core/Config.cpp | 1 + src/core/Config.h | 1 + src/gui/MainWindow.cpp | 39 ++++++++++++++++++++++++++---- src/gui/MainWindow.ui | 15 ++++++++++++ 5 files changed, 64 insertions(+), 10 deletions(-) diff --git a/share/translations/keepassxc_en.ts b/share/translations/keepassxc_en.ts index 41787c6e5..417b8e6fb 100644 --- a/share/translations/keepassxc_en.ts +++ b/share/translations/keepassxc_en.ts @@ -3659,11 +3659,6 @@ This may cause the affected plugins to malfunction. Confirm Overwrite Attachment - - Attachment "%1" already exists. -Would you like to overwrite the existing attachment? - - Confirm Attachment @@ -3693,6 +3688,11 @@ Do you want to save the changes to your database? Error: %1 + + Attachment "%1" already exists. +Would you like to overwrite the existing attachment? + + EntryAttributesModel @@ -5465,6 +5465,10 @@ Are you sure you want to continue with this file? Classic (Platform-native) + + Show Menubar + + Show Toolbar @@ -5815,6 +5819,10 @@ We recommend you use the AppImage available on our downloads page. Set Theme: Classic + + Toggle Show Menubar + + Toggle Show Toolbar diff --git a/src/core/Config.cpp b/src/core/Config.cpp index 24b122be4..b446ace1f 100644 --- a/src/core/Config.cpp +++ b/src/core/Config.cpp @@ -92,6 +92,7 @@ static const QHash configStrings = { // GUI {Config::GUI_Language, {QS("GUI/Language"), Roaming, QS("system")}}, + {Config::GUI_HideMenubar, {QS("GUI/HideMenubar"), Roaming, false}}, {Config::GUI_HideToolbar, {QS("GUI/HideToolbar"), Roaming, false}}, {Config::GUI_MovableToolbar, {QS("GUI/MovableToolbar"), Roaming, false}}, {Config::GUI_HidePreviewPanel, {QS("GUI/HidePreviewPanel"), Roaming, false}}, diff --git a/src/core/Config.h b/src/core/Config.h index 8ca18fe29..8da4c0f37 100644 --- a/src/core/Config.h +++ b/src/core/Config.h @@ -74,6 +74,7 @@ public: LastDir, GUI_Language, + GUI_HideMenubar, GUI_HideToolbar, GUI_MovableToolbar, GUI_HidePreviewPanel, diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index bf4c16ec5..d576ff70a 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -549,6 +549,7 @@ MainWindow::MainWindow() m_ui->menubar->installEventFilter(eventFilter); m_ui->toolBar->installEventFilter(eventFilter); m_ui->tabWidget->tabBar()->installEventFilter(eventFilter); + installEventFilter(eventFilter); #endif #ifdef Q_OS_MACOS @@ -1632,6 +1633,7 @@ void MainWindow::applySettingsChanges() m_inactivityTimer->deactivate(); } + m_ui->menubar->setHidden(config()->get(Config::GUI_HideMenubar).toBool()); m_ui->toolBar->setHidden(config()->get(Config::GUI_HideToolbar).toBool()); auto movable = config()->get(Config::GUI_MovableToolbar).toBool(); m_ui->toolBar->setMovable(movable); @@ -1994,6 +1996,16 @@ void MainWindow::initViewMenu() } }); +#ifdef Q_OS_MACOS + m_ui->actionShowMenubar->setVisible(false); +#else + m_ui->actionShowMenubar->setChecked(!config()->get(Config::GUI_HideMenubar).toBool()); + connect(m_ui->actionShowMenubar, &QAction::toggled, this, [this](bool checked) { + config()->set(Config::GUI_HideMenubar, !checked); + applySettingsChanges(); + }); +#endif + m_ui->actionShowToolbar->setChecked(!config()->get(Config::GUI_HideToolbar).toBool()); connect(m_ui->actionShowToolbar, &QAction::toggled, this, [this](bool checked) { config()->set(Config::GUI_HideToolbar, !checked); @@ -2099,6 +2111,9 @@ void MainWindow::initActionCollection() m_ui->actionThemeDark, m_ui->actionThemeClassic, m_ui->actionCompactMode, +#ifndef Q_OS_MACOS + m_ui->actionShowMenubar, +#endif m_ui->actionShowToolbar, m_ui->actionShowPreviewPanel, m_ui->actionAllowScreenCapture, @@ -2176,6 +2191,7 @@ MainWindowEventFilter::MainWindowEventFilter(QObject* parent) /** * MainWindow event filter to initiate empty-area drag on the toolbar, menubar, and tabbar. + * Also shows menubar with Alt when menubar itself is hidden. */ bool MainWindowEventFilter::eventFilter(QObject* watched, QEvent* event) { @@ -2184,10 +2200,11 @@ bool MainWindowEventFilter::eventFilter(QObject* watched, QEvent* event) return QObject::eventFilter(watched, event); } - if (event->type() == QEvent::MouseButtonPress) { + auto eventType = event->type(); + if (eventType == QEvent::MouseButtonPress) { + auto mouseEvent = dynamic_cast(event); if (watched == mainWindow->m_ui->menubar) { - auto* m = static_cast(event); - if (!mainWindow->m_ui->menubar->actionAt(m->pos())) { + if (!mainWindow->m_ui->menubar->actionAt(mouseEvent->pos())) { mainWindow->windowHandle()->startSystemMove(); return false; } @@ -2197,12 +2214,24 @@ bool MainWindowEventFilter::eventFilter(QObject* watched, QEvent* event) return false; } } else if (watched == mainWindow->m_ui->tabWidget->tabBar()) { - auto* m = static_cast(event); - if (mainWindow->m_ui->tabWidget->tabBar()->tabAt(m->pos()) == -1) { + if (mainWindow->m_ui->tabWidget->tabBar()->tabAt(mouseEvent->pos()) == -1) { mainWindow->windowHandle()->startSystemMove(); return true; } } + } else if (eventType == QEvent::KeyRelease) { + if (watched == mainWindow) { + auto keyEvent = dynamic_cast(event); + if (keyEvent->key() == Qt::Key_Alt && !keyEvent->modifiers() + && config()->get(Config::GUI_HideMenubar).toBool()) { + auto menubar = mainWindow->m_ui->menubar; + menubar->setVisible(!menubar->isVisible()); + if (menubar->isVisible()) { + menubar->setActiveAction(mainWindow->m_ui->menuFile->menuAction()); + } + return false; + } + } } return QObject::eventFilter(watched, event); diff --git a/src/gui/MainWindow.ui b/src/gui/MainWindow.ui index e1e1843a0..69606b856 100644 --- a/src/gui/MainWindow.ui +++ b/src/gui/MainWindow.ui @@ -384,6 +384,7 @@ + @@ -1130,6 +1131,20 @@ Set Theme: Classic + + + true + + + true + + + Show Menubar + + + Toggle Show Menubar + + true