From: Peter Penz Date: Wed, 14 Dec 2011 22:43:46 +0000 (+0100) Subject: Fix expansion levels for search results X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/b27aefa798267bd8e1b031c66b458196eded19a0?ds=inline Fix expansion levels for search results Force an expansion level of 0 for search results to prevent showing tabbed child items without parent items. --- diff --git a/src/kitemviews/kfileitemmodel.cpp b/src/kitemviews/kfileitemmodel.cpp index 46f00361e..ed45e6975 100644 --- a/src/kitemviews/kfileitemmodel.cpp +++ b/src/kitemviews/kfileitemmodel.cpp @@ -49,7 +49,7 @@ KFileItemModel::KFileItemModel(KDirLister* dirLister, QObject* parent) : m_pendingItemsToInsert(), m_pendingEmitLoadingCompleted(false), m_groups(), - m_rootExpansionLevel(-1), + m_rootExpansionLevel(UninitializedRootExpansionLevel), m_expandedUrls(), m_urlsToExpand() { @@ -807,7 +807,7 @@ void KFileItemModel::slotClear() m_resortAllItemsTimer->stop(); m_pendingItemsToInsert.clear(); - m_rootExpansionLevel = -1; + m_rootExpansionLevel = UninitializedRootExpansionLevel; const int removedCount = m_itemData.count(); if (removedCount > 0) { @@ -990,7 +990,7 @@ void KFileItemModel::removeItems(const KFileItemList& items) } if (count() <= 0) { - m_rootExpansionLevel = -1; + m_rootExpansionLevel = UninitializedRootExpansionLevel; } itemRanges << KItemRange(removedAtIndex, removedCount); @@ -1044,7 +1044,7 @@ void KFileItemModel::removeExpandedItems() Q_ASSERT(m_rootExpansionLevel >= 0); removeItems(expandedItems); - m_rootExpansionLevel = -1; + m_rootExpansionLevel = UninitializedRootExpansionLevel; m_expandedUrls.clear(); } @@ -1141,17 +1141,29 @@ QHash KFileItemModel::retrieveData(const KFileItem& item) } if (m_requestRole[ExpansionLevelRole]) { - if (m_rootExpansionLevel < 0 && m_dirLister.data()) { - const QString rootDir = m_dirLister.data()->url().directory(KUrl::AppendTrailingSlash); - m_rootExpansionLevel = rootDir.count('/'); - if (m_rootExpansionLevel == 1) { - // Special case: The root is already reached and no parent is available - --m_rootExpansionLevel; + if (m_rootExpansionLevel == UninitializedRootExpansionLevel && m_dirLister.data()) { + const KUrl rootUrl = m_dirLister.data()->url(); + const QString protocol = rootUrl.protocol(); + const bool isSearchUrl = (protocol.contains("search") || protocol == QLatin1String("nepomuk")); + if (isSearchUrl) { + m_rootExpansionLevel = ForceRootExpansionLevel; + } else { + const QString rootDir = rootUrl.directory(KUrl::AppendTrailingSlash); + m_rootExpansionLevel = rootDir.count('/'); + if (m_rootExpansionLevel == 1) { + // Special case: The root is already reached and no parent is available + --m_rootExpansionLevel; + } } } - const QString dir = item.url().directory(KUrl::AppendTrailingSlash); - const int level = dir.count('/') - m_rootExpansionLevel - 1; - data.insert("expansionLevel", level); + + if (m_rootExpansionLevel == ForceRootExpansionLevel) { + data.insert("expansionLevel", 0); + } else { + const QString dir = item.url().directory(KUrl::AppendTrailingSlash); + const int level = dir.count('/') - m_rootExpansionLevel - 1; + data.insert("expansionLevel", level); + } } if (item.isMimeTypeKnown()) { diff --git a/src/kitemviews/kfileitemmodel.h b/src/kitemviews/kfileitemmodel.h index bc692e7c9..0a68afcfc 100644 --- a/src/kitemviews/kfileitemmodel.h +++ b/src/kitemviews/kfileitemmodel.h @@ -334,8 +334,18 @@ private: mutable QList > m_groups; // Stores the smallest expansion level of the root-URL. Is required to calculate - // the "expansionLevel" role in an efficient way. A value < 0 indicates that - // it has not been initialized yet. + // the "expansionLevel" role in an efficient way. A value < 0 indicates a + // special meaning: + enum RootExpansionLevelTypes + { + // m_rootExpansionLevel is uninitialized and must be determined by checking + // the root URL from the KDirLister. + UninitializedRootExpansionLevel = -1, + // All items should be forced to get an expansion level of 0 even if they + // represent child items. This is useful for slaves that provide no parent items + // for child items like e.g. the search IO slaves. + ForceRootExpansionLevel = -2 + }; mutable int m_rootExpansionLevel; // Stores the URLs of the expanded folders.