From 243f68e0e8eac1014feaad7abab88daa45f7c136 Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Sun, 22 Mar 2020 19:40:19 -0400 Subject: [PATCH] Fix button highlighting in multiple dialogs * Changed style so that only default buttons have full background highlight. This prevents confusion as to which button in various dialogs is the default/desired choice. * Move password generator popup into static function outside of PasswordEdit so other parts of the program can easily access it. * QDialog forces 'autoDefault' property on all buttons causing them to obtain background highlight when they are focused. Moved Password Generator outside of a QDialog and forced 'autoDefault' to false on Browser Access Dialog. * Fixed button ordering in Totp Setup Dialog * About dialog close button is now the default button --- src/browser/BrowserAccessControlDialog.cpp | 1 + src/browser/BrowserAccessControlDialog.ui | 8 +++++++- src/browser/BrowserService.cpp | 5 ----- src/gui/AboutDialog.cpp | 2 ++ src/gui/PasswordEdit.cpp | 20 +++++--------------- src/gui/PasswordGeneratorWidget.cpp | 19 +++++++++++++++++++ src/gui/PasswordGeneratorWidget.h | 2 ++ src/gui/PasswordGeneratorWidget.ui | 22 ++++++++++++++-------- src/gui/TotpSetupDialog.ui | 2 ++ 9 files changed, 52 insertions(+), 29 deletions(-) diff --git a/src/browser/BrowserAccessControlDialog.cpp b/src/browser/BrowserAccessControlDialog.cpp index f73fe04c2..3268ef2b1 100644 --- a/src/browser/BrowserAccessControlDialog.cpp +++ b/src/browser/BrowserAccessControlDialog.cpp @@ -57,6 +57,7 @@ void BrowserAccessControlDialog::setItems(const QList& items, const QStr m_ui->itemsTable->setItem(row, 0, item); auto disableButton = new QPushButton(tr("Disable for this site")); + disableButton->setAutoDefault(false); connect(disableButton, &QAbstractButton::pressed, [&, item] { emit disableAccess(item); m_ui->itemsTable->removeRow(item->row()); diff --git a/src/browser/BrowserAccessControlDialog.ui b/src/browser/BrowserAccessControlDialog.ui index a9bec9086..bed26e6ab 100755 --- a/src/browser/BrowserAccessControlDialog.ui +++ b/src/browser/BrowserAccessControlDialog.ui @@ -88,6 +88,12 @@ Allow Selected + + true + + + true + @@ -96,7 +102,7 @@ Deny All - false + true diff --git a/src/browser/BrowserService.cpp b/src/browser/BrowserService.cpp index 47744ce60..5aa5e77ed 100644 --- a/src/browser/BrowserService.cpp +++ b/src/browser/BrowserService.cpp @@ -823,11 +823,6 @@ QList BrowserService::confirmEntries(QList& pwEntriesToConfirm, accessControlDialog.setItems(pwEntriesToConfirm, !submitHost.isEmpty() ? submitHost : url, httpAuth); - raiseWindow(); - accessControlDialog.show(); - accessControlDialog.activateWindow(); - accessControlDialog.raise(); - QList allowedEntries; if (accessControlDialog.exec() == QDialog::Accepted) { const auto selectedEntries = accessControlDialog.getSelectedEntries(); diff --git a/src/gui/AboutDialog.cpp b/src/gui/AboutDialog.cpp index 518a85891..d256fde8a 100644 --- a/src/gui/AboutDialog.cpp +++ b/src/gui/AboutDialog.cpp @@ -218,6 +218,8 @@ AboutDialog::AboutDialog(QWidget* parent) setAttribute(Qt::WA_DeleteOnClose); connect(m_ui->buttonBox, SIGNAL(rejected()), SLOT(close())); connect(m_ui->copyToClipboard, SIGNAL(clicked()), SLOT(copyToClipboard())); + + m_ui->buttonBox->button(QDialogButtonBox::Close)->setDefault(true); } AboutDialog::~AboutDialog() diff --git a/src/gui/PasswordEdit.cpp b/src/gui/PasswordEdit.cpp index ebe9e34ad..516d98e23 100644 --- a/src/gui/PasswordEdit.cpp +++ b/src/gui/PasswordEdit.cpp @@ -126,24 +126,14 @@ bool PasswordEdit::isPasswordVisible() const void PasswordEdit::popupPasswordGenerator() { - auto pwGenerator = new PasswordGeneratorWidget(); - QDialog pwDialog(this); - pwDialog.setWindowTitle(tr("Generate Password")); - auto layout = new QVBoxLayout(); - pwDialog.setLayout(layout); - layout->addWidget(pwGenerator); + auto generator = PasswordGeneratorWidget::popupGenerator(this); + generator->setPasswordVisible(isPasswordVisible()); + generator->setPasswordLength(text().length()); - pwGenerator->setStandaloneMode(false); - pwGenerator->setPasswordVisible(isPasswordVisible()); - pwGenerator->setPasswordLength(text().length()); - - connect(pwGenerator, SIGNAL(closePasswordGenerator()), &pwDialog, SLOT(close())); - connect(pwGenerator, SIGNAL(appliedPassword(QString)), SLOT(setText(QString))); + connect(generator, SIGNAL(appliedPassword(QString)), SLOT(setText(QString))); if (m_repeatPasswordEdit) { - connect(pwGenerator, SIGNAL(appliedPassword(QString)), m_repeatPasswordEdit, SLOT(setText(QString))); + connect(generator, SIGNAL(appliedPassword(QString)), m_repeatPasswordEdit, SLOT(setText(QString))); } - - pwDialog.exec(); } void PasswordEdit::updateRepeatStatus() diff --git a/src/gui/PasswordGeneratorWidget.cpp b/src/gui/PasswordGeneratorWidget.cpp index 1de51ec0f..8a3032447 100644 --- a/src/gui/PasswordGeneratorWidget.cpp +++ b/src/gui/PasswordGeneratorWidget.cpp @@ -103,6 +103,22 @@ PasswordGeneratorWidget::~PasswordGeneratorWidget() { } +PasswordGeneratorWidget* PasswordGeneratorWidget::popupGenerator(QWidget* parent) { + auto pwGenerator = new PasswordGeneratorWidget(parent); + pwGenerator->setWindowModality(Qt::ApplicationModal); + pwGenerator->setWindowFlags(Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint); + pwGenerator->setStandaloneMode(false); + + connect(pwGenerator, SIGNAL(closePasswordGenerator()), pwGenerator, SLOT(deleteLater())); + + pwGenerator->show(); + pwGenerator->raise(); + pwGenerator->activateWindow(); + pwGenerator->adjustSize(); + + return pwGenerator; +} + void PasswordGeneratorWidget::loadSettings() { // Password config @@ -341,6 +357,9 @@ void PasswordGeneratorWidget::setAdvancedMode(bool state) | m_ui->checkBoxLogograms->isChecked()); m_ui->checkBoxExtASCII->setChecked(m_ui->checkBoxExtASCIIAdv->isChecked()); } + + QApplication::processEvents(); + adjustSize(); } void PasswordGeneratorWidget::excludeHexChars() diff --git a/src/gui/PasswordGeneratorWidget.h b/src/gui/PasswordGeneratorWidget.h index fe3f9f67f..59de40986 100644 --- a/src/gui/PasswordGeneratorWidget.h +++ b/src/gui/PasswordGeneratorWidget.h @@ -54,6 +54,8 @@ public: QString getGeneratedPassword(); bool isPasswordVisible() const; + static PasswordGeneratorWidget* popupGenerator(QWidget* parent = nullptr); + public slots: void regeneratePassword(); void applyPassword(); diff --git a/src/gui/PasswordGeneratorWidget.ui b/src/gui/PasswordGeneratorWidget.ui index 4981d3ccd..8ffb91240 100644 --- a/src/gui/PasswordGeneratorWidget.ui +++ b/src/gui/PasswordGeneratorWidget.ui @@ -7,7 +7,7 @@ 0 0 622 - 404 + 433 @@ -96,7 +96,7 @@ - 350 + 450 0 @@ -157,6 +157,9 @@ QProgressBar::chunk { + + Qt::TabFocus + Copy password @@ -170,6 +173,9 @@ QProgressBar::chunk { + + Qt::TabFocus + Regenerate password @@ -290,9 +296,6 @@ QProgressBar::chunk { 0 - - Qt::TabFocus - Character Types @@ -323,9 +326,6 @@ QProgressBar::chunk { 25 - - Qt::TabFocus - Upper-case letters @@ -1200,6 +1200,7 @@ QProgressBar::chunk { sliderLength spinBoxLength buttonAdvancedMode + groupBox checkBoxUpper checkBoxLower checkBoxNumbers @@ -1215,6 +1216,11 @@ QProgressBar::chunk { checkBoxQuotes checkBoxDashes checkBoxExtASCIIAdv + editAdditionalChars + editExcludedChars + buttonAddHex + checkBoxExcludeAlike + checkBoxEnsureEvery comboBoxWordList sliderWordCount spinBoxWordCount diff --git a/src/gui/TotpSetupDialog.ui b/src/gui/TotpSetupDialog.ui index 84ba4cb54..c70dc00c7 100644 --- a/src/gui/TotpSetupDialog.ui +++ b/src/gui/TotpSetupDialog.ui @@ -216,7 +216,9 @@ radioDefault radioSteam radioCustom + algorithmComboBox stepSpinBox + digitsSpinBox