Skip to content

Commit

Permalink
Merge pull request bitcoin#4712
Browse files Browse the repository at this point in the history
80daee0 [Qt] Call checkBalanceChanged() periodically instead for every updated transaction (Cozz Lovan)
  • Loading branch information
laanwj committed Sep 8, 2014
2 parents 2979988 + 80daee0 commit bb4ef1e
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 7 deletions.
18 changes: 11 additions & 7 deletions src/qt/walletmodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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();

Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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);
}
Expand Down Expand Up @@ -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;

Expand All @@ -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)
Expand Down
1 change: 1 addition & 0 deletions src/qt/walletmodel.h
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,7 @@ class WalletModel : public QObject
CWallet *wallet;
bool fProcessingQueuedTransactions;
bool fHaveWatchOnly;
bool fForceCheckBalanceChanged;

// Wallet has an options model for wallet-specific options
// (transaction fee, for example)
Expand Down

0 comments on commit bb4ef1e

Please sign in to comment.