diff --git a/src/qt/coincontroldialog.h b/src/qt/coincontroldialog.h --- a/src/qt/coincontroldialog.h +++ b/src/qt/coincontroldialog.h @@ -53,7 +53,7 @@ static void updateLabels(WalletModel *, QDialog *); static QList payAmounts; - static CCoinControl *coinControl; + static CCoinControl *coinControl(); static bool fSubtractFeeFromAmount; private: diff --git a/src/qt/coincontroldialog.cpp b/src/qt/coincontroldialog.cpp --- a/src/qt/coincontroldialog.cpp +++ b/src/qt/coincontroldialog.cpp @@ -33,7 +33,6 @@ #include QList CoinControlDialog::payAmounts; -CCoinControl *CoinControlDialog::coinControl = new CCoinControl(); bool CoinControlDialog::fSubtractFeeFromAmount = false; bool CCoinControlWidgetItem::operator<(const QTreeWidgetItem &other) const { @@ -216,7 +215,7 @@ ui->treeWidget->setEnabled(true); if (state == Qt::Unchecked) { // just to be sure - coinControl->UnSelectAll(); + coinControl()->UnSelectAll(); } CoinControlDialog::updateLabels(model, this); } @@ -416,12 +415,12 @@ item->text(COLUMN_VOUT_INDEX).toUInt()); if (item->checkState(COLUMN_CHECKBOX) == Qt::Unchecked) { - coinControl->UnSelect(outpt); + coinControl()->UnSelect(outpt); } else if (item->isDisabled()) { // locked (this happens if "check all" through parent node) item->setCheckState(COLUMN_CHECKBOX, Qt::Unchecked); } else { - coinControl->Select(outpt); + coinControl()->Select(outpt); } // selection changed -> update labels @@ -487,7 +486,7 @@ std::vector vCoinControl; std::vector vOutputs; - coinControl->ListSelected(vCoinControl); + coinControl()->ListSelected(vCoinControl); model->getOutputs(vCoinControl, vOutputs); for (const COutput &out : vOutputs) { @@ -496,7 +495,7 @@ uint256 txhash = out.tx->GetId(); COutPoint outpt(txhash, out.i); if (model->isSpent(outpt)) { - coinControl->UnSelect(outpt); + coinControl()->UnSelect(outpt); continue; } @@ -546,7 +545,7 @@ } // Fee - nPayFee = GetMinimumFee(nBytes, g_mempool, *coinControl); + nPayFee = GetMinimumFee(nBytes, g_mempool, *coinControl()); if (nPayAmount > Amount::zero()) { nChange = nAmount - nPayAmount; @@ -663,6 +662,11 @@ } } +CCoinControl *CoinControlDialog::coinControl() { + static CCoinControl coin_control; + return &coin_control; +} + void CoinControlDialog::updateView() { if (!model || !model->getOptionsModel() || !model->getAddressTableModel()) { return; @@ -791,7 +795,7 @@ if (model->isLockedCoin(txid, out.i)) { COutPoint outpt(txid, out.i); // just to be sure - coinControl->UnSelect(outpt); + coinControl()->UnSelect(outpt); itemOutput->setDisabled(true); itemOutput->setIcon( COLUMN_CHECKBOX, @@ -799,7 +803,7 @@ } // set checkbox - if (coinControl->IsSelected(COutPoint(txid, out.i))) { + if (coinControl()->IsSelected(COutPoint(txid, out.i))) { itemOutput->setCheckState(COLUMN_CHECKBOX, Qt::Checked); } } diff --git a/src/qt/sendcoinsdialog.cpp b/src/qt/sendcoinsdialog.cpp --- a/src/qt/sendcoinsdialog.cpp +++ b/src/qt/sendcoinsdialog.cpp @@ -274,7 +274,7 @@ // CoinControl has been enabled CCoinControl ctrl; if (model->getOptionsModel()->getCoinControlFeatures()) { - ctrl = *CoinControlDialog::coinControl; + ctrl = *CoinControlDialog::coinControl(); } updateCoinControlState(ctrl); @@ -399,7 +399,7 @@ if (sendStatus.status == WalletModel::OK) { accept(); - CoinControlDialog::coinControl->UnSelectAll(); + CoinControlDialog::coinControl()->UnSelectAll(); coinControlUpdateLabels(); Q_EMIT coinsSent(currentTransaction.getTransaction()->GetId()); } @@ -639,7 +639,7 @@ // Get CCoinControl instance if CoinControl is enabled or create a new one. CCoinControl coin_control; if (model->getOptionsModel()->getCoinControlFeatures()) { - coin_control = *CoinControlDialog::coinControl; + coin_control = *CoinControlDialog::coinControl(); } // Calculate available amount to send. @@ -791,7 +791,7 @@ // coin control features disabled if (!checked && model) { - CoinControlDialog::coinControl->SetNull(); + CoinControlDialog::coinControl()->SetNull(); } coinControlUpdateLabels(); @@ -808,7 +808,7 @@ // Coin Control: checkbox custom change address void SendCoinsDialog::coinControlChangeChecked(int state) { if (state == Qt::Unchecked) { - CoinControlDialog::coinControl->destChange = CNoDestination(); + CoinControlDialog::coinControl()->destChange = CNoDestination(); ui->labelCoinControlChangeLabel->clear(); } else { // use this to re-validate an already entered address @@ -822,7 +822,7 @@ void SendCoinsDialog::coinControlChangeEdited(const QString &text) { if (model && model->getAddressTableModel()) { // Default to no change address until verified - CoinControlDialog::coinControl->destChange = CNoDestination(); + CoinControlDialog::coinControl()->destChange = CNoDestination(); ui->labelCoinControlChangeLabel->setStyleSheet("QLabel{color:red;}"); const CTxDestination dest = @@ -851,7 +851,7 @@ QMessageBox::Cancel); if (btnRetVal == QMessageBox::Yes) { - CoinControlDialog::coinControl->destChange = dest; + CoinControlDialog::coinControl()->destChange = dest; } else { ui->lineEditCoinControlChange->setText(""); ui->labelCoinControlChangeLabel->setStyleSheet( @@ -872,7 +872,7 @@ ui->labelCoinControlChangeLabel->setText(tr("(no label)")); } - CoinControlDialog::coinControl->destChange = dest; + CoinControlDialog::coinControl()->destChange = dest; } } } @@ -884,7 +884,7 @@ return; } - updateCoinControlState(*CoinControlDialog::coinControl); + updateCoinControlState(*CoinControlDialog::coinControl()); // set pay amounts CoinControlDialog::payAmounts.clear(); @@ -901,7 +901,7 @@ } } - if (CoinControlDialog::coinControl->HasSelected()) { + if (CoinControlDialog::coinControl()->HasSelected()) { // actual coin control calculation CoinControlDialog::updateLabels(model, this);