mirror of
https://invent.kde.org/system/dolphin
synced 2024-10-28 03:21:56 +00:00
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:
parent
f71e0881d2
commit
a97fe0c7ff
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
Loading…
Reference in a new issue