diff options
| author | Peter Penz <[email protected]> | 2011-12-20 22:20:20 +0100 |
|---|---|---|
| committer | Peter Penz <[email protected]> | 2011-12-20 22:30:15 +0100 |
| commit | d9e1db6ea448c462b5c8497b198fb3fc8ecb1acd (patch) | |
| tree | 4fb7445b5147f717daf1aa5ae65262745e70cb2a /src/kitemviews/kfileitemmodel.cpp | |
| parent | 8012fe7da2c2b4368e72156bb21a35a56959e40b (diff) | |
Remove child items when a parent item gets deleted
BUG: 289447
FIXED-IN: 4.8.0
Diffstat (limited to 'src/kitemviews/kfileitemmodel.cpp')
| -rw-r--r-- | src/kitemviews/kfileitemmodel.cpp | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/src/kitemviews/kfileitemmodel.cpp b/src/kitemviews/kfileitemmodel.cpp index 748a9bae1..8e1943b4b 100644 --- a/src/kitemviews/kfileitemmodel.cpp +++ b/src/kitemviews/kfileitemmodel.cpp @@ -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" |
