URI: 
       twizard, multisig: on bip39/hw ks, only ask for script type for 1st ks - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 193c29af87406646c7db54b0095a2c88ad6d8553
   DIR parent cc33b752e20b084570c9fdbca4afb7a6bb0d128f
  HTML Author: SomberNight <somber.night@protonmail.com>
       Date:   Thu,  5 Nov 2020 01:02:11 +0100
       
       wizard, multisig: on bip39/hw ks, only ask for script type for 1st ks
       
       When setting up a multisig wallet, there is no point in asking for the
       script type for each cosigner (bip39/hw) -- we can just ask for the
       first one. If the first keystore is an electrum seed, we end up never asking :)
       
       Diffstat:
         M electrum/base_wizard.py             |      31 +++++++++++++++++++++++++++----
         M electrum/gui/qt/installwizard.py    |       6 ++++--
       
       2 files changed, 31 insertions(+), 6 deletions(-)
       ---
   DIR diff --git a/electrum/base_wizard.py b/electrum/base_wizard.py
       t@@ -410,6 +410,7 @@ class BaseWizard(Logger):
                    _('You can override the suggested derivation path.'),
                    _('If you are not sure what this is, leave this field unchanged.')
                ])
       +        hide_choices = False
                if self.wallet_type == 'multisig':
                    # There is no general standard for HD multisig.
                    # For legacy, this is partially compatible with BIP45; assumes index=0
       t@@ -420,6 +421,14 @@ class BaseWizard(Logger):
                        ('p2wsh-p2sh', 'p2sh-segwit multisig (p2wsh-p2sh)', purpose48_derivation(0, xtype='p2wsh-p2sh')),
                        ('p2wsh',      'native segwit multisig (p2wsh)',    purpose48_derivation(0, xtype='p2wsh')),
                    ]
       +            # if this is not the first cosigner, pre-select the expected script type,
       +            # and hide the choices
       +            script_type = self.get_script_type_of_wallet()
       +            if script_type is not None:
       +                script_types = [*zip(*choices)][0]
       +                chosen_idx = script_types.index(script_type)
       +                default_choice_idx = chosen_idx
       +                hide_choices = True
                else:
                    default_choice_idx = 2
                    choices = [
       t@@ -430,9 +439,16 @@ class BaseWizard(Logger):
                while True:
                    try:
                        self.derivation_and_script_type_gui_specific_dialog(
       -                    run_next=f, title=_('Script type and Derivation path'), message1=message1,
       -                    message2=message2, choices=choices, test_text=is_bip32_derivation,
       -                    default_choice_idx=default_choice_idx, get_account_xpub=get_account_xpub)
       +                    run_next=f,
       +                    title=_('Script type and Derivation path'),
       +                    message1=message1,
       +                    message2=message2,
       +                    choices=choices,
       +                    test_text=is_bip32_derivation,
       +                    default_choice_idx=default_choice_idx,
       +                    get_account_xpub=get_account_xpub,
       +                    hide_choices=hide_choices,
       +                )
                        return
                    except ScriptTypeNotSupported as e:
                        self.show_error(e)
       t@@ -529,7 +545,14 @@ class BaseWizard(Logger):
                k = keystore.from_bip39_seed(seed, passphrase, derivation, xtype=script_type)
                self.on_keystore(k)
        
       -    def on_keystore(self, k):
       +    def get_script_type_of_wallet(self) -> Optional[str]:
       +        if len(self.keystores) > 0:
       +            ks = self.keystores[0]
       +            if isinstance(ks, keystore.Xpub):
       +                return xpub_type(ks.xpub)
       +        return None
       +
       +    def on_keystore(self, k: KeyStore):
                has_xpub = isinstance(k, keystore.Xpub)
                if has_xpub:
                    t1 = xpub_type(k.xpub)
   DIR diff --git a/electrum/gui/qt/installwizard.py b/electrum/gui/qt/installwizard.py
       t@@ -610,11 +610,12 @@ class InstallWizard(QDialog, MessageBoxMixin, BaseWizard):
                    title: str,
                    message1: str,
                    choices: List[Tuple[str, str, str]],
       +            hide_choices: bool = False,
                    message2: str,
                    test_text: Callable[[str], int],
                    run_next,
                    default_choice_idx: int = 0,
       -            get_account_xpub=None
       +            get_account_xpub=None,
            ) -> Tuple[str, str]:
                vbox = QVBoxLayout()
        
       t@@ -640,7 +641,8 @@ class InstallWizard(QDialog, MessageBoxMixin, BaseWizard):
                    line.setText(c_default_text[idx])
                clayout = ChoicesLayout(message1, c_titles, on_choice_click,
                                        checked_index=default_choice_idx)
       -        vbox.addLayout(clayout.layout())
       +        if not hide_choices:
       +            vbox.addLayout(clayout.layout())
        
                vbox.addWidget(WWLabel(message2))