diff --git a/src/qt/overviewpage.cpp b/src/qt/overviewpage.cpp index c4efa2c0cf..204c2c91be 100644 --- a/src/qt/overviewpage.cpp +++ b/src/qt/overviewpage.cpp @@ -279,6 +279,9 @@ void OverviewPage::setWalletModel(WalletModel *model) connect(model, SIGNAL(balanceChanged(qint64, qint64, qint64, qint64)), this, SLOT(setBalance(qint64, qint64, qint64, qint64))); connect(model->getOptionsModel(), SIGNAL(displayUnitChanged(int)), this, SLOT(updateDisplayUnit())); + + connect(model, SIGNAL(transactionUpdated()), this, SLOT(updateTransactions())); + UpdateBoincUtilization(); } diff --git a/src/qt/overviewpage.h b/src/qt/overviewpage.h index 41f36a8935..6c870e585f 100644 --- a/src/qt/overviewpage.h +++ b/src/qt/overviewpage.h @@ -48,7 +48,6 @@ public slots: private: int getNumTransactionsForView(); - void updateTransactions(); Ui::OverviewPage *ui; ResearcherModel *researcherModel; @@ -63,6 +62,7 @@ public slots: private slots: void updateDisplayUnit(); + void updateTransactions(); void updateResearcherStatus(); void updateMagnitude(); void updatePendingAccrual(); diff --git a/src/qt/walletmodel.cpp b/src/qt/walletmodel.cpp index 41be1f564f..cce29d8791 100644 --- a/src/qt/walletmodel.cpp +++ b/src/qt/walletmodel.cpp @@ -126,16 +126,24 @@ void WalletModel::checkBalanceChanged() void WalletModel::updateTransaction(const QString &hash, int status) { - if(transactionTableModel) + if (transactionTableModel) + { transactionTableModel->updateTransaction(hash, status); + // Note this is subtly different than the below. If a resync is being done on a wallet + // that already has transactions, the numTransactionsChanged will not be emitted after the + // wallet is loaded because the size() does not change. See the comments in the header file. + emit transactionUpdated(); + } + // Balance and number of transactions might have changed checkBalanceChanged(); int newNumTransactions = getNumTransactions(); - if(cachedNumTransactions != newNumTransactions) + if (cachedNumTransactions != newNumTransactions) { cachedNumTransactions = newNumTransactions; + emit numTransactionsChanged(newNumTransactions); } } diff --git a/src/qt/walletmodel.h b/src/qt/walletmodel.h index ec65ce8279..4f6580ac8e 100644 --- a/src/qt/walletmodel.h +++ b/src/qt/walletmodel.h @@ -163,6 +163,11 @@ public slots: void pollBalanceChanged(); signals: + // Transaction updated. This is necessary because on a resync from zero with an existing wallet. + // the numTransactionsChanged signal will not be emitted, and therefore the overpage transaction list + // needs this signal instead. + void transactionUpdated(); + // Signal that balance in wallet changed void balanceChanged(qint64 balance, qint64 stake, qint64 unconfirmedBalance, qint64 immatureBalance);