]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/kfileitemlistview.cpp
Fix grouping-issue with not visible sorting roles
[dolphin.git] / src / kitemviews / kfileitemlistview.cpp
index 783af5a264ea658e1f9333b1ef990dc5405d6f8c..528140deb13267f730c80302ce4d16c1ef9dfe8a 100644 (file)
@@ -304,27 +304,9 @@ void KFileItemListView::onScrollOffsetChanged(qreal current, qreal previous)
 
 void KFileItemListView::onVisibleRolesChanged(const QList<QByteArray>& current, const QList<QByteArray>& previous)
 {
+    Q_UNUSED(current);
     Q_UNUSED(previous);
-
-    Q_ASSERT(qobject_cast<KFileItemModel*>(model()));
-    KFileItemModel* fileItemModel = static_cast<KFileItemModel*>(model());
-
-    // KFileItemModel does not distinct between "visible" and "invisible" roles.
-    // Add all roles that are mandatory for having a working KFileItemListView:
-    QSet<QByteArray> keys = current.toSet();
-    QSet<QByteArray> roles = keys;
-    roles.insert("iconPixmap");
-    roles.insert("iconName");
-    roles.insert("name"); // TODO: just don't allow to disable it
-    roles.insert("isDir");
-    if (m_itemLayout == DetailsLayout) {
-        roles.insert("isExpanded");
-        roles.insert("expansionLevel");
-    }
-
-    fileItemModel->setRoles(roles);
-
-    m_modelRolesUpdater->setRoles(keys);
+    applyRolesToModel();
 }
 
 void KFileItemListView::onStyleOptionChanged(const KItemListStyleOption& current, const KItemListStyleOption& previous)
@@ -363,6 +345,16 @@ void KFileItemListView::slotItemsRemoved(const KItemRangeList& itemRanges)
     updateTimersInterval();
 }
 
+void KFileItemListView::slotSortRoleChanged(const QByteArray& current, const QByteArray& previous)
+{
+    const QByteArray sortRole = model()->sortRole();
+    if (!visibleRoles().contains(sortRole)) {
+        applyRolesToModel();
+    }
+
+    KItemListView::slotSortRoleChanged(current, previous);
+}
+
 void KFileItemListView::triggerVisibleIndexRangeUpdate()
 {
     m_modelRolesUpdater->setPaused(true);
@@ -481,4 +473,28 @@ void KFileItemListView::updateMinimumRolesWidths()
     m_minimumRolesWidths.insert("size", option.fontMetrics.width(sizeText));
 }
 
+void KFileItemListView::applyRolesToModel()
+{
+    Q_ASSERT(qobject_cast<KFileItemModel*>(model()));
+    KFileItemModel* fileItemModel = static_cast<KFileItemModel*>(model());
+
+    // KFileItemModel does not distinct between "visible" and "invisible" roles.
+    // Add all roles that are mandatory for having a working KFileItemListView:
+    QSet<QByteArray> roles = visibleRoles().toSet();
+    roles.insert("iconPixmap");
+    roles.insert("iconName");
+    roles.insert("name");
+    roles.insert("isDir");
+    if (m_itemLayout == DetailsLayout) {
+        roles.insert("isExpanded");
+        roles.insert("expansionLevel");
+    }
+
+    // Assure that the role that is used for sorting will be determined
+    roles.insert(fileItemModel->sortRole());
+
+    fileItemModel->setRoles(roles);
+    m_modelRolesUpdater->setRoles(roles);
+}
+
 #include "kfileitemlistview.moc"