┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/kitemviews/kfileitemmodel.cpp6
-rw-r--r--src/tests/kfileitemmodeltest.cpp43
2 files changed, 45 insertions, 4 deletions
diff --git a/src/kitemviews/kfileitemmodel.cpp b/src/kitemviews/kfileitemmodel.cpp
index c78fdc358..400d29849 100644
--- a/src/kitemviews/kfileitemmodel.cpp
+++ b/src/kitemviews/kfileitemmodel.cpp
@@ -644,11 +644,11 @@ void KFileItemModel::onSortRoleChanged(const QByteArray& current, const QByteArr
Q_UNUSED(previous);
m_sortRole = typeForRole(current);
-#ifdef KFILEITEMMODEL_DEBUG
if (!m_requestRole[m_sortRole]) {
- kWarning() << "The sort-role has been changed to a role that has not been received yet";
+ QSet<QByteArray> newRoles = m_roles;
+ newRoles << current;
+ setRoles(newRoles);
}
-#endif
resortAllItems();
}
diff --git a/src/tests/kfileitemmodeltest.cpp b/src/tests/kfileitemmodeltest.cpp
index e636bcd91..fd6c2be90 100644
--- a/src/tests/kfileitemmodeltest.cpp
+++ b/src/tests/kfileitemmodeltest.cpp
@@ -67,6 +67,7 @@ private slots:
void testSetData();
void testSetDataWithModifiedSortRole_data();
void testSetDataWithModifiedSortRole();
+ void testChangeSortRole();
void testModelConsistencyWhenInsertingItems();
void testItemRangeConsistencyWhenInsertingItems();
void testExpandItems();
@@ -274,6 +275,8 @@ void KFileItemModelTest::testSetDataWithModifiedSortRole()
// Changing the value of a sort-role must result in
// a reordering of the items.
QCOMPARE(m_model->sortRole(), QByteArray("text"));
+ m_model->setSortRole("rating");
+ QCOMPARE(m_model->sortRole(), QByteArray("rating"));
QStringList files;
files << "a.txt" << "b.txt" << "c.txt";
@@ -299,7 +302,6 @@ void KFileItemModelTest::testSetDataWithModifiedSortRole()
ratingC.insert("rating", 6);
m_model->setData(2, ratingC);
- m_model->setSortRole("rating");
QCOMPARE(m_model->data(0).value("rating").toInt(), 2);
QCOMPARE(m_model->data(1).value("rating").toInt(), 4);
QCOMPARE(m_model->data(2).value("rating").toInt(), 6);
@@ -320,6 +322,45 @@ void KFileItemModelTest::testSetDataWithModifiedSortRole()
QVERIFY(isModelConsistent());
}
+void KFileItemModelTest::testChangeSortRole()
+{
+ QCOMPARE(m_model->sortRole(), QByteArray("text"));
+
+ QStringList files;
+ files << "a.txt" << "b.jpg" << "c.txt";
+ m_testDir->createFiles(files);
+
+ m_model->loadDirectory(m_testDir->url());
+ QVERIFY(QTest::kWaitForSignal(m_model, SIGNAL(itemsInserted(KItemRangeList)), DefaultTimeout));
+ QCOMPARE(itemsInModel(), QStringList() << "a.txt" << "b.jpg" << "c.txt");
+
+ // Simulate that KFileItemModelRolesUpdater determines the mime type.
+ // Resorting the files by 'type' will only work immediately if their
+ // mime types are known.
+ for (int index = 0; index < m_model->count(); ++index) {
+ m_model->fileItem(index).determineMimeType();
+ }
+
+ // Now: sort by type.
+ QSignalSpy spyItemsMoved(m_model, SIGNAL(itemsMoved(KItemRange,QList<int>)));
+ m_model->setSortRole("type");
+ QCOMPARE(m_model->sortRole(), QByteArray("type"));
+ QVERIFY(!spyItemsMoved.isEmpty());
+
+ // The actual order of the files might depend on the translation of the
+ // result of KFileItem::mimeComment() in the user's language.
+ QStringList version1;
+ version1 << "b.jpg" << "a.txt" << "c.txt";
+
+ QStringList version2;
+ version2 << "a.txt" << "c.txt" << "b.jpg";
+
+ const bool ok1 = (itemsInModel() == version1);
+ const bool ok2 = (itemsInModel() == version2);
+
+ QVERIFY(ok1 || ok2);
+}
+
void KFileItemModelTest::testModelConsistencyWhenInsertingItems()
{
//QSKIP("Temporary disabled", SkipSingle);