diff --git a/src/core/kcoredirlister.cpp b/src/core/kcoredirlister.cpp --- a/src/core/kcoredirlister.cpp +++ b/src/core/kcoredirlister.cpp @@ -871,16 +871,16 @@ { qCDebug(KIO_CORE_DIRLISTER) << fileList.count(); // Group notifications by parent dirs (usually there would be only one parent dir) - QMap removedItemsByDir; + QMap removedItemsByDir; QList deletedSubdirs; for (QList::const_iterator it = fileList.begin(); it != fileList.end(); ++it) { QUrl url(*it); DirItem *dirItem = dirItemForUrl(url); // is it a listed directory? if (dirItem) { deletedSubdirs.append(url); if (!dirItem->rootItem.isNull()) { - removedItemsByDir[url.toString()].append(dirItem->rootItem); + removedItemsByDir[url.toString()].push_back(dirItem->rootItem); } } @@ -892,7 +892,7 @@ for (NonMovableFileItemList::iterator fit = dirItem->lstItems.begin(), fend = dirItem->lstItems.end(); fit != fend; ++fit) { if ((*fit).url() == url) { const KFileItem fileitem = *fit; - removedItemsByDir[parentDir.toString()].append(fileitem); + removedItemsByDir[parentDir.toString()].push_back(fileitem); // If we found a fileitem, we can test if it's a dir. If not, we'll go to deleteDir just in case. if (fileitem.isNull() || fileitem.isDir()) { deletedSubdirs.append(url); @@ -903,7 +903,7 @@ } } - QMap::const_iterator rit = removedItemsByDir.constBegin(); + QMap::const_iterator rit = removedItemsByDir.constBegin(); for (; rit != removedItemsByDir.constEnd(); ++rit) { // Tell the views about it before calling deleteDir. // They might need the subdirs' file items (see the dirtree). @@ -1931,11 +1931,11 @@ void KCoreDirListerCache::deleteUnmarkedItems(const QList &listers, NonMovableFileItemList &lstItems, const QHash &itemsToDelete) { // Make list of deleted items (for emitting) - KFileItemList deletedItems; + KFileItemListV2 deletedItems; QHashIterator kit(itemsToDelete); while (kit.hasNext()) { const KFileItem& item = *kit.next().value(); - deletedItems.append(item); + deletedItems.push_back(item); qCDebug(KIO_CORE_DIRLISTER) << "deleted:" << item.name() << &item; } @@ -1949,7 +1949,7 @@ itemsDeleted(listers, deletedItems); } -void KCoreDirListerCache::itemsDeleted(const QList &listers, const KFileItemList &deletedItems) +void KCoreDirListerCache::itemsDeleted(const QList &listers, const KFileItemListV2 &deletedItems) { Q_FOREACH (KCoreDirLister *kdl, listers) { kdl->d->emitItemsDeleted(deletedItems); @@ -2262,7 +2262,7 @@ settings = newSettings; Q_FOREACH (const QUrl &dir, lstDirs) { - KFileItemList deletedItems; + KFileItemListV2 deletedItems; NonMovableFileItemList *itemList = kDirListerCache()->itemsForDir(dir); if (!itemList) { @@ -2282,11 +2282,11 @@ if (nowVisible && !wasVisible) { addNewItem(dir, item); // takes care of emitting newItem or itemsFilteredByMime } else if (!nowVisible && wasVisible) { - deletedItems.append(*kit); + deletedItems.push_back(*kit); } } - if (!deletedItems.isEmpty()) { - emit m_parent->itemsDeleted(deletedItems); + if (!deletedItems.empty()) { + emit m_parent->itemsDeleted(toKFileItemList(deletedItems)); } emitItems(); } @@ -2499,14 +2499,14 @@ } Q_ASSERT(!item.isNull()); - (*lstNewItems)[directoryUrl].append(item); // items not filtered + (*lstNewItems)[directoryUrl].push_back(item); // items not filtered } else { if (!lstMimeFilteredItems) { - lstMimeFilteredItems = new KFileItemList; + lstMimeFilteredItems = new KFileItemListV2; } Q_ASSERT(!item.isNull()); - lstMimeFilteredItems->append(item); // only filtered by mime + lstMimeFilteredItems->push_back(item); // only filtered by mime } } @@ -2533,7 +2533,7 @@ } Q_ASSERT(!item.isNull()); - (*lstNewItems)[directoryUrl].append(item); + (*lstNewItems)[directoryUrl].push_back(item); } else { if (!lstRefreshItems) { lstRefreshItems = new QList >; @@ -2544,43 +2544,44 @@ } } else if (!refreshItemWasFiltered) { if (!lstRemoveItems) { - lstRemoveItems = new KFileItemList; + lstRemoveItems = new KFileItemListV2; } // notify the user that the mimetype of a file changed that doesn't match // a filter or does match an exclude filter // This also happens when renaming foo to .foo and dot files are hidden (#174721) Q_ASSERT(!oldItem.isNull()); - lstRemoveItems->append(oldItem); + lstRemoveItems->push_back(oldItem); } } void KCoreDirLister::Private::emitItems() { NewItemsHash *tmpNew = lstNewItems; lstNewItems = nullptr; - KFileItemList *tmpMime = lstMimeFilteredItems; + KFileItemListV2 *tmpMime = lstMimeFilteredItems; lstMimeFilteredItems = nullptr; QList > *tmpRefresh = lstRefreshItems; lstRefreshItems = nullptr; - KFileItemList *tmpRemove = lstRemoveItems; + KFileItemListV2 *tmpRemove = lstRemoveItems; lstRemoveItems = nullptr; if (tmpNew) { - QHashIterator it(*tmpNew); + QHashIterator it(*tmpNew); while (it.hasNext()) { it.next(); - emit m_parent->itemsAdded(it.key(), it.value()); - emit m_parent->newItems(it.value()); // compat + const KFileItemList list = toKFileItemList(it.value()); + emit m_parent->itemsAdded(it.key(), list); + emit m_parent->newItems(list); // compat } delete tmpNew; } if (tmpMime) { - emit m_parent->itemsFilteredByMime(*tmpMime); + emit m_parent->itemsFilteredByMime(toKFileItemList(*tmpMime)); delete tmpMime; } @@ -2590,7 +2591,7 @@ } if (tmpRemove) { - emit m_parent->itemsDeleted(*tmpRemove); + emit m_parent->itemsDeleted(toKFileItemList(*tmpRemove)); delete tmpRemove; } } @@ -2604,18 +2605,15 @@ && m_parent->matchesFilter(item); } -void KCoreDirLister::Private::emitItemsDeleted(const KFileItemList &_items) +void KCoreDirLister::Private::emitItemsDeleted(const KFileItemListV2 &_items) { - KFileItemList items = _items; - QMutableListIterator it(items); - while (it.hasNext()) { - const KFileItem &item = it.next(); - if (!isItemVisible(item) || !m_parent->matchesMimeFilter(item)) { - it.remove(); - } - } - if (!items.isEmpty()) { - emit m_parent->itemsDeleted(items); + KFileItemListV2 items = _items; + items.erase(std::remove_if(items.begin(), items.end(), [&](const KFileItem &item) { + return (!isItemVisible(item) || !m_parent->matchesMimeFilter(item)); + }), items.end()); + + if (!items.empty()) { + emit m_parent->itemsDeleted(toKFileItemList(items)); } } @@ -2751,7 +2749,7 @@ } if (which == AllItems) { - return allItems->toKFileItemList(); + return toKFileItemList(allItems->toKFileItemList()); } else { // only items passing the filters KFileItemList result; NonMovableFileItemList::const_iterator kit = allItems->constBegin(); diff --git a/src/core/kcoredirlister_p.h b/src/core/kcoredirlister_p.h --- a/src/core/kcoredirlister_p.h +++ b/src/core/kcoredirlister_p.h @@ -76,13 +76,13 @@ return KFileItem(); } - KFileItemList toKFileItemList() const + KFileItemListV2 toKFileItemList() const { - KFileItemList result; + KFileItemListV2 result; result.reserve(count()); foreach (const NonMovableFileItem &item, *this) { - result.append(item); + result.push_back(item); } return result; @@ -135,7 +135,7 @@ void addNewItems(const QUrl &directoryUrl, const NonMovableFileItemList &items); void addRefreshItem(const QUrl &directoryUrl, const KFileItem &oldItem, const KFileItem &item); void emitItems(); - void emitItemsDeleted(const KFileItemList &items); + void emitItemsDeleted(const KFileItemListV2 &items); /** * Redirect this dirlister from oldUrl to newUrl. @@ -191,10 +191,10 @@ // file item for the root itself (".") KFileItem rootFileItem; - typedef QHash NewItemsHash; + typedef QHash NewItemsHash; NewItemsHash *lstNewItems; QList > *lstRefreshItems; - KFileItemList *lstMimeFilteredItems, *lstRemoveItems; + KFileItemListV2 *lstMimeFilteredItems, *lstRemoveItems; QList m_cachedItemsJobs; @@ -335,7 +335,7 @@ void deleteUnmarkedItems(const QList&, NonMovableFileItemList &lstItems, const QHash &itemsToDelete); // Helper method called when we know that a list of items was deleted - void itemsDeleted(const QList &listers, const KFileItemList &deletedItems); + void itemsDeleted(const QList &listers, const KFileItemListV2 &deletedItems); void slotFilesRemoved(const QList &urls); // common for slotRedirection and slotFileRenamed void renameDir(const QUrl &oldUrl, const QUrl &url); diff --git a/src/core/kcoredirlister_p.h b/src/core/kcoredirlister_p.h.orig copy from src/core/kcoredirlister_p.h copy to src/core/kcoredirlister_p.h.orig