diff --git a/src/browser/BrowserService.cpp b/src/browser/BrowserService.cpp index b83af627..b7e4ffe7 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 6de5e49b..159a2cec 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;