From 48bf4fb85d05c6a7b9540dc71d9f52c7e32c4554 Mon Sep 17 00:00:00 2001 From: varjolintu Date: Fri, 24 Apr 2020 18:38:33 +0300 Subject: [PATCH] Fix annoyances with access control dialog * Don't send database locked/unlocked messages when "search in all databases" is enabled * After access control dialog closes, only hide main window on macOS, and then only if previously hidden. --- src/browser/BrowserService.cpp | 21 ++++++++++++++++++--- src/browser/BrowserService.h | 1 - 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/browser/BrowserService.cpp b/src/browser/BrowserService.cpp index b83af627a..b7e4ffe73 100644 --- a/src/browser/BrowserService.cpp +++ b/src/browser/BrowserService.cpp @@ -755,9 +755,12 @@ QList BrowserService::confirmEntries(QList& pwEntriesToConfirm, } m_dialogActive = true; + bool wasAppActive = qApp->activeWindow() == getMainWindow()->window(); BrowserAccessControlDialog accessControlDialog; connect(m_currentDatabaseWidget, SIGNAL(databaseLocked()), &accessControlDialog, SLOT(reject())); + connect(this, SIGNAL(activeDatabaseChanged()), &accessControlDialog, SLOT(reject())); + connect(&accessControlDialog, &BrowserAccessControlDialog::disableAccess, [&](QTableWidgetItem* item) { auto entry = pwEntriesToConfirm[item->row()]; BrowserEntryConfig config; @@ -795,8 +798,18 @@ QList BrowserService::confirmEntries(QList& pwEntriesToConfirm, } } +#ifdef Q_OS_MAC + // Re-hide the application if it wasn't visible before + // only affects macOS because dialogs force the main window to show + if (!wasAppActive) { + hideWindow(); + } +#else + Q_UNUSED(wasAppActive); +#endif + m_dialogActive = false; - hideWindow(); + return allowedEntries; } @@ -1238,14 +1251,16 @@ void BrowserService::databaseUnlocked(DatabaseWidget* dbWidget) void BrowserService::activeDatabaseChanged(DatabaseWidget* dbWidget) { - m_currentDatabaseWidget = dbWidget; - if (dbWidget) { + // Only emit these signals when we are not searching in all databases + if (dbWidget && !browserSettings()->searchInAllDatabases()) { if (dbWidget->isLocked()) { databaseLocked(dbWidget); } else { databaseUnlocked(dbWidget); } } + + m_currentDatabaseWidget = dbWidget; } void BrowserService::processClientMessage(const QJsonObject& message) diff --git a/src/browser/BrowserService.h b/src/browser/BrowserService.h index 6de5e49bf..159a2cec2 100644 --- a/src/browser/BrowserService.h +++ b/src/browser/BrowserService.h @@ -34,7 +34,6 @@ enum max_length = 16 * 1024 }; -class DatabaseTabWidget; class DatabaseWidget; class BrowserHost; class BrowserAction;