Fix recent regressions when "Sort by Type" is used

This commit ensures that the mime types and icons are determined
synchronously for 200 ms when "Sort by Type" is enabled.

REVIEW: 109344
This commit is contained in:
Frank Reininghaus 2013-03-12 19:26:36 +01:00
parent 0d3225e389
commit ba9e8d0a2d
2 changed files with 11 additions and 11 deletions

View file

@ -984,13 +984,6 @@ void KFileItemModel::insertItems(QList<ItemData*>& items)
return;
}
if (m_sortRole == TypeRole) {
// Try to resolve the MIME-types synchronously to prevent a reordering of
// the items when sorting by type (per default MIME-types are resolved
// asynchronously by KFileItemModelRolesUpdater).
determineMimeTypes(items, 200);
}
#ifdef KFILEITEMMODEL_DEBUG
QElapsedTimer timer;
timer.start();
@ -1160,6 +1153,13 @@ void KFileItemModel::removeItems(const KFileItemList& items, RemoveItemsBehavior
QList<KFileItemModel::ItemData*> KFileItemModel::createItemDataList(const KUrl& parentUrl, const KFileItemList& items) const
{
if (m_sortRole == TypeRole) {
// Try to resolve the MIME-types synchronously to prevent a reordering of
// the items when sorting by type (per default MIME-types are resolved
// asynchronously by KFileItemModelRolesUpdater).
determineMimeTypes(items, 200);
}
const int parentIndex = m_items.value(parentUrl, -1);
ItemData* parentItem = parentIndex < 0 ? 0 : m_itemData.at(parentIndex);
@ -1956,12 +1956,12 @@ const KFileItemModel::RoleInfoMap* KFileItemModel::rolesInfoMap(int& count)
return rolesInfoMap;
}
void KFileItemModel::determineMimeTypes(const QList<ItemData*>& items, int timeout)
void KFileItemModel::determineMimeTypes(const KFileItemList& items, int timeout)
{
QElapsedTimer timer;
timer.start();
foreach (const ItemData* itemData, items) { // krazy:exclude=foreach
itemData->item.determineMimeType();
foreach (const KFileItem& item, items) { // krazy:exclude=foreach
item.determineMimeType();
if (timer.elapsed() > timeout) {
// Don't block the user interface, let the remaining items
// be resolved asynchronously.

View file

@ -421,7 +421,7 @@ private:
* Determines the MIME-types of all items that can be done within
* the given timeout.
*/
static void determineMimeTypes(const QList<ItemData*>& items, int timeout);
static void determineMimeTypes(const KFileItemList& items, int timeout);
/**
* Checks if the model's internal data structures are consistent.