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 5b47190fcc.
This commit is contained in:
Jonathan White 2023-08-15 07:52:48 -04:00
parent 6e8fa34b1e
commit 013db199cb
5 changed files with 15 additions and 18 deletions

View File

@ -279,6 +279,8 @@ QJsonObject BrowserAction::handleGeneratePassword(QLocalSocket* socket, const QJ
errorReply["requestID"] = requestId; errorReply["requestID"] = requestId;
} }
// Show the existing password generator
browserService()->showPasswordGenerator({});
return errorReply; return errorReply;
} }

View File

@ -74,7 +74,6 @@ BrowserService::BrowserService()
, m_browserHost(new BrowserHost) , m_browserHost(new BrowserHost)
, m_dialogActive(false) , m_dialogActive(false)
, m_bringToFrontRequested(false) , m_bringToFrontRequested(false)
, m_passwordGeneratorRequested(false)
, m_prevWindowState(WindowState::Normal) , m_prevWindowState(WindowState::Normal)
, m_keepassBrowserUUID(Tools::hexToUuid("de887cc3036343b8974b5911b8816224")) , m_keepassBrowserUUID(Tools::hexToUuid("de887cc3036343b8974b5911b8816224"))
{ {
@ -512,7 +511,7 @@ QList<Entry*> BrowserService::confirmEntries(QList<Entry*>& entriesToConfirm,
void BrowserService::showPasswordGenerator(const KeyPairMessage& keyPairMessage) void BrowserService::showPasswordGenerator(const KeyPairMessage& keyPairMessage)
{ {
if (!m_passwordGenerator) { if (!m_passwordGenerator) {
m_passwordGenerator.reset(PasswordGeneratorWidget::popupGenerator(m_currentDatabaseWidget)); m_passwordGenerator = PasswordGeneratorWidget::popupGenerator();
connect(m_passwordGenerator.data(), &PasswordGeneratorWidget::closed, m_passwordGenerator.data(), [=] { connect(m_passwordGenerator.data(), &PasswordGeneratorWidget::closed, m_passwordGenerator.data(), [=] {
if (!m_passwordGenerator->isPasswordGenerated()) { if (!m_passwordGenerator->isPasswordGenerated()) {
@ -521,9 +520,7 @@ void BrowserService::showPasswordGenerator(const KeyPairMessage& keyPairMessage)
m_browserHost->sendClientMessage(keyPairMessage.socket, errorMessage); m_browserHost->sendClientMessage(keyPairMessage.socket, errorMessage);
} }
m_passwordGenerator.reset(); QTimer::singleShot(50, this, [&] { hideWindow(); });
hideWindow();
m_passwordGeneratorRequested = false;
}); });
connect(m_passwordGenerator.data(), connect(m_passwordGenerator.data(),
@ -537,19 +534,18 @@ void BrowserService::showPasswordGenerator(const KeyPairMessage& keyPairMessage)
params, params,
keyPairMessage.publicKey, keyPairMessage.publicKey,
keyPairMessage.secretKey)); keyPairMessage.secretKey));
hideWindow();
}); });
} }
m_passwordGeneratorRequested = true;
raiseWindow(); raiseWindow();
m_passwordGenerator->show();
m_passwordGenerator->raise(); m_passwordGenerator->raise();
m_passwordGenerator->activateWindow(); m_passwordGenerator->activateWindow();
} }
bool BrowserService::isPasswordGeneratorRequested() const bool BrowserService::isPasswordGeneratorRequested() const
{ {
return m_passwordGeneratorRequested; return m_passwordGenerator && m_passwordGenerator->isVisible();
} }
QString BrowserService::storeKey(const QString& key) QString BrowserService::storeKey(const QString& key)

View File

@ -204,12 +204,11 @@ private:
bool m_dialogActive; bool m_dialogActive;
bool m_bringToFrontRequested; bool m_bringToFrontRequested;
bool m_passwordGeneratorRequested;
WindowState m_prevWindowState; WindowState m_prevWindowState;
QUuid m_keepassBrowserUUID; QUuid m_keepassBrowserUUID;
QPointer<DatabaseWidget> m_currentDatabaseWidget; QPointer<DatabaseWidget> m_currentDatabaseWidget;
QScopedPointer<PasswordGeneratorWidget> m_passwordGenerator; QPointer<PasswordGeneratorWidget> m_passwordGenerator;
Q_DISABLE_COPY(BrowserService); Q_DISABLE_COPY(BrowserService);

View File

@ -1,6 +1,6 @@
/* /*
* Copyright (C) 2023 KeePassXC Team <team@keepassxc.org>
* Copyright (C) 2013 Felix Geyer <debfx@fobos.de> * Copyright (C) 2013 Felix Geyer <debfx@fobos.de>
* Copyright (C) 2022 KeePassXC Team <team@keepassxc.org>
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -34,13 +34,12 @@
#include "gui/styles/StateColorPalette.h" #include "gui/styles/StateColorPalette.h"
PasswordGeneratorWidget::PasswordGeneratorWidget(QWidget* parent) PasswordGeneratorWidget::PasswordGeneratorWidget(QWidget* parent)
: QDialog(parent) : QWidget(parent)
, m_passwordGenerator(new PasswordGenerator()) , m_passwordGenerator(new PasswordGenerator())
, m_dicewareGenerator(new PassphraseGenerator()) , m_dicewareGenerator(new PassphraseGenerator())
, m_ui(new Ui::PasswordGeneratorWidget()) , m_ui(new Ui::PasswordGeneratorWidget())
{ {
m_ui->setupUi(this); m_ui->setupUi(this);
setWindowFlags(Qt::Widget);
m_ui->buttonGenerate->setIcon(icons()->icon("refresh")); m_ui->buttonGenerate->setIcon(icons()->icon("refresh"));
m_ui->buttonGenerate->setToolTip( m_ui->buttonGenerate->setToolTip(
@ -122,7 +121,7 @@ void PasswordGeneratorWidget::closeEvent(QCloseEvent* event)
{ {
// Emits closed signal when clicking X from title bar // Emits closed signal when clicking X from title bar
emit closed(); emit closed();
event->accept(); QWidget::closeEvent(event);
} }
PasswordGeneratorWidget* PasswordGeneratorWidget::popupGenerator(QWidget* parent) PasswordGeneratorWidget* PasswordGeneratorWidget::popupGenerator(QWidget* parent)

View File

@ -1,6 +1,6 @@
/* /*
* Copyright (C) 2023 KeePassXC Team <team@keepassxc.org>
* Copyright (C) 2013 Felix Geyer <debfx@fobos.de> * Copyright (C) 2013 Felix Geyer <debfx@fobos.de>
* Copyright (C) 2022 KeePassXC Team <team@keepassxc.org>
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -20,7 +20,6 @@
#define KEEPASSX_PASSWORDGENERATORWIDGET_H #define KEEPASSX_PASSWORDGENERATORWIDGET_H
#include <QComboBox> #include <QComboBox>
#include <QDialog>
#include <QTimer> #include <QTimer>
#include "core/PassphraseGenerator.h" #include "core/PassphraseGenerator.h"
@ -35,7 +34,7 @@ class PasswordGenerator;
class PasswordHealth; class PasswordHealth;
class PassphraseGenerator; class PassphraseGenerator;
class PasswordGeneratorWidget : public QDialog class PasswordGeneratorWidget : public QWidget
{ {
Q_OBJECT Q_OBJECT
@ -71,6 +70,9 @@ public slots:
void deleteWordList(); void deleteWordList();
void addWordList(); void addWordList();
protected:
void closeEvent(QCloseEvent* event) override;
private slots: private slots:
void updateButtonsEnabled(const QString& password); void updateButtonsEnabled(const QString& password);
void updatePasswordStrength(); void updatePasswordStrength();
@ -87,7 +89,6 @@ private:
bool m_passwordGenerated = false; bool m_passwordGenerated = false;
int m_firstCustomWordlistIndex; int m_firstCustomWordlistIndex;
void closeEvent(QCloseEvent* event) override;
PasswordGenerator::CharClasses charClasses(); PasswordGenerator::CharClasses charClasses();
PasswordGenerator::GeneratorFlags generatorFlags(); PasswordGenerator::GeneratorFlags generatorFlags();