]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Do not reset the 'isExpanded' state when an expanded folder is refreshed
authorFrank Reininghaus <frank78ac@googlemail.com>
Wed, 22 May 2013 16:14:21 +0000 (18:14 +0200)
committerFrank Reininghaus <frank78ac@googlemail.com>
Wed, 22 May 2013 16:14:38 +0000 (18:14 +0200)
If an item is moved out of an expanded folder, the model receives the
dir lister's refreshItems signal for the folder. The method
retrieveData() then updates the folder's properties. This commit makes
sure that the 'isExpanded' state is not touched by retrieveData(). A
side-effect is that the 'isExpanded' role is not initialized to 'false',
but this does not matter because trying to read a non-existing role from
the QHash<QByteArray, QVariant> yields a default-constructed QVariant,
which evaluates to 'false'.

BUG: 299675
FIXED-IN: 4.10.4
REVIEW: 110401

src/kitemviews/kfileitemmodel.cpp
src/tests/kfileitemmodeltest.cpp

index 7ba78a436fa57bf74c8f7d7948e27b0deab421ec..c78fdc358cb02632f63c040e92bb172da9be3199 100644 (file)
@@ -1333,10 +1333,6 @@ QHash<QByteArray, QVariant> KFileItemModel::retrieveData(const KFileItem& item)
         data.insert("path", path);
     }
 
-    if (m_requestRole[IsExpandedRole]) {
-        data.insert("isExpanded", false);
-    }
-
     if (m_requestRole[IsExpandableRole]) {
         data.insert("isExpandable", item.isDir() && item.url() == item.targetUrl());
     }
index 58e83ac68cf469f7e9e169ec24ee861f1681c0ed..e636bcd9170c5559a9bb2b9d7e27449f4ab77e1d 100644 (file)
@@ -75,6 +75,7 @@ private slots:
     void testIndexForKeyboardSearch();
     void testNameFilter();
     void testEmptyPath();
+    void testRefreshExpandedItem();
     void testRemoveHiddenItems();
     void collapseParentOfHiddenItems();
     void removeParentOfHiddenItems();
@@ -801,6 +802,39 @@ void KFileItemModelTest::testEmptyPath()
     m_model->slotCompleted();
 }
 
+/**
+ * Verifies that the 'isExpanded' state of folders does not change when the
+ * 'refreshItems' signal is received, see https://bugs.kde.org/show_bug.cgi?id=299675.
+ */
+void KFileItemModelTest::testRefreshExpandedItem()
+{
+    QSet<QByteArray> modelRoles = m_model->roles();
+    modelRoles << "isExpanded" << "isExpandable" << "expandedParentsCount";
+    m_model->setRoles(modelRoles);
+
+    QStringList files;
+    files << "a/1" << "a/2" << "3" << "4";
+    m_testDir->createFiles(files);
+
+    m_model->loadDirectory(m_testDir->url());
+    QVERIFY(QTest::kWaitForSignal(m_model, SIGNAL(itemsInserted(KItemRangeList)), DefaultTimeout));
+    QCOMPARE(m_model->count(), 3); // "a/", "3", "4"
+
+    m_model->setExpanded(0, true);
+    QVERIFY(QTest::kWaitForSignal(m_model, SIGNAL(itemsInserted(KItemRangeList)), DefaultTimeout));
+    QCOMPARE(m_model->count(), 5); // "a/", "a/1", "a/2", "3", "4"
+    QVERIFY(m_model->isExpanded(0));
+
+    QSignalSpy spyItemsChanged(m_model, SIGNAL(itemsChanged(KItemRangeList,QSet<QByteArray>)));
+
+    const KFileItem item = m_model->fileItem(0);
+    m_model->slotRefreshItems(QList<QPair<KFileItem, KFileItem> >() << qMakePair(item, item));
+    QVERIFY(!spyItemsChanged.isEmpty());
+
+    QCOMPARE(m_model->count(), 5); // "a/", "a/1", "a/2", "3", "4"
+    QVERIFY(m_model->isExpanded(0));
+}
+
 /**
  * Verify that removing hidden files and folders from the model does not
  * result in a crash, see https://bugs.kde.org/show_bug.cgi?id=314046