From 3eae419d2929ded2a1331be419856afd545b36c6 Mon Sep 17 00:00:00 2001 From: Kyle Kneitinger Date: Sun, 23 Sep 2018 16:59:27 -0700 Subject: [PATCH] Use length of existing password for the password generator Add optional length parameter to PasswordGeneratorWidget::reset() (default=0), which when >0 sets the legth SpinBox's value to the value passed in. The EditEntryWidget already called reset() when the password was known, so the current length was just added to this call (accounts for empty passwords) If entry edit is cancelled, return the password generator length to the application default or last committed length if available. This is done by calling reseting the password generator in EditEntryWidget::cancel() when the edit page is being closed Fixes #2180 --- src/gui/PasswordGeneratorWidget.cpp | 8 +++++++- src/gui/PasswordGeneratorWidget.h | 2 +- src/gui/entry/EditEntryWidget.cpp | 3 ++- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/gui/PasswordGeneratorWidget.cpp b/src/gui/PasswordGeneratorWidget.cpp index d594cba8ec..048c395422 100644 --- a/src/gui/PasswordGeneratorWidget.cpp +++ b/src/gui/PasswordGeneratorWidget.cpp @@ -179,9 +179,15 @@ void PasswordGeneratorWidget::saveSettings() config()->set("generator/Type", m_ui->tabWidget->currentIndex()); } -void PasswordGeneratorWidget::reset() +void PasswordGeneratorWidget::reset(int length) { m_ui->editNewPassword->setText(""); + if (length > 0) { + m_ui->spinBoxLength->setValue(length); + } else { + m_ui->spinBoxLength->setValue(config()->get("generator/Length", PasswordGenerator::DefaultLength).toInt()); + } + setStandaloneMode(false); setPasswordVisible(config()->get("security/passwordscleartext").toBool()); updateGenerator(); diff --git a/src/gui/PasswordGeneratorWidget.h b/src/gui/PasswordGeneratorWidget.h index 0607f0fe85..f736aea13e 100644 --- a/src/gui/PasswordGeneratorWidget.h +++ b/src/gui/PasswordGeneratorWidget.h @@ -48,7 +48,7 @@ class PasswordGeneratorWidget : public QWidget ~PasswordGeneratorWidget(); void loadSettings(); void saveSettings(); - void reset(); + void reset(int length = 0); void setStandaloneMode(bool standalone); QString getGeneratedPassword(); bool isPasswordVisible() const; diff --git a/src/gui/entry/EditEntryWidget.cpp b/src/gui/entry/EditEntryWidget.cpp index e1cdcf94d7..83eb356133 100644 --- a/src/gui/entry/EditEntryWidget.cpp +++ b/src/gui/entry/EditEntryWidget.cpp @@ -681,7 +681,7 @@ void EditEntryWidget::setForms(const Entry* entry, bool restore) m_mainUi->notesHint->setVisible(config()->get("security/hidenotes").toBool()); m_mainUi->togglePasswordGeneratorButton->setChecked(false); m_mainUi->togglePasswordGeneratorButton->setDisabled(m_history); - m_mainUi->passwordGenerator->reset(); + m_mainUi->passwordGenerator->reset(entry->password().length()); m_advancedUi->attachmentsWidget->setReadOnly(m_history); m_advancedUi->addAttributeButton->setEnabled(!m_history); @@ -934,6 +934,7 @@ void EditEntryWidget::cancel() QMessageBox::Cancel | QMessageBox::Save | QMessageBox::Discard, QMessageBox::Cancel); if (result == QMessageBox::Cancel) { + m_mainUi->passwordGenerator->reset(); return; } if (result == QMessageBox::Save) {