const int index = m_items.value(oldItem.url(), -1);
if (index >= 0) {
m_itemData[index]->item = newItem;
- m_itemData[index]->values = retrieveData(newItem);
+
+ // Keep old values as long as possible if they could not retrieved synchronously yet.
+ // The update of the values will be done asynchronously by KFileItemModelRolesUpdater.
+ QHashIterator<QByteArray, QVariant> it(retrieveData(newItem));
+ while (it.hasNext()) {
+ it.next();
+ m_itemData[index]->values.insert(it.key(), it.value());
+ }
+
m_items.remove(oldItem.url());
m_items.insert(newItem.url(), index);
indexes.append(index);
// The m_expandedParentsCountRoot may not get reset before all items with
// a bigger count have been removed.
- Q_ASSERT(m_expandedParentsCountRoot >= 0);
removeItems(expandedItems);
m_expandedParentsCountRoot = UninitializedExpandedParentsCountRoot;
// KFileItem::iconName() can be very expensive if the MIME-type is unknown
// and hence will be retrieved asynchronously by KFileItemModelRolesUpdater.
QHash<QByteArray, QVariant> data;
- data.insert("iconPixmap", QPixmap());
data.insert("url", item.url());
const bool isDir = item.isDir();
bool isDirB = true;
const QString subPathB = subPath(b->item, pathB, index, &isDirB);
- if (isDirA && !isDirB) {
- return (sortOrder() == Qt::AscendingOrder) ? -1 : +1;
- } else if (!isDirA && isDirB) {
- return (sortOrder() == Qt::AscendingOrder) ? +1 : -1;
+ if (m_sortFoldersFirst || m_sortRole == SizeRole) {
+ if (isDirA && !isDirB) {
+ return (sortOrder() == Qt::AscendingOrder) ? -1 : +1;
+ } else if (!isDirA && isDirB) {
+ return (sortOrder() == Qt::AscendingOrder) ? +1 : -1;
+ }
}
// Compare the items of the parents that represent the first