Browse Source

Merge pull request #4712

80daee0 [Qt] Call checkBalanceChanged() periodically instead for every updated transaction (Cozz Lovan)
metaverse
Wladimir J. van der Laan 10 years ago
parent
commit
bb4ef1e9dc
No known key found for this signature in database GPG Key ID: 74810B012346C9A6
  1. 18
      src/qt/walletmodel.cpp
  2. 1
      src/qt/walletmodel.h

18
src/qt/walletmodel.cpp

@ -36,6 +36,7 @@ WalletModel::WalletModel(CWallet *wallet, OptionsModel *optionsModel, QObject *p
{
fProcessingQueuedTransactions = false;
fHaveWatchOnly = wallet->HaveWatchOnly();
fForceCheckBalanceChanged = false;
addressTableModel = new AddressTableModel(wallet, this);
transactionTableModel = new TransactionTableModel(wallet, this);
@ -121,8 +122,10 @@ void WalletModel::pollBalanceChanged()
if(!lockWallet)
return;
if(chainActive.Height() != cachedNumBlocks)
if(fForceCheckBalanceChanged || chainActive.Height() != cachedNumBlocks)
{
fForceCheckBalanceChanged = false;
// Balance and number of transactions might have changed
cachedNumBlocks = chainActive.Height();
@ -167,7 +170,7 @@ void WalletModel::updateTransaction(const QString &hash, int status)
transactionTableModel->updateTransaction(hash, status);
// Balance and number of transactions might have changed
checkBalanceChanged();
fForceCheckBalanceChanged = true;
}
void WalletModel::updateAddressBook(const QString &address, const QString &label,
@ -344,6 +347,7 @@ WalletModel::SendCoinsReturn WalletModel::sendCoins(WalletModelTransaction &tran
}
emit coinsSent(wallet, rcp, transaction_array);
}
checkBalanceChanged(); // update balance immediately, otherwise there could be a short noticeable delay until pollBalanceChanged hits
return SendCoinsReturn(OK);
}
@ -473,11 +477,6 @@ static void NotifyTransactionChanged(WalletModel *walletmodel, CWallet *wallet,
static void ShowProgress(WalletModel *walletmodel, const std::string &title, int nProgress)
{
// emits signal "showProgress"
QMetaObject::invokeMethod(walletmodel, "showProgress", Qt::QueuedConnection,
Q_ARG(QString, QString::fromStdString(title)),
Q_ARG(int, nProgress));
if (nProgress == 0)
fQueueNotifications = true;
@ -495,6 +494,11 @@ static void ShowProgress(WalletModel *walletmodel, const std::string &title, int
}
std::vector<std::pair<uint256, ChangeType> >().swap(vQueueNotifications); // clear
}
// emits signal "showProgress"
QMetaObject::invokeMethod(walletmodel, "showProgress", Qt::QueuedConnection,
Q_ARG(QString, QString::fromStdString(title)),
Q_ARG(int, nProgress));
}
static void NotifyWatchonlyChanged(WalletModel *walletmodel, bool fHaveWatchonly)

1
src/qt/walletmodel.h

@ -199,6 +199,7 @@ private:
CWallet *wallet;
bool fProcessingQueuedTransactions;
bool fHaveWatchOnly;
bool fForceCheckBalanceChanged;
// Wallet has an options model for wallet-specific options
// (transaction fee, for example)

Loading…
Cancel
Save