From e27bdbdbd4985cd34307efdfb71773db48eaf46f Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Sat, 26 Oct 2019 14:02:59 -0400 Subject: [PATCH] Additional fixes for entry context menu * Fix #3670 * Obtain context focus lock when showing new context menus --- src/gui/MainWindow.cpp | 19 ++++++++++++++++++- src/gui/MainWindow.h | 1 + 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index b33b322bca..0d53d88a85 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -179,6 +179,9 @@ MainWindow::MainWindow() m_entryContextMenu->addAction(m_ui->actionEntryOpenUrl); m_entryContextMenu->addAction(m_ui->actionEntryDownloadIcon); + m_entryNewContextMenu = new QMenu(this); + m_entryNewContextMenu->addAction(m_ui->actionEntryNew); + restoreGeometry(config()->get("GUI/MainWindowGeometry").toByteArray()); restoreState(config()->get("GUI/MainWindowState").toByteArray()); #ifdef WITH_XC_BROWSER @@ -284,6 +287,10 @@ MainWindow::MainWindow() connect(m_ui->menuEntries, SIGNAL(aboutToShow()), SLOT(obtainContextFocusLock())); connect(m_ui->menuEntries, SIGNAL(aboutToHide()), SLOT(releaseContextFocusLock())); + connect(m_entryContextMenu, SIGNAL(aboutToShow()), SLOT(obtainContextFocusLock())); + connect(m_entryContextMenu, SIGNAL(aboutToHide()), SLOT(releaseContextFocusLock())); + connect(m_entryNewContextMenu, SIGNAL(aboutToShow()), SLOT(obtainContextFocusLock())); + connect(m_entryNewContextMenu, SIGNAL(aboutToHide()), SLOT(releaseContextFocusLock())); connect(m_ui->menuGroups, SIGNAL(aboutToShow()), SLOT(obtainContextFocusLock())); connect(m_ui->menuGroups, SIGNAL(aboutToHide()), SLOT(releaseContextFocusLock())); @@ -1119,7 +1126,17 @@ void MainWindow::releaseContextFocusLock() void MainWindow::showEntryContextMenu(const QPoint& globalPos) { - m_entryContextMenu->popup(globalPos); + bool entrySelected = false; + auto dbWidget = m_ui->tabWidget->currentDatabaseWidget(); + if (dbWidget) { + entrySelected = dbWidget->currentEntryHasFocus(); + } + + if (entrySelected) { + m_entryContextMenu->popup(globalPos); + } else { + m_entryNewContextMenu->popup(globalPos); + } } void MainWindow::showGroupContextMenu(const QPoint& globalPos) diff --git a/src/gui/MainWindow.h b/src/gui/MainWindow.h index 81604e1762..89501eff37 100644 --- a/src/gui/MainWindow.h +++ b/src/gui/MainWindow.h @@ -147,6 +147,7 @@ private slots: QPointer m_clearHistoryAction; QPointer m_searchWidgetAction; QPointer m_entryContextMenu; + QPointer m_entryNewContextMenu; QPointer m_lastDatabasesActions; QPointer m_copyAdditionalAttributeActions; QPointer m_inactivityTimer;