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);
// 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();
this, SLOT(slotItemsChanged(KItemRangeList,QSet<QByteArray>)));
// Use a timer to prevent that each call of slotItemsChanged() results in a synchronous
- // resolving of the roles. Postpone the resolving until no update has been done for 2 seconds.
+ // resolving of the roles. Postpone the resolving until no update has been done for 1 second.
m_changedItemsTimer = new QTimer(this);
- m_changedItemsTimer->setInterval(2000);
+ m_changedItemsTimer->setInterval(1000);
m_changedItemsTimer->setSingleShot(true);
connect(m_changedItemsTimer, SIGNAL(timeout()), this, SLOT(resolveChangedItems()));
}
itemRanges.append(KItemRange(index, 1));
}
}
+ m_changedItems.clear();
startUpdating(itemRanges);
}
data.insert("iconName", item.iconName());
if (m_clearPreviews) {
- data.insert("iconPixmap", QString());
+ data.insert("iconPixmap", QPixmap());
}
disconnect(m_model, SIGNAL(itemsChanged(KItemRangeList,QSet<QByteArray>)),