┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/kitemviews/kfileitemmodel.cpp
diff options
context:
space:
mode:
authorFrank Reininghaus <[email protected]>2013-02-19 15:45:44 +0100
committerFrank Reininghaus <[email protected]>2013-02-19 15:45:44 +0100
commitcc1455c0e6076c4abd5e321343be456184c51f5e (patch)
treed9421bcd8ae237cd1eb97f30d1e645d10de9eb90 /src/kitemviews/kfileitemmodel.cpp
parente6ef1eec3a5c0b9fdabff144990d06250fc1839e (diff)
parent518b53feb43325d5c194fa15118e80ab0729b620 (diff)
Merge remote-tracking branch 'origin/KDE/4.10'
Conflicts: dolphin/src/tests/kfileitemmodeltest.cpp lib/konq/konq_operations.cpp
Diffstat (limited to 'src/kitemviews/kfileitemmodel.cpp')
-rw-r--r--src/kitemviews/kfileitemmodel.cpp27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/kitemviews/kfileitemmodel.cpp b/src/kitemviews/kfileitemmodel.cpp
index 60fc27546..d16a6c1d3 100644
--- a/src/kitemviews/kfileitemmodel.cpp
+++ b/src/kitemviews/kfileitemmodel.cpp
@@ -795,6 +795,33 @@ void KFileItemModel::slotItemsDeleted(const KFileItemList& items)
foreach (const KFileItem& item, itemsToRemove) {
m_filteredItems.remove(item);
}
+
+ if (m_requestRole[ExpandedParentsCountRole] && m_expandedParentsCountRoot >= 0) {
+ // Remove all filtered children of deleted items. First, we put the
+ // deleted URLs into a set to provide fast lookup while iterating
+ // over m_filteredItems and prevent quadratic complexity if there
+ // are N removed items and N filtered items.
+ QSet<KUrl> urlsToRemove;
+ urlsToRemove.reserve(itemsToRemove.count());
+ foreach (const KFileItem& item, itemsToRemove) {
+ KUrl url = item.url();
+ url.adjustPath(KUrl::RemoveTrailingSlash);
+ urlsToRemove.insert(url);
+ }
+
+ QSet<KFileItem>::iterator it = m_filteredItems.begin();
+ while (it != m_filteredItems.end()) {
+ const KUrl url = it->url();
+ KUrl parentUrl = url.upUrl();
+ parentUrl.adjustPath(KUrl::RemoveTrailingSlash);
+
+ if (urlsToRemove.contains(parentUrl)) {
+ it = m_filteredItems.erase(it);
+ } else {
+ ++it;
+ }
+ }
+ }
}
removeItems(itemsToRemove);