┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/kitemviews/kfileitemmodel.cpp
diff options
context:
space:
mode:
authorFrank Reininghaus <[email protected]>2013-12-22 13:20:02 +0100
committerFrank Reininghaus <[email protected]>2013-12-22 13:20:02 +0100
commit545d872b817a0a91aeb7867f04cc0d912d226da0 (patch)
tree5ef5a04bbaf78809d8fd1cd17cc950c0830e11fe /src/kitemviews/kfileitemmodel.cpp
parent2e4991d5f095170ab0b306bbdfb9eaa38a5f3f03 (diff)
parentc2108b122e2708245907d9f779f164721bcb3653 (diff)
Merge remote-tracking branch 'origin/KDE/4.12'
Diffstat (limited to 'src/kitemviews/kfileitemmodel.cpp')
-rw-r--r--src/kitemviews/kfileitemmodel.cpp45
1 files changed, 38 insertions, 7 deletions
diff --git a/src/kitemviews/kfileitemmodel.cpp b/src/kitemviews/kfileitemmodel.cpp
index 058248a18..b3c56e1c6 100644
--- a/src/kitemviews/kfileitemmodel.cpp
+++ b/src/kitemviews/kfileitemmodel.cpp
@@ -424,6 +424,15 @@ void KFileItemModel::setRoles(const QSet<QByteArray>& roles)
kWarning() << "TODO: Emitting itemsChanged() with no information what has changed!";
emit itemsChanged(KItemRangeList() << KItemRange(0, count()), QSet<QByteArray>());
}
+
+ // Clear the 'values' of all filtered items. They will be re-populated with the
+ // correct roles the next time 'values' will be accessed via data(int).
+ QHash<KFileItem, ItemData*>::iterator filteredIt = m_filteredItems.begin();
+ const QHash<KFileItem, ItemData*>::iterator filteredEnd = m_filteredItems.end();
+ while (filteredIt != filteredEnd) {
+ (*filteredIt)->values.clear();
+ ++filteredIt;
+ }
}
QSet<QByteArray> KFileItemModel::roles() const
@@ -969,6 +978,20 @@ void KFileItemModel::slotRefreshItems(const QList<QPair<KFileItem, KFileItem> >&
m_items.remove(oldItem.url());
m_items.insert(newItem.url(), index);
indexes.append(index);
+ } else {
+ // Check if 'oldItem' is one of the filtered items.
+ QHash<KFileItem, ItemData*>::iterator it = m_filteredItems.find(oldItem);
+ if (it != m_filteredItems.end()) {
+ ItemData* itemData = it.value();
+ itemData->item = newItem;
+
+ // The data stored in 'values' might have changed. Therefore, we clear
+ // 'values' and re-populate it the next time it is requested via data(int).
+ itemData->values.clear();
+
+ m_filteredItems.erase(it);
+ m_filteredItems.insert(newItem, itemData);
+ }
}
}
@@ -1044,6 +1067,7 @@ void KFileItemModel::insertItems(QList<ItemData*>& newItems)
#endif
m_groups.clear();
+ prepareItemsForSorting(newItems);
if (m_sortRole == NameRole && m_naturalSorting) {
// Natural sorting of items can be very slow. However, it becomes much
@@ -1207,6 +1231,11 @@ QList<KFileItemModel::ItemData*> KFileItemModel::createItemDataList(const KUrl&
itemDataList.append(itemData);
}
+ return itemDataList;
+}
+
+void KFileItemModel::prepareItemsForSorting(QList<ItemData*>& itemDataList)
+{
switch (m_sortRole) {
case PermissionsRole:
case OwnerRole:
@@ -1216,16 +1245,20 @@ QList<KFileItemModel::ItemData*> KFileItemModel::createItemDataList(const KUrl&
// These roles can be determined with retrieveData, and they have to be stored
// in the QHash "values" for the sorting.
foreach (ItemData* itemData, itemDataList) {
- itemData->values = retrieveData(itemData->item, parentItem);
+ if (itemData->values.isEmpty()) {
+ itemData->values = retrieveData(itemData->item, itemData->parent);
+ }
}
break;
case TypeRole:
// At least store the data including the file type for items with known MIME type.
foreach (ItemData* itemData, itemDataList) {
- const KFileItem item = itemData->item;
- if (item.isDir() || item.isMimeTypeKnown()) {
- itemData->values = retrieveData(itemData->item, parentItem);
+ if (itemData->values.isEmpty()) {
+ const KFileItem item = itemData->item;
+ if (item.isDir() || item.isMimeTypeKnown()) {
+ itemData->values = retrieveData(itemData->item, itemData->parent);
+ }
}
}
break;
@@ -1234,12 +1267,10 @@ QList<KFileItemModel::ItemData*> KFileItemModel::createItemDataList(const KUrl&
// The other roles are either resolved by KFileItemModelRolesUpdater
// (this includes the SizeRole for directories), or they do not need
// to be stored in the QHash "values" for sorting because the data can
- // be retrieved directly from the KFileItem (NameRole, SiezRole for files,
+ // be retrieved directly from the KFileItem (NameRole, SizeRole for files,
// DateRole).
break;
}
-
- return itemDataList;
}
int KFileItemModel::expandedParentsCount(const ItemData* data)