summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIvan Solovev <ivan.solovev@qt.io>2021-04-23 10:24:13 +0200
committerIvan Solovev <ivan.solovev@qt.io>2021-04-30 14:57:28 +0200
commit0d76a5cd2cdc37f9fb4cbd62af4ab6102a0acd7d (patch)
tree2094a1ce78731f280babbbb237035acc594c5777
parent5ae7527411cb72d24c21dc12479ed43ddb725ee0 (diff)
QSFPM: fix filterCaseSensitivityChanged signal emission logic
This patch amends bcbbbdb2d640c059c19e9337c7418b83b1b7e4ea. It fixes the logic of filterCaseSensitivityChanged signal emission. The call to QRegularExpression overload of setFilterRegularExpression could change the filterCaseSensitivity, but the signal was never emitted. [ChangeLog][QtCore][QSortFilterProxyModel] A call to QRegularExpression overload of setFilterRegularExpression now emits a filterCaseSensitivityChanged signal, if required. Pick-to: 6.0 Pick-to: 6.1 Change-Id: Id4ef04227c1f8ed98153fa5107ec3fbe4c0c77fb Reviewed-by: Samuel Gaist <samuel.gaist@idiap.ch> Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
-rw-r--r--src/corelib/itemmodels/qsortfilterproxymodel.cpp4
-rw-r--r--tests/auto/corelib/itemmodels/qsortfilterproxymodel_regularexpression/tst_qsortfilterproxymodel_regularexpression.cpp19
2 files changed, 23 insertions, 0 deletions
diff --git a/src/corelib/itemmodels/qsortfilterproxymodel.cpp b/src/corelib/itemmodels/qsortfilterproxymodel.cpp
index 2583d08502..d669a0bd2c 100644
--- a/src/corelib/itemmodels/qsortfilterproxymodel.cpp
+++ b/src/corelib/itemmodels/qsortfilterproxymodel.cpp
@@ -2523,9 +2523,13 @@ QRegularExpression QSortFilterProxyModel::filterRegularExpression() const
void QSortFilterProxyModel::setFilterRegularExpression(const QRegularExpression &regularExpression)
{
Q_D(QSortFilterProxyModel);
+ const Qt::CaseSensitivity cs = filterCaseSensitivity();
d->filter_about_to_be_changed();
d->filter_regularexpression = regularExpression;
d->filter_changed(QSortFilterProxyModelPrivate::Direction::Rows);
+ const Qt::CaseSensitivity updatedCs = filterCaseSensitivity();
+ if (cs != updatedCs)
+ emit filterCaseSensitivityChanged(updatedCs);
}
/*!
diff --git a/tests/auto/corelib/itemmodels/qsortfilterproxymodel_regularexpression/tst_qsortfilterproxymodel_regularexpression.cpp b/tests/auto/corelib/itemmodels/qsortfilterproxymodel_regularexpression/tst_qsortfilterproxymodel_regularexpression.cpp
index 9d7ba3ca84..8411d40a72 100644
--- a/tests/auto/corelib/itemmodels/qsortfilterproxymodel_regularexpression/tst_qsortfilterproxymodel_regularexpression.cpp
+++ b/tests/auto/corelib/itemmodels/qsortfilterproxymodel_regularexpression/tst_qsortfilterproxymodel_regularexpression.cpp
@@ -27,6 +27,7 @@
****************************************************************************/
#include <QTest>
+#include <QSignalSpy>
#include <QStringListModel>
#include "tst_qsortfilterproxymodel.h"
@@ -41,6 +42,7 @@ private slots:
void tst_caseSensitivity();
void tst_keepCaseSensitivity_QTBUG_92260();
void tst_keepPatternOptions_QTBUG_92260();
+ void tst_regexCaseSensitivityNotification();
};
tst_QSortFilterProxyModelRegularExpression::tst_QSortFilterProxyModelRegularExpression() :
@@ -140,5 +142,22 @@ void tst_QSortFilterProxyModelRegularExpression::tst_keepPatternOptions_QTBUG_92
QRegularExpression::MultilineOption);
}
+/*!
+ This test ensures that if the case sensitivity is changed during a call to
+ setFilterRegularExpression, the notification signal will be emitted
+*/
+void tst_QSortFilterProxyModelRegularExpression::tst_regexCaseSensitivityNotification()
+{
+ QSortFilterProxyModel proxy;
+ QSignalSpy spy(&proxy, &QSortFilterProxyModel::filterCaseSensitivityChanged);
+ proxy.setFilterCaseSensitivity(Qt::CaseInsensitive);
+ QCOMPARE(spy.count(), 1);
+ QRegularExpression re("regex");
+ QVERIFY(!re.patternOptions().testFlag(QRegularExpression::CaseInsensitiveOption));
+ proxy.setFilterRegularExpression(re);
+ QCOMPARE(proxy.filterCaseSensitivity(), Qt::CaseSensitive);
+ QCOMPARE(spy.count(), 2);
+}
+
QTEST_MAIN(tst_QSortFilterProxyModelRegularExpression)
#include "tst_qsortfilterproxymodel_regularexpression.moc"