From 92a7fe33bd902cf292d31cae673eb4ba04ec4c97 Mon Sep 17 00:00:00 2001 From: varjolintu Date: Mon, 28 Oct 2019 10:52:03 +0200 Subject: [PATCH] Use unlock dialog when unlocking a database from browser extension --- src/browser/BrowserService.cpp | 26 ++++++++++++++++++-------- src/browser/BrowserService.h | 5 ++++- src/gui/DatabaseTabWidget.cpp | 8 ++++++++ src/gui/DatabaseTabWidget.h | 1 + src/gui/MainWindow.cpp | 2 ++ 5 files changed, 33 insertions(+), 9 deletions(-) diff --git a/src/browser/BrowserService.cpp b/src/browser/BrowserService.cpp index 7f85af970d..c78744e0bc 100644 --- a/src/browser/BrowserService.cpp +++ b/src/browser/BrowserService.cpp @@ -64,7 +64,6 @@ BrowserService::BrowserService() : QObject() , m_browserHost(new BrowserHost) , m_dialogActive(false) - , m_bringToFrontRequested(false) , m_prevWindowState(WindowState::Normal) , m_keepassBrowserUUID(Tools::hexToUuid("de887cc3036343b8974b5911b8816224")) { @@ -110,8 +109,7 @@ bool BrowserService::openDatabase(bool triggerUnlock) } if (triggerUnlock) { - m_bringToFrontRequested = true; - raiseWindow(true); + emit requestUnlock(); } return false; @@ -1220,6 +1218,23 @@ void BrowserService::raiseWindow(const bool force) #endif } +void BrowserService::updateWindowState() +{ + m_prevWindowState = WindowState::Normal; + if (getMainWindow()->isMinimized()) { + m_prevWindowState = WindowState::Minimized; + } +#ifdef Q_OS_MACOS + if (macUtils()->isHidden()) { + m_prevWindowState = WindowState::Hidden; + } +#else + if (getMainWindow()->isHidden()) { + m_prevWindowState = WindowState::Hidden; + } +#endif +} + void BrowserService::databaseLocked(DatabaseWidget* dbWidget) { if (dbWidget) { @@ -1232,11 +1247,6 @@ void BrowserService::databaseLocked(DatabaseWidget* dbWidget) void BrowserService::databaseUnlocked(DatabaseWidget* dbWidget) { if (dbWidget) { - if (m_bringToFrontRequested) { - hideWindow(); - m_bringToFrontRequested = false; - } - QJsonObject msg; msg["action"] = QString("database-unlocked"); m_browserHost->sendClientMessage(msg); diff --git a/src/browser/BrowserService.h b/src/browser/BrowserService.h index c94cb70cad..1a9af80820 100644 --- a/src/browser/BrowserService.h +++ b/src/browser/BrowserService.h @@ -91,6 +91,9 @@ class BrowserService : public QObject static const QString OPTION_ONLY_HTTP_AUTH; static const QString ADDITIONAL_URL; +signals: + void requestUnlock(); + public slots: void databaseLocked(DatabaseWidget* dbWidget); void databaseUnlocked(DatabaseWidget* dbWidget); @@ -142,6 +145,7 @@ private slots: void hideWindow() const; void raiseWindow(const bool force = false); + void updateWindowState(); static bool moveSettingsToCustomData(Entry* entry, const QString& name); static int moveKeysToCustomData(Entry* entry, QSharedPointer db); @@ -150,7 +154,6 @@ private slots: QHash> m_browserClients; bool m_dialogActive; - bool m_bringToFrontRequested; WindowState m_prevWindowState; QUuid m_keepassBrowserUUID; diff --git a/src/gui/DatabaseTabWidget.cpp b/src/gui/DatabaseTabWidget.cpp index f484815aff..2a873dbb24 100644 --- a/src/gui/DatabaseTabWidget.cpp +++ b/src/gui/DatabaseTabWidget.cpp @@ -755,3 +755,11 @@ void DatabaseTabWidget::performGlobalAutoType() unlockDatabaseInDialog(currentDatabaseWidget(), DatabaseOpenDialog::Intent::AutoType); } } + +void DatabaseTabWidget::performBrowserUnlock() +{ + auto dbWidget = currentDatabaseWidget(); + if (dbWidget && dbWidget->isLocked()) { + unlockDatabaseInDialog(dbWidget, DatabaseOpenDialog::Intent::Browser); + } +} diff --git a/src/gui/DatabaseTabWidget.h b/src/gui/DatabaseTabWidget.h index d7c6569088..64d1543504 100644 --- a/src/gui/DatabaseTabWidget.h +++ b/src/gui/DatabaseTabWidget.h @@ -82,6 +82,7 @@ public slots: void changeReports(); void changeDatabaseSettings(); void performGlobalAutoType(); + void performBrowserUnlock(); signals: void databaseOpened(DatabaseWidget* dbWidget); diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index d232a91acd..c52298377c 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -144,6 +144,8 @@ MainWindow::MainWindow() &DatabaseTabWidget::activateDatabaseChanged, browserService(), &BrowserService::activeDatabaseChanged); + connect( + browserService(), &BrowserService::requestUnlock, m_ui->tabWidget, &DatabaseTabWidget::performBrowserUnlock); #endif #ifdef WITH_XC_SSHAGENT