mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-25 10:43:19 -03:00
Merge #17120: gui: Fix start timer from non QThread
a8f5026d6d
gui: Fix start timer from non QThread (João Barbosa) Pull request description: Fixes #16296. ACKs for top commit: laanwj: code review ACKa8f5026d6d
Tree-SHA512: d7b05ac88e188de16cbbe80cb2f773b7976ee07ee876ac94a93f9351856c4f3a9d66a531d3f3748d2dccff8c8d77d9d8227433069ed5909c32be2efeaa32f655
This commit is contained in:
commit
9bd109b78d
3 changed files with 17 additions and 7 deletions
|
@ -109,6 +109,12 @@ WalletModel* WalletController::getOrCreateWallet(std::unique_ptr<interfaces::Wal
|
|||
wallet_model->setParent(this);
|
||||
m_wallets.push_back(wallet_model);
|
||||
|
||||
// WalletModel::startPollBalance needs to be called in a thread managed by
|
||||
// Qt because of startTimer. Considering the current thread can be a RPC
|
||||
// thread, better delegate the calling to Qt with Qt::AutoConnection.
|
||||
const bool called = QMetaObject::invokeMethod(wallet_model, "startPollBalance");
|
||||
assert(called);
|
||||
|
||||
connect(wallet_model, &WalletModel::unload, [this, wallet_model] {
|
||||
// Defer removeAndDeleteWallet when no modal widget is active.
|
||||
// TODO: remove this workaround by removing usage of QDiallog::exec.
|
||||
|
|
|
@ -44,11 +44,6 @@ WalletModel::WalletModel(std::unique_ptr<interfaces::Wallet> wallet, interfaces:
|
|||
transactionTableModel = new TransactionTableModel(platformStyle, this);
|
||||
recentRequestsTableModel = new RecentRequestsTableModel(this);
|
||||
|
||||
// This timer will be fired repeatedly to update the balance
|
||||
pollTimer = new QTimer(this);
|
||||
connect(pollTimer, &QTimer::timeout, this, &WalletModel::pollBalanceChanged);
|
||||
pollTimer->start(MODEL_UPDATE_DELAY);
|
||||
|
||||
subscribeToCoreSignals();
|
||||
}
|
||||
|
||||
|
@ -57,6 +52,14 @@ WalletModel::~WalletModel()
|
|||
unsubscribeFromCoreSignals();
|
||||
}
|
||||
|
||||
void WalletModel::startPollBalance()
|
||||
{
|
||||
// This timer will be fired repeatedly to update the balance
|
||||
QTimer* timer = new QTimer(this);
|
||||
connect(timer, &QTimer::timeout, this, &WalletModel::pollBalanceChanged);
|
||||
timer->start(MODEL_UPDATE_DELAY);
|
||||
}
|
||||
|
||||
void WalletModel::updateStatus()
|
||||
{
|
||||
EncryptionStatus newEncryptionStatus = getEncryptionStatus();
|
||||
|
|
|
@ -235,8 +235,6 @@ private:
|
|||
EncryptionStatus cachedEncryptionStatus;
|
||||
int cachedNumBlocks;
|
||||
|
||||
QTimer *pollTimer;
|
||||
|
||||
void subscribeToCoreSignals();
|
||||
void unsubscribeFromCoreSignals();
|
||||
void checkBalanceChanged(const interfaces::WalletBalances& new_balances);
|
||||
|
@ -272,6 +270,9 @@ Q_SIGNALS:
|
|||
void canGetAddressesChanged();
|
||||
|
||||
public Q_SLOTS:
|
||||
/* Starts a timer to periodically update the balance */
|
||||
void startPollBalance();
|
||||
|
||||
/* Wallet status might have changed */
|
||||
void updateStatus();
|
||||
/* New transaction, or transaction changed status */
|
||||
|
|
Loading…
Add table
Reference in a new issue