From 485c446013a2b488fd35b3a7b4022a2f4dc92d8f Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Mon, 29 Apr 2024 07:37:35 -0400 Subject: [PATCH] Fix password generator close button for good * Avoids using QDialog which breaks the standalone password generator Revert "Fix password dialog close button" This reverts commit 5b47190fcc4b2f51fb11849cef7f53346e8fe439. --- src/browser/BrowserAction.cpp | 2 ++ src/browser/BrowserService.cpp | 12 ++++-------- src/browser/BrowserService.h | 3 +-- src/gui/PasswordGeneratorWidget.cpp | 2 +- src/gui/PasswordGeneratorWidget.h | 4 +++- 5 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/browser/BrowserAction.cpp b/src/browser/BrowserAction.cpp index 4a031a1c8..6e49317a8 100644 --- a/src/browser/BrowserAction.cpp +++ b/src/browser/BrowserAction.cpp @@ -278,6 +278,8 @@ QJsonObject BrowserAction::handleGeneratePassword(QLocalSocket* socket, const QJ errorReply["requestID"] = requestId; } + // Show the existing password generator + browserService()->showPasswordGenerator({}); return errorReply; } diff --git a/src/browser/BrowserService.cpp b/src/browser/BrowserService.cpp index 506fcc0b2..a71151388 100644 --- a/src/browser/BrowserService.cpp +++ b/src/browser/BrowserService.cpp @@ -74,7 +74,6 @@ BrowserService::BrowserService() , m_browserHost(new BrowserHost) , m_dialogActive(false) , m_bringToFrontRequested(false) - , m_passwordGeneratorRequested(false) , m_prevWindowState(WindowState::Normal) , m_keepassBrowserUUID(Tools::hexToUuid("de887cc3036343b8974b5911b8816224")) { @@ -460,7 +459,7 @@ QList BrowserService::confirmEntries(QList& entriesToConfirm, void BrowserService::showPasswordGenerator(const KeyPairMessage& keyPairMessage) { if (!m_passwordGenerator) { - m_passwordGenerator.reset(PasswordGeneratorWidget::popupGenerator(m_currentDatabaseWidget)); + m_passwordGenerator = PasswordGeneratorWidget::popupGenerator(); connect(m_passwordGenerator.data(), &PasswordGeneratorWidget::closed, m_passwordGenerator.data(), [=] { if (!m_passwordGenerator->isPasswordGenerated()) { @@ -469,9 +468,7 @@ void BrowserService::showPasswordGenerator(const KeyPairMessage& keyPairMessage) m_browserHost->sendClientMessage(keyPairMessage.socket, errorMessage); } - m_passwordGenerator.reset(); - hideWindow(); - m_passwordGeneratorRequested = false; + QTimer::singleShot(50, this, [&] { hideWindow(); }); }); connect(m_passwordGenerator.data(), @@ -485,19 +482,18 @@ void BrowserService::showPasswordGenerator(const KeyPairMessage& keyPairMessage) params, keyPairMessage.publicKey, keyPairMessage.secretKey)); - hideWindow(); }); } - m_passwordGeneratorRequested = true; raiseWindow(); + m_passwordGenerator->show(); m_passwordGenerator->raise(); m_passwordGenerator->activateWindow(); } bool BrowserService::isPasswordGeneratorRequested() const { - return m_passwordGeneratorRequested; + return m_passwordGenerator && m_passwordGenerator->isVisible(); } QString BrowserService::storeKey(const QString& key) diff --git a/src/browser/BrowserService.h b/src/browser/BrowserService.h index f8938c549..46bebd38b 100644 --- a/src/browser/BrowserService.h +++ b/src/browser/BrowserService.h @@ -209,12 +209,11 @@ private: bool m_dialogActive; bool m_bringToFrontRequested; - bool m_passwordGeneratorRequested; WindowState m_prevWindowState; QUuid m_keepassBrowserUUID; QPointer m_currentDatabaseWidget; - QScopedPointer m_passwordGenerator; + QPointer m_passwordGenerator; Q_DISABLE_COPY(BrowserService); diff --git a/src/gui/PasswordGeneratorWidget.cpp b/src/gui/PasswordGeneratorWidget.cpp index b1e684410..39bdcc729 100644 --- a/src/gui/PasswordGeneratorWidget.cpp +++ b/src/gui/PasswordGeneratorWidget.cpp @@ -121,7 +121,7 @@ void PasswordGeneratorWidget::closeEvent(QCloseEvent* event) { // Emits closed signal when clicking X from title bar emit closed(); - event->accept(); + QWidget::closeEvent(event); } PasswordGeneratorWidget* PasswordGeneratorWidget::popupGenerator(QWidget* parent) diff --git a/src/gui/PasswordGeneratorWidget.h b/src/gui/PasswordGeneratorWidget.h index e272e674d..f1b9d9eef 100644 --- a/src/gui/PasswordGeneratorWidget.h +++ b/src/gui/PasswordGeneratorWidget.h @@ -70,6 +70,9 @@ public slots: void deleteWordList(); void addWordList(); +protected: + void closeEvent(QCloseEvent* event) override; + private slots: void updateButtonsEnabled(const QString& password); void updatePasswordStrength(); @@ -86,7 +89,6 @@ private: bool m_passwordGenerated = false; int m_firstCustomWordlistIndex; - void closeEvent(QCloseEvent* event); PasswordGenerator::CharClasses charClasses(); PasswordGenerator::GeneratorFlags generatorFlags();