Skip to content

Commit eef8d64

Browse files
committed
gui: create wallet with external signer
1 parent 6cdbc83 commit eef8d64

File tree

4 files changed

+57
-1
lines changed

4 files changed

+57
-1
lines changed

src/qt/createwalletdialog.cpp

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,39 @@ CreateWalletDialog::CreateWalletDialog(QWidget* parent) :
2727
});
2828

2929
connect(ui->encrypt_wallet_checkbox, &QCheckBox::toggled, [this](bool checked) {
30-
// Disable the disable_privkeys_checkbox when isEncryptWalletChecked is
30+
// Disable the disable_privkeys_checkbox and external_signer_checkbox when isEncryptWalletChecked is
3131
// set to true, enable it when isEncryptWalletChecked is false.
3232
ui->disable_privkeys_checkbox->setEnabled(!checked);
33+
ui->external_signer_checkbox->setEnabled(!checked);
3334

3435
// When the disable_privkeys_checkbox is disabled, uncheck it.
3536
if (!ui->disable_privkeys_checkbox->isEnabled()) {
3637
ui->disable_privkeys_checkbox->setChecked(false);
3738
}
39+
40+
// When the external_signer_checkbox box is disabled, uncheck it.
41+
if (!ui->external_signer_checkbox->isEnabled()) {
42+
ui->external_signer_checkbox->setChecked(false);
43+
}
44+
45+
});
46+
47+
connect(ui->external_signer_checkbox, &QCheckBox::toggled, [this](bool checked) {
48+
ui->encrypt_wallet_checkbox->setEnabled(!checked);
49+
ui->blank_wallet_checkbox->setEnabled(!checked);
50+
ui->disable_privkeys_checkbox->setEnabled(!checked);
51+
ui->descriptor_checkbox->setEnabled(!checked);
52+
53+
// The external signer checkbox is only enabled when a device is detected.
54+
// In that case it is checked by default. Toggling it restores the other
55+
// options to their default.
56+
ui->descriptor_checkbox->setChecked(checked);
57+
ui->encrypt_wallet_checkbox->setChecked(false);
58+
ui->disable_privkeys_checkbox->setChecked(checked);
59+
// The blank check box is ambiguous. This flag is always true for a
60+
// watch-only wallet, even though we immedidately fetch keys from the
61+
// external signer.
62+
ui->blank_wallet_checkbox->setChecked(checked);
3863
});
3964

4065
connect(ui->disable_privkeys_checkbox, &QCheckBox::toggled, [this](bool checked) {
@@ -63,11 +88,22 @@ CreateWalletDialog::CreateWalletDialog(QWidget* parent) :
6388
ui->descriptor_checkbox->setToolTip(tr("Compiled without sqlite support (required for descriptor wallets)"));
6489
ui->descriptor_checkbox->setEnabled(false);
6590
ui->descriptor_checkbox->setChecked(false);
91+
ui->external_signer_checkbox->setEnabled(false);
92+
ui->external_signer_checkbox->setChecked(false);
6693
#endif
94+
6795
#ifndef USE_BDB
6896
ui->descriptor_checkbox->setEnabled(false);
6997
ui->descriptor_checkbox->setChecked(true);
7098
#endif
99+
100+
#ifndef ENABLE_EXTERNAL_SIGNER
101+
//: "External signing" means using devices such as hardware wallets.
102+
ui->external_signer_checkbox->setToolTip(tr("Compiled without external signing support (required for external signing)"));
103+
ui->external_signer_checkbox->setEnabled(false);
104+
ui->external_signer_checkbox->setChecked(false);
105+
#endif
106+
71107
}
72108

73109
CreateWalletDialog::~CreateWalletDialog()
@@ -99,3 +135,8 @@ bool CreateWalletDialog::isDescriptorWalletChecked() const
99135
{
100136
return ui->descriptor_checkbox->isChecked();
101137
}
138+
139+
bool CreateWalletDialog::isExternalSignerChecked() const
140+
{
141+
return ui->external_signer_checkbox->isChecked();
142+
}

src/qt/createwalletdialog.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ class CreateWalletDialog : public QDialog
2828
bool isDisablePrivateKeysChecked() const;
2929
bool isMakeBlankWalletChecked() const;
3030
bool isDescriptorWalletChecked() const;
31+
bool isExternalSignerChecked() const;
3132

3233
private:
3334
Ui::CreateWalletDialog *ui;

src/qt/forms/createwalletdialog.ui

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,16 @@
109109
</property>
110110
</widget>
111111
</item>
112+
<item>
113+
<widget class="QCheckBox" name="external_signer_checkbox">
114+
<property name="toolTip">
115+
<string>Use an external signing device such as a hardware wallet. Configure the external signer script in wallet preferences first.</string>
116+
</property>
117+
<property name="text">
118+
<string>External signer</string>
119+
</property>
120+
</widget>
121+
</item>
112122
</layout>
113123
</widget>
114124
</item>
@@ -143,6 +153,7 @@
143153
<tabstop>disable_privkeys_checkbox</tabstop>
144154
<tabstop>blank_wallet_checkbox</tabstop>
145155
<tabstop>descriptor_checkbox</tabstop>
156+
<tabstop>external_signer_checkbox</tabstop>
146157
</tabstops>
147158
<resources/>
148159
<connections>

src/qt/walletcontroller.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,9 @@ void CreateWalletActivity::createWallet()
260260
if (m_create_wallet_dialog->isDescriptorWalletChecked()) {
261261
flags |= WALLET_FLAG_DESCRIPTORS;
262262
}
263+
if (m_create_wallet_dialog->isExternalSignerChecked()) {
264+
flags |= WALLET_FLAG_EXTERNAL_SIGNER;
265+
}
263266

264267
QTimer::singleShot(500, worker(), [this, name, flags] {
265268
std::unique_ptr<interfaces::Wallet> wallet = node().walletClient().createWallet(name, m_passphrase, flags, m_error_message, m_warning_message);

0 commit comments

Comments
 (0)