From d0e6b8c89dee017e4ad790d63e4f642a7e28e67c Mon Sep 17 00:00:00 2001 From: SomberNight Date: Wed, 28 Nov 2018 20:54:57 +0100 Subject: [PATCH] hw: fix passphrase dialog with confirmation closes #4876 --- electrum/gui/qt/installwizard.py | 4 ++-- electrum/gui/qt/password_dialog.py | 17 ++++++++--------- electrum/plugins/hw_wallet/qt.py | 14 ++++++++++---- 3 files changed, 20 insertions(+), 15 deletions(-) diff --git a/electrum/gui/qt/installwizard.py b/electrum/gui/qt/installwizard.py index dc4ce28e4..ffd188671 100644 --- a/electrum/gui/qt/installwizard.py +++ b/electrum/gui/qt/installwizard.py @@ -432,7 +432,7 @@ class InstallWizard(QDialog, MessageBoxMixin, BaseWizard): return slayout.is_ext def pw_layout(self, msg, kind, force_disable_encrypt_cb): - playout = PasswordLayout(None, msg, kind, self.next_button, + playout = PasswordLayout(msg=msg, kind=kind, OK_button=self.next_button, force_disable_encrypt_cb=force_disable_encrypt_cb) playout.encrypt_cb.setChecked(True) self.exec_layout(playout.layout()) @@ -446,7 +446,7 @@ class InstallWizard(QDialog, MessageBoxMixin, BaseWizard): @wizard_dialog def request_storage_encryption(self, run_next): - playout = PasswordLayoutForHW(None, MSG_HW_STORAGE_ENCRYPTION, PW_NEW, self.next_button) + playout = PasswordLayoutForHW(MSG_HW_STORAGE_ENCRYPTION) playout.encrypt_cb.setChecked(True) self.exec_layout(playout.layout()) return playout.encrypt_cb.isChecked() diff --git a/electrum/gui/qt/password_dialog.py b/electrum/gui/qt/password_dialog.py index 66b3f51b9..3202618ec 100644 --- a/electrum/gui/qt/password_dialog.py +++ b/electrum/gui/qt/password_dialog.py @@ -60,7 +60,7 @@ class PasswordLayout(object): titles = [_("Enter Password"), _("Change Password"), _("Enter Passphrase")] - def __init__(self, wallet, msg, kind, OK_button, force_disable_encrypt_cb=False): + def __init__(self, msg, kind, OK_button, wallet=None, force_disable_encrypt_cb=False): self.wallet = wallet self.pw = QLineEdit() @@ -169,12 +169,9 @@ class PasswordLayout(object): class PasswordLayoutForHW(object): - def __init__(self, wallet, msg, kind, OK_button): + def __init__(self, msg, wallet=None): self.wallet = wallet - self.kind = kind - self.OK_button = OK_button - vbox = QVBoxLayout() label = QLabel(msg + "\n") label.setWordWrap(True) @@ -254,9 +251,11 @@ class ChangePasswordDialogForSW(ChangePasswordDialogBase): else: msg = _('Your wallet is password protected and encrypted.') msg += ' ' + _('Use this dialog to change your password.') - self.playout = PasswordLayout( - wallet, msg, PW_CHANGE, OK_button, - force_disable_encrypt_cb=not wallet.can_have_keystore_encryption()) + self.playout = PasswordLayout(msg=msg, + kind=PW_CHANGE, + OK_button=OK_button, + wallet=wallet, + force_disable_encrypt_cb=not wallet.can_have_keystore_encryption()) def run(self): if not self.exec_(): @@ -276,7 +275,7 @@ class ChangePasswordDialogForHW(ChangePasswordDialogBase): msg = _('Your wallet file is encrypted.') msg += '\n' + _('Note: If you enable this setting, you will need your hardware device to open your wallet.') msg += '\n' + _('Use this dialog to toggle encryption.') - self.playout = PasswordLayoutForHW(wallet, msg, PW_CHANGE, OK_button) + self.playout = PasswordLayoutForHW(msg) def run(self): if not self.exec_(): diff --git a/electrum/plugins/hw_wallet/qt.py b/electrum/plugins/hw_wallet/qt.py index 2b5215eb6..fc188ad00 100644 --- a/electrum/plugins/hw_wallet/qt.py +++ b/electrum/plugins/hw_wallet/qt.py @@ -27,7 +27,8 @@ import threading from PyQt5.Qt import QVBoxLayout, QLabel -from electrum.gui.qt.password_dialog import PasswordDialog, PW_PASSPHRASE + +from electrum.gui.qt.password_dialog import PasswordLayout, PW_PASSPHRASE from electrum.gui.qt.util import * from electrum.i18n import _ @@ -114,11 +115,16 @@ class QtHandlerBase(QObject, PrintError): def passphrase_dialog(self, msg, confirm): # If confirm is true, require the user to enter the passphrase twice parent = self.top_level_window() + d = WindowModalDialog(parent, _("Enter Passphrase")) if confirm: - d = PasswordDialog(parent, None, msg, PW_PASSPHRASE) - confirmed, p, passphrase = d.run() + OK_button = OkButton(d) + playout = PasswordLayout(msg=msg, kind=PW_PASSPHRASE, OK_button=OK_button) + vbox = QVBoxLayout() + vbox.addLayout(playout.layout()) + vbox.addLayout(Buttons(CancelButton(d), OK_button)) + d.setLayout(vbox) + passphrase = playout.new_password() if d.exec_() else None else: - d = WindowModalDialog(parent, _("Enter Passphrase")) pw = QLineEdit() pw.setEchoMode(2) pw.setMinimumWidth(200)