mirror of
https://github.com/keepassxreboot/keepassxc.git
synced 2025-02-17 13:02:49 -05:00
Prevent context menu options from disabling with keyboard navigation
* Fixes #2838 * When navigating the entry context menu with up/down arrow the options would disable due to losing focus on the EntryView. This change preserves the "focus" during this event.
This commit is contained in:
parent
3d5879b8ed
commit
91283e7c76
@ -253,6 +253,9 @@ MainWindow::MainWindow()
|
|||||||
m_ui->actionEntryCopyURL->setShortcutVisibleInContextMenu(true);
|
m_ui->actionEntryCopyURL->setShortcutVisibleInContextMenu(true);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
connect(m_ui->menuEntries, SIGNAL(aboutToHide()), SLOT(releaseContextFocusLock()));
|
||||||
|
connect(m_ui->menuGroups, SIGNAL(aboutToHide()), SLOT(releaseContextFocusLock()));
|
||||||
|
|
||||||
// Control window state
|
// Control window state
|
||||||
new QShortcut(Qt::CTRL + Qt::Key_M, this, SLOT(showMinimized()));
|
new QShortcut(Qt::CTRL + Qt::Key_M, this, SLOT(showMinimized()));
|
||||||
new QShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_M, this, SLOT(hideWindow()));
|
new QShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_M, this, SLOT(hideWindow()));
|
||||||
@ -543,8 +546,8 @@ void MainWindow::setMenuActionState(DatabaseWidget::Mode mode)
|
|||||||
switch (mode) {
|
switch (mode) {
|
||||||
case DatabaseWidget::Mode::ViewMode: {
|
case DatabaseWidget::Mode::ViewMode: {
|
||||||
// bool inSearch = dbWidget->isInSearchMode();
|
// bool inSearch = dbWidget->isInSearchMode();
|
||||||
bool singleEntrySelected = dbWidget->numberOfSelectedEntries() == 1 && dbWidget->currentEntryHasFocus();
|
bool singleEntrySelected = dbWidget->numberOfSelectedEntries() == 1 && (m_contextMenuFocusLock || dbWidget->currentEntryHasFocus());
|
||||||
bool entriesSelected = dbWidget->numberOfSelectedEntries() > 0 && dbWidget->currentEntryHasFocus();
|
bool entriesSelected = dbWidget->numberOfSelectedEntries() > 0 && (m_contextMenuFocusLock || dbWidget->currentEntryHasFocus());
|
||||||
bool groupSelected = dbWidget->isGroupSelected();
|
bool groupSelected = dbWidget->isGroupSelected();
|
||||||
bool recycleBinSelected = dbWidget->isRecycleBinSelected();
|
bool recycleBinSelected = dbWidget->isRecycleBinSelected();
|
||||||
|
|
||||||
@ -985,13 +988,20 @@ void MainWindow::updateTrayIcon()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindow::releaseContextFocusLock()
|
||||||
|
{
|
||||||
|
m_contextMenuFocusLock = false;
|
||||||
|
}
|
||||||
|
|
||||||
void MainWindow::showEntryContextMenu(const QPoint& globalPos)
|
void MainWindow::showEntryContextMenu(const QPoint& globalPos)
|
||||||
{
|
{
|
||||||
|
m_contextMenuFocusLock = true;
|
||||||
m_ui->menuEntries->popup(globalPos);
|
m_ui->menuEntries->popup(globalPos);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::showGroupContextMenu(const QPoint& globalPos)
|
void MainWindow::showGroupContextMenu(const QPoint& globalPos)
|
||||||
{
|
{
|
||||||
|
m_contextMenuFocusLock = true;
|
||||||
m_ui->menuGroups->popup(globalPos);
|
m_ui->menuGroups->popup(globalPos);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -117,6 +117,7 @@ private slots:
|
|||||||
void selectPreviousDatabaseTab();
|
void selectPreviousDatabaseTab();
|
||||||
void togglePasswordsHidden();
|
void togglePasswordsHidden();
|
||||||
void toggleUsernamesHidden();
|
void toggleUsernamesHidden();
|
||||||
|
void releaseContextFocusLock();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static void setShortcut(QAction* action, QKeySequence::StandardKey standard, int fallback = 0);
|
static void setShortcut(QAction* action, QKeySequence::StandardKey standard, int fallback = 0);
|
||||||
@ -148,6 +149,7 @@ private:
|
|||||||
|
|
||||||
bool m_appExitCalled;
|
bool m_appExitCalled;
|
||||||
bool m_appExiting;
|
bool m_appExiting;
|
||||||
|
bool m_contextMenuFocusLock;
|
||||||
uint m_lastFocusOutTime;
|
uint m_lastFocusOutTime;
|
||||||
QTimer m_trayIconTriggerTimer;
|
QTimer m_trayIconTriggerTimer;
|
||||||
QSystemTrayIcon::ActivationReason m_trayIconTriggerReason;
|
QSystemTrayIcon::ActivationReason m_trayIconTriggerReason;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user