mirror of
https://github.com/keepassxreboot/keepassxc.git
synced 2024-12-25 23:39:45 -05:00
Hide the menubar when menus lose focus (if toggled off)
* Fixes #10768 * Also fix menubar toggling not working if Qt version is less than 5.15
This commit is contained in:
parent
34fe413dad
commit
5d24495704
@ -553,14 +553,12 @@ MainWindow::MainWindow()
|
|||||||
|
|
||||||
connect(osUtils, &OSUtilsBase::statusbarThemeChanged, this, &MainWindow::updateTrayIcon);
|
connect(osUtils, &OSUtilsBase::statusbarThemeChanged, this, &MainWindow::updateTrayIcon);
|
||||||
|
|
||||||
#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)
|
// Install event filter for empty-area drag and menubar toggle
|
||||||
// Install event filter for empty-area drag
|
|
||||||
auto* eventFilter = new MainWindowEventFilter(this);
|
auto* eventFilter = new MainWindowEventFilter(this);
|
||||||
m_ui->menubar->installEventFilter(eventFilter);
|
m_ui->menubar->installEventFilter(eventFilter);
|
||||||
m_ui->toolBar->installEventFilter(eventFilter);
|
m_ui->toolBar->installEventFilter(eventFilter);
|
||||||
m_ui->tabWidget->tabBar()->installEventFilter(eventFilter);
|
m_ui->tabWidget->tabBar()->installEventFilter(eventFilter);
|
||||||
installEventFilter(eventFilter);
|
installEventFilter(eventFilter);
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef Q_OS_MACOS
|
#ifdef Q_OS_MACOS
|
||||||
setUnifiedTitleAndToolBarOnMac(true);
|
setUnifiedTitleAndToolBarOnMac(true);
|
||||||
@ -2119,11 +2117,29 @@ void MainWindow::initActionCollection()
|
|||||||
QTimer::singleShot(1, ac, &ActionCollection::restoreShortcuts);
|
QTimer::singleShot(1, ac, &ActionCollection::restoreShortcuts);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)
|
|
||||||
|
|
||||||
MainWindowEventFilter::MainWindowEventFilter(QObject* parent)
|
MainWindowEventFilter::MainWindowEventFilter(QObject* parent)
|
||||||
: QObject(parent)
|
: QObject(parent)
|
||||||
{
|
{
|
||||||
|
m_altCoolDown.setInterval(250);
|
||||||
|
m_altCoolDown.setSingleShot(true);
|
||||||
|
|
||||||
|
m_menubarTimer.setInterval(250);
|
||||||
|
m_menubarTimer.setSingleShot(false);
|
||||||
|
connect(&m_menubarTimer, &QTimer::timeout, this, [this] {
|
||||||
|
auto mainwindow = getMainWindow();
|
||||||
|
if (mainwindow && mainwindow->m_ui->menubar->isVisible() && config()->get(Config::GUI_HideMenubar).toBool()) {
|
||||||
|
// If the menu bar is visible with no active menu, hide it
|
||||||
|
if (!mainwindow->m_ui->menubar->activeAction()) {
|
||||||
|
mainwindow->m_ui->menubar->setVisible(false);
|
||||||
|
m_altCoolDown.start();
|
||||||
|
m_menubarTimer.stop();
|
||||||
|
}
|
||||||
|
// Conditions to hide the menubar or stop the timer have not been met
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// We no longer need the timer
|
||||||
|
m_menubarTimer.stop();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -2139,6 +2155,8 @@ bool MainWindowEventFilter::eventFilter(QObject* watched, QEvent* event)
|
|||||||
|
|
||||||
auto eventType = event->type();
|
auto eventType = event->type();
|
||||||
if (eventType == QEvent::MouseButtonPress) {
|
if (eventType == QEvent::MouseButtonPress) {
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)
|
||||||
|
// startSystemMove was introduced in Qt 5.15
|
||||||
auto mouseEvent = dynamic_cast<QMouseEvent*>(event);
|
auto mouseEvent = dynamic_cast<QMouseEvent*>(event);
|
||||||
if (watched == mainWindow->m_ui->menubar) {
|
if (watched == mainWindow->m_ui->menubar) {
|
||||||
if (!mainWindow->m_ui->menubar->actionAt(mouseEvent->pos())) {
|
if (!mainWindow->m_ui->menubar->actionAt(mouseEvent->pos())) {
|
||||||
@ -2156,22 +2174,22 @@ bool MainWindowEventFilter::eventFilter(QObject* watched, QEvent* event)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (eventType == QEvent::KeyRelease) {
|
#endif
|
||||||
if (watched == mainWindow) {
|
} else if (eventType == QEvent::KeyRelease && watched == mainWindow) {
|
||||||
auto keyEvent = dynamic_cast<QKeyEvent*>(event);
|
auto keyEvent = dynamic_cast<QKeyEvent*>(event);
|
||||||
if (keyEvent->key() == Qt::Key_Alt && !keyEvent->modifiers()
|
if (keyEvent->key() == Qt::Key_Alt && !keyEvent->modifiers() && config()->get(Config::GUI_HideMenubar).toBool()
|
||||||
&& config()->get(Config::GUI_HideMenubar).toBool()) {
|
&& !m_altCoolDown.isActive()) {
|
||||||
auto menubar = mainWindow->m_ui->menubar;
|
auto menubar = mainWindow->m_ui->menubar;
|
||||||
menubar->setVisible(!menubar->isVisible());
|
menubar->setVisible(!menubar->isVisible());
|
||||||
if (menubar->isVisible()) {
|
if (menubar->isVisible()) {
|
||||||
menubar->setActiveAction(mainWindow->m_ui->menuFile->menuAction());
|
menubar->setActiveAction(mainWindow->m_ui->menuFile->menuAction());
|
||||||
|
m_menubarTimer.start();
|
||||||
|
} else {
|
||||||
|
m_menubarTimer.stop();
|
||||||
}
|
}
|
||||||
return false;
|
return true;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return QObject::eventFilter(watched, event);
|
return QObject::eventFilter(watched, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
|
||||||
|
@ -206,7 +206,6 @@ private:
|
|||||||
friend class MainWindowEventFilter;
|
friend class MainWindowEventFilter;
|
||||||
};
|
};
|
||||||
|
|
||||||
#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)
|
|
||||||
class MainWindowEventFilter : public QObject
|
class MainWindowEventFilter : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
@ -214,8 +213,11 @@ class MainWindowEventFilter : public QObject
|
|||||||
public:
|
public:
|
||||||
explicit MainWindowEventFilter(QObject* parent);
|
explicit MainWindowEventFilter(QObject* parent);
|
||||||
bool eventFilter(QObject* watched, QEvent* event) override;
|
bool eventFilter(QObject* watched, QEvent* event) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
QTimer m_menubarTimer;
|
||||||
|
QTimer m_altCoolDown;
|
||||||
};
|
};
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return instance of MainWindow created on app load
|
* Return instance of MainWindow created on app load
|
||||||
|
Loading…
Reference in New Issue
Block a user