Merge bitcoin-core/gui#396: Ensure external signer option remains disabled without signers

a9b9ca82da gui: ensure external signer option remains disabled without signers (Andrew Chow)

Pull request description:

  When no external signers are available, the option to enable external signers should always be disabled. However the encrypt wallet checkbox can erroneously re-enable the external signer checkbox. To avoid this, CreateWalletDialog now stores whether signers were available during setSigners so that future calls to external_signer_checkbox->setEnabled can account for whether signers are available.

  Fixes #395

ACKs for top commit:
  hebasto:
    ACK a9b9ca82da, tested on Linux Mint 20.2 (Qt 5.12.8).
  Sjors:
    tACK a9b9ca82da
  jarolrod:
    ACK a9b9ca82da

Tree-SHA512: 98951bcadc23fce99a66ea2d367c44360989e888c253845a767e1f7085c594562d0f099de4130f4a078c5072aa7806294097d976ee6407291f3d3c5a4a608b44
This commit is contained in:
Hennadii Stepanov 2021-08-06 19:14:51 +03:00
commit 03826aecc5
No known key found for this signature in database
GPG key ID: 410108112E7EA81F
2 changed files with 4 additions and 2 deletions

View file

@ -32,7 +32,7 @@ CreateWalletDialog::CreateWalletDialog(QWidget* parent) :
// set to true, enable it when isEncryptWalletChecked is false. // set to true, enable it when isEncryptWalletChecked is false.
ui->disable_privkeys_checkbox->setEnabled(!checked); ui->disable_privkeys_checkbox->setEnabled(!checked);
#ifdef ENABLE_EXTERNAL_SIGNER #ifdef ENABLE_EXTERNAL_SIGNER
ui->external_signer_checkbox->setEnabled(!checked); ui->external_signer_checkbox->setEnabled(m_has_signers && !checked);
#endif #endif
// When the disable_privkeys_checkbox is disabled, uncheck it. // When the disable_privkeys_checkbox is disabled, uncheck it.
if (!ui->disable_privkeys_checkbox->isEnabled()) { if (!ui->disable_privkeys_checkbox->isEnabled()) {
@ -115,7 +115,8 @@ CreateWalletDialog::~CreateWalletDialog()
void CreateWalletDialog::setSigners(const std::vector<ExternalSigner>& signers) void CreateWalletDialog::setSigners(const std::vector<ExternalSigner>& signers)
{ {
if (!signers.empty()) { m_has_signers = !signers.empty();
if (m_has_signers) {
ui->external_signer_checkbox->setEnabled(true); ui->external_signer_checkbox->setEnabled(true);
ui->external_signer_checkbox->setChecked(true); ui->external_signer_checkbox->setChecked(true);
ui->encrypt_wallet_checkbox->setEnabled(false); ui->encrypt_wallet_checkbox->setEnabled(false);

View file

@ -35,6 +35,7 @@ public:
private: private:
Ui::CreateWalletDialog *ui; Ui::CreateWalletDialog *ui;
bool m_has_signers = false;
}; };
#endif // BITCOIN_QT_CREATEWALLETDIALOG_H #endif // BITCOIN_QT_CREATEWALLETDIALOG_H