URI: 
       thw: fix passphrase dialog with confirmation - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit d0e6b8c89dee017e4ad790d63e4f642a7e28e67c
   DIR parent 505cb2f65db2ef83d02e082acabcd8819dd347b2
  HTML Author: SomberNight <somber.night@protonmail.com>
       Date:   Wed, 28 Nov 2018 20:54:57 +0100
       
       hw: fix passphrase dialog with confirmation
       
       closes #4876
       
       Diffstat:
         M electrum/gui/qt/installwizard.py    |       4 ++--
         M electrum/gui/qt/password_dialog.py  |      17 ++++++++---------
         M electrum/plugins/hw_wallet/qt.py    |      14 ++++++++++----
       
       3 files changed, 20 insertions(+), 15 deletions(-)
       ---
   DIR diff --git a/electrum/gui/qt/installwizard.py b/electrum/gui/qt/installwizard.py
       t@@ -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())
       t@@ -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()
   DIR diff --git a/electrum/gui/qt/password_dialog.py b/electrum/gui/qt/password_dialog.py
       t@@ -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()
       t@@ -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)
       t@@ -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_():
       t@@ -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_():
   DIR diff --git a/electrum/plugins/hw_wallet/qt.py b/electrum/plugins/hw_wallet/qt.py
       t@@ -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 _
       t@@ -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)