]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Remove child items when a parent item gets deleted
authorPeter Penz <peter.penz19@gmail.com>
Tue, 20 Dec 2011 21:20:20 +0000 (22:20 +0100)
committerPeter Penz <peter.penz19@gmail.com>
Tue, 20 Dec 2011 21:30:15 +0000 (22:30 +0100)
BUG: 289447
FIXED-IN: 4.8.0

src/kitemviews/kfileitemmodel.cpp
src/kitemviews/kfileitemmodel.h

index 748a9bae1105dda57e2465cf7ecf2cd88681b5e9..8e1943b4b4f211e4cf592460177630505249d2d7 100644 (file)
@@ -719,13 +719,21 @@ void KFileItemModel::slotItemsDeleted(const KFileItemList& items)
 {
     dispatchPendingItemsToInsert();
 
-    if (!m_filteredItems.isEmpty()) {
+    KFileItemList itemsToRemove = items;
+    if (m_requestRole[ExpansionLevelRole] && m_rootExpansionLevel >= 0) {
+        // Assure that removing a parent item also results in removing all children
         foreach (const KFileItem& item, items) {
+            itemsToRemove.append(childItems(item));
+        }
+    }
+
+    if (!m_filteredItems.isEmpty()) {
+        foreach (const KFileItem& item, itemsToRemove) {
             m_filteredItems.remove(item);
         }
     }
 
-    removeItems(items);
+    removeItems(itemsToRemove);
 }
 
 void KFileItemModel::slotRefreshItems(const QList<QPair<KFileItem, KFileItem> >& items)
@@ -1849,4 +1857,21 @@ QList<QPair<int, QVariant> > KFileItemModel::genericStringRoleGroups(const QByte
     return groups;
 }
 
+KFileItemList KFileItemModel::childItems(const KFileItem& item) const
+{
+    KFileItemList items;
+
+    int index = m_items.value(item.url(), -1);
+    if (index >= 0) {
+        const int parentLevel = m_itemData.at(index)->values.value("expansionLevel").toInt();
+        ++index;
+        while (index < m_itemData.count() && m_itemData.at(index)->values.value("expansionLevel").toInt() > parentLevel) {
+            items.append(m_itemData.at(index)->item);
+            ++index;
+        }
+    }
+
+    return items;
+}
+
 #include "kfileitemmodel.moc"
index 0a68afcfcff144cc5b482e3400f75394f3827af0..2992de0658820d19578715066cdd03343f20b41d 100644 (file)
@@ -306,6 +306,11 @@ private:
      */
     bool isChildItem(int index) const;
 
+    /**
+     * @return Recursive list of child items that have \a item as upper most parent.
+     */
+    KFileItemList childItems(const KFileItem& item) const;
+
 private:
     QWeakPointer<KDirLister> m_dirLister;