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.
-
-
-
-
@@ -3693,6 +3688,11 @@ Do you want to save the changes to your database?
Error: %1
+
+
+
+
EntryAttributesModel
@@ -5465,6 +5465,10 @@ Are you sure you want to continue with this file?
+
+
+
+
@@ -5815,6 +5819,10 @@ We recommend you use the AppImage available on our downloads page.
+
+
+
+
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