What changed, and why it matters
This is a routine code modernization change in Bitcoin Core's Qt wallet interface. It replaces an older Qt filtering API call (invalidateFilter) with newer equivalents (beginFilterChange/endFilterChange) for future Qt 6 compatibility. There is no security-relevant behavior change.
No security action required; treat as normal maintenance.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The commit updates TransactionFilterProxy methods in src/qt/transactionfilterproxy.cpp to use QSortFilterProxyModel::beginFilterChange()/endFilterChange() when building against Qt 6.10+, falling back to invalidateFilter() on older Qt versions. This is a pure API migration with conditional compilation; the filtering logic and outcomes remain identical.
Changed components
src/qt/transactionfilterproxy.cppInspect captured patch +46 / −0
diff --git a/src/qt/transactionfilterproxy.cpp b/src/qt/transactionfilterproxy.cpp
index 1ad77fd7..89099260 100644
--- a/src/qt/transactionfilterproxy.cpp
+++ b/src/qt/transactionfilterproxy.cpp
@@ -52,32 +52,78 @@ bool TransactionFilterProxy::filterAcceptsRow(int sourceRow, const QModelIndex &
void TransactionFilterProxy::setDateRange(const std::optional<QDateTime>& from, const std::optional<QDateTime>& to)
{
+#if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0)
+ beginFilterChange();
+#endif
+
dateFrom = from;
dateTo = to;
+
+#if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0)
+ endFilterChange(QSortFilterProxyModel::Direction::Rows);
+#else
invalidateFilter();
+#endif
}
void TransactionFilterProxy::setSearchString(const QString &search_string)
{
if (m_search_string == search_string) return;
+
+#if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0)
+ beginFilterChange();
+#endif
+
m_search_string = search_string;
+
+#if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0)
+ endFilterChange(QSortFilterProxyModel::Direction::Rows);
+#else
invalidateFilter();
+#endif
}
void TransactionFilterProxy::setTypeFilter(quint32 modes)
{
+#if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0)
+ beginFilterChange();
+#endif
+
this->typeFilter = modes;
+
+#if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0)
+ endFilterChange(QSortFilterProxyModel::Direction::Rows);
+#else
invalidateFilter();
+#endif
}
void TransactionFilterProxy::setMinAmount(const CAmount& minimum)
{
+#if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0)
+ beginFilterChange();
+#endif
+
this->minAmount = minimum;
+
+#if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0)
+ endFilterChange(QSortFilterProxyModel::Direction::Rows);
+#else
invalidateFilter();
+#endif
}
void TransactionFilterProxy::setShowInactive(bool _showInactive)
{
+#if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0)
+ beginFilterChange();
+#endif
+
this->showInactive = _showInactive;
+
+#if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0)
+ endFilterChange(QSortFilterProxyModel::Direction::Rows);
+#else
invalidateFilter();
+#endif
}
Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.