summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/widgets/itemviews/qitemselectionmodel.cpp10
-rw-r--r--src/widgets/itemviews/qitemselectionmodel.h1
-rw-r--r--tests/auto/widgets/itemviews/qitemselectionmodel/tst_qitemselectionmodel.cpp32
3 files changed, 42 insertions, 1 deletions
diff --git a/src/widgets/itemviews/qitemselectionmodel.cpp b/src/widgets/itemviews/qitemselectionmodel.cpp
index 423a5802c2..996b12f805 100644
--- a/src/widgets/itemviews/qitemselectionmodel.cpp
+++ b/src/widgets/itemviews/qitemselectionmodel.cpp
@@ -1118,8 +1118,16 @@ void QItemSelectionModel::select(const QItemSelection &selection, QItemSelection
*/
void QItemSelectionModel::clear()
{
- Q_D(QItemSelectionModel);
clearSelection();
+ clearCurrentIndex();
+}
+
+/*!
+ Clears the current index. Emits currentChanged().
+ */
+void QItemSelectionModel::clearCurrentIndex()
+{
+ Q_D(QItemSelectionModel);
QModelIndex previous = d->currentIndex;
d->currentIndex = QModelIndex();
if (previous.isValid()) {
diff --git a/src/widgets/itemviews/qitemselectionmodel.h b/src/widgets/itemviews/qitemselectionmodel.h
index cfa71d0ef2..ea0528a590 100644
--- a/src/widgets/itemviews/qitemselectionmodel.h
+++ b/src/widgets/itemviews/qitemselectionmodel.h
@@ -202,6 +202,7 @@ public Q_SLOTS:
virtual void reset();
void clearSelection();
+ virtual void clearCurrentIndex();
Q_SIGNALS:
void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected);
diff --git a/tests/auto/widgets/itemviews/qitemselectionmodel/tst_qitemselectionmodel.cpp b/tests/auto/widgets/itemviews/qitemselectionmodel/tst_qitemselectionmodel.cpp
index 19386d342c..6f805a04d2 100644
--- a/tests/auto/widgets/itemviews/qitemselectionmodel/tst_qitemselectionmodel.cpp
+++ b/tests/auto/widgets/itemviews/qitemselectionmodel/tst_qitemselectionmodel.cpp
@@ -103,6 +103,7 @@ private slots:
void testValidRangesInSelectionsAfterReset();
void testChainedSelectionClear();
+ void testClearCurrentIndex();
private:
QAbstractItemModel *model;
@@ -2681,6 +2682,12 @@ public:
m_target->setCurrentIndex(index, command);
}
+ void clearCurrentIndex()
+ {
+ QItemSelectionModel::clearCurrentIndex();
+ m_target->clearCurrentIndex();
+ }
+
private:
QItemSelectionModel *m_target;
@@ -2717,6 +2724,31 @@ void tst_QItemSelectionModel::testChainedSelectionClear()
duplicate.setCurrentIndex(model.index(0, 0), QItemSelectionModel::NoUpdate);
QVERIFY(selectionModel.currentIndex() == duplicate.currentIndex());
+
+ duplicate.clearCurrentIndex();
+
+ QVERIFY(!duplicate.currentIndex().isValid());
+ QVERIFY(selectionModel.currentIndex() == duplicate.currentIndex());
+}
+
+void tst_QItemSelectionModel::testClearCurrentIndex()
+{
+ QStringListModel model(QStringList() << "Apples" << "Pears");
+
+ QItemSelectionModel selectionModel(&model, 0);
+
+ QSignalSpy currentIndexSpy(&selectionModel, SIGNAL(currentChanged(QModelIndex,QModelIndex)));
+
+ QModelIndex firstIndex = model.index(0, 0);
+ QVERIFY(firstIndex.isValid());
+ selectionModel.setCurrentIndex(firstIndex, QItemSelectionModel::NoUpdate);
+ QVERIFY(selectionModel.currentIndex() == firstIndex);
+ QVERIFY(currentIndexSpy.size() == 1);
+
+ selectionModel.clearCurrentIndex();
+
+ QVERIFY(selectionModel.currentIndex() == QModelIndex());
+ QVERIFY(currentIndexSpy.size() == 2);
}
QTEST_MAIN(tst_QItemSelectionModel)