aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSjors Provoost <sjors@sprovoost.nl>2019-11-07 19:06:40 +0100
committerSjors Provoost <sjors@sprovoost.nl>2021-05-27 14:01:54 +0200
commit24815c6309431cb0797defaf7add1150bcf4b567 (patch)
treede34411cd292d8beab69d7cdee6399c95fbe8bc2
parent3f845ea2994f53e29abeb3fa158c35f1ee56e7e8 (diff)
downloadbitcoin-24815c6309431cb0797defaf7add1150bcf4b567.tar.xz
gui: wallet creation detects external signer
-rw-r--r--src/qt/createwalletdialog.cpp23
-rw-r--r--src/qt/createwalletdialog.h8
-rw-r--r--src/qt/walletcontroller.cpp11
3 files changed, 42 insertions, 0 deletions
diff --git a/src/qt/createwalletdialog.cpp b/src/qt/createwalletdialog.cpp
index 6f5ca95d1b..e593697b46 100644
--- a/src/qt/createwalletdialog.cpp
+++ b/src/qt/createwalletdialog.cpp
@@ -6,6 +6,7 @@
#include <config/bitcoin-config.h>
#endif
+#include <external_signer.h>
#include <qt/createwalletdialog.h>
#include <qt/forms/ui_createwalletdialog.h>
@@ -111,6 +112,28 @@ CreateWalletDialog::~CreateWalletDialog()
delete ui;
}
+#ifdef ENABLE_EXTERNAL_SIGNER
+void CreateWalletDialog::setSigners(std::vector<ExternalSigner>& signers)
+{
+ if (!signers.empty()) {
+ ui->external_signer_checkbox->setEnabled(true);
+ ui->external_signer_checkbox->setChecked(true);
+ ui->encrypt_wallet_checkbox->setEnabled(false);
+ ui->encrypt_wallet_checkbox->setChecked(false);
+ // The order matters, because connect() is called when toggling a checkbox:
+ ui->blank_wallet_checkbox->setEnabled(false);
+ ui->blank_wallet_checkbox->setChecked(false);
+ ui->disable_privkeys_checkbox->setEnabled(false);
+ ui->disable_privkeys_checkbox->setChecked(true);
+ const std::string label = signers[0].m_name;
+ ui->wallet_name_line_edit->setText(QString::fromStdString(label));
+ ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(true);
+ } else {
+ ui->external_signer_checkbox->setEnabled(false);
+ }
+}
+#endif
+
QString CreateWalletDialog::walletName() const
{
return ui->wallet_name_line_edit->text();
diff --git a/src/qt/createwalletdialog.h b/src/qt/createwalletdialog.h
index 6eb79bc060..585b1461f7 100644
--- a/src/qt/createwalletdialog.h
+++ b/src/qt/createwalletdialog.h
@@ -9,6 +9,10 @@
class WalletModel;
+#ifdef ENABLE_EXTERNAL_SIGNER
+class ExternalSigner;
+#endif
+
namespace Ui {
class CreateWalletDialog;
}
@@ -23,6 +27,10 @@ public:
explicit CreateWalletDialog(QWidget* parent);
virtual ~CreateWalletDialog();
+#ifdef ENABLE_EXTERNAL_SIGNER
+ void setSigners(std::vector<ExternalSigner>& signers);
+#endif
+
QString walletName() const;
bool isEncryptWalletChecked() const;
bool isDisablePrivateKeysChecked() const;
diff --git a/src/qt/walletcontroller.cpp b/src/qt/walletcontroller.cpp
index fc469140ed..404eb01f2c 100644
--- a/src/qt/walletcontroller.cpp
+++ b/src/qt/walletcontroller.cpp
@@ -291,6 +291,17 @@ void CreateWalletActivity::finish()
void CreateWalletActivity::create()
{
m_create_wallet_dialog = new CreateWalletDialog(m_parent_widget);
+
+#ifdef ENABLE_EXTERNAL_SIGNER
+ std::vector<ExternalSigner> signers;
+ try {
+ signers = node().externalSigners();
+ } catch (const std::runtime_error& e) {
+ QMessageBox::critical(nullptr, tr("Can't list signers"), e.what());
+ }
+ m_create_wallet_dialog->setSigners(signers);
+#endif
+
m_create_wallet_dialog->setWindowModality(Qt::ApplicationModal);
m_create_wallet_dialog->show();