Use length of existing password for the password generator (#2318)

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
This commit is contained in:
Kyle Kneitinger 2018-09-25 17:44:19 -07:00 committed by Jonathan White
parent e7c5e17a8e
commit d4112fe2bf
3 changed files with 10 additions and 3 deletions

View File

@ -179,9 +179,15 @@ void PasswordGeneratorWidget::saveSettings()
config()->set("generator/Type", m_ui->tabWidget->currentIndex()); config()->set("generator/Type", m_ui->tabWidget->currentIndex());
} }
void PasswordGeneratorWidget::reset() void PasswordGeneratorWidget::reset(int length)
{ {
m_ui->editNewPassword->setText(""); 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); setStandaloneMode(false);
setPasswordVisible(config()->get("security/passwordscleartext").toBool()); setPasswordVisible(config()->get("security/passwordscleartext").toBool());
updateGenerator(); updateGenerator();

View File

@ -48,7 +48,7 @@ public:
~PasswordGeneratorWidget(); ~PasswordGeneratorWidget();
void loadSettings(); void loadSettings();
void saveSettings(); void saveSettings();
void reset(); void reset(int length = 0);
void setStandaloneMode(bool standalone); void setStandaloneMode(bool standalone);
QString getGeneratedPassword(); QString getGeneratedPassword();
bool isPasswordVisible() const; bool isPasswordVisible() const;

View File

@ -681,7 +681,7 @@ void EditEntryWidget::setForms(const Entry* entry, bool restore)
m_mainUi->notesHint->setVisible(config()->get("security/hidenotes").toBool()); m_mainUi->notesHint->setVisible(config()->get("security/hidenotes").toBool());
m_mainUi->togglePasswordGeneratorButton->setChecked(false); m_mainUi->togglePasswordGeneratorButton->setChecked(false);
m_mainUi->togglePasswordGeneratorButton->setDisabled(m_history); 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->attachmentsWidget->setReadOnly(m_history);
m_advancedUi->addAttributeButton->setEnabled(!m_history); m_advancedUi->addAttributeButton->setEnabled(!m_history);
@ -934,6 +934,7 @@ void EditEntryWidget::cancel()
QMessageBox::Cancel | QMessageBox::Save | QMessageBox::Discard, QMessageBox::Cancel | QMessageBox::Save | QMessageBox::Discard,
QMessageBox::Cancel); QMessageBox::Cancel);
if (result == QMessageBox::Cancel) { if (result == QMessageBox::Cancel) {
m_mainUi->passwordGenerator->reset();
return; return;
} }
if (result == QMessageBox::Save) { if (result == QMessageBox::Save) {