diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index e5f5ea61..3127fe04 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -253,6 +253,9 @@ MainWindow::MainWindow() m_ui->actionEntryCopyURL->setShortcutVisibleInContextMenu(true); #endif + connect(m_ui->menuEntries, SIGNAL(aboutToHide()), SLOT(releaseContextFocusLock())); + connect(m_ui->menuGroups, SIGNAL(aboutToHide()), SLOT(releaseContextFocusLock())); + // Control window state new QShortcut(Qt::CTRL + Qt::Key_M, this, SLOT(showMinimized())); new QShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_M, this, SLOT(hideWindow())); @@ -543,8 +546,8 @@ void MainWindow::setMenuActionState(DatabaseWidget::Mode mode) switch (mode) { case DatabaseWidget::Mode::ViewMode: { // bool inSearch = dbWidget->isInSearchMode(); - bool singleEntrySelected = dbWidget->numberOfSelectedEntries() == 1 && dbWidget->currentEntryHasFocus(); - bool entriesSelected = dbWidget->numberOfSelectedEntries() > 0 && dbWidget->currentEntryHasFocus(); + bool singleEntrySelected = dbWidget->numberOfSelectedEntries() == 1 && (m_contextMenuFocusLock || dbWidget->currentEntryHasFocus()); + bool entriesSelected = dbWidget->numberOfSelectedEntries() > 0 && (m_contextMenuFocusLock || dbWidget->currentEntryHasFocus()); bool groupSelected = dbWidget->isGroupSelected(); bool recycleBinSelected = dbWidget->isRecycleBinSelected(); @@ -985,13 +988,20 @@ void MainWindow::updateTrayIcon() } } +void MainWindow::releaseContextFocusLock() +{ + m_contextMenuFocusLock = false; +} + void MainWindow::showEntryContextMenu(const QPoint& globalPos) { + m_contextMenuFocusLock = true; m_ui->menuEntries->popup(globalPos); } void MainWindow::showGroupContextMenu(const QPoint& globalPos) { + m_contextMenuFocusLock = true; m_ui->menuGroups->popup(globalPos); } diff --git a/src/gui/MainWindow.h b/src/gui/MainWindow.h index f1e54346..95405f47 100644 --- a/src/gui/MainWindow.h +++ b/src/gui/MainWindow.h @@ -117,6 +117,7 @@ private slots: void selectPreviousDatabaseTab(); void togglePasswordsHidden(); void toggleUsernamesHidden(); + void releaseContextFocusLock(); private: static void setShortcut(QAction* action, QKeySequence::StandardKey standard, int fallback = 0); @@ -148,6 +149,7 @@ private: bool m_appExitCalled; bool m_appExiting; + bool m_contextMenuFocusLock; uint m_lastFocusOutTime; QTimer m_trayIconTriggerTimer; QSystemTrayIcon::ActivationReason m_trayIconTriggerReason;