diff options
| author | Peter Penz <[email protected]> | 2011-12-14 23:43:46 +0100 |
|---|---|---|
| committer | Peter Penz <[email protected]> | 2011-12-14 23:46:12 +0100 |
| commit | b27aefa798267bd8e1b031c66b458196eded19a0 (patch) | |
| tree | bbc46d590b3c5b72164e03cd1e181a9a45d00f04 /src/kitemviews | |
| parent | 0c1ad320d1fbc284da881328fa2240730bf547c5 (diff) | |
Fix expansion levels for search results
Force an expansion level of 0 for search results to prevent
showing tabbed child items without parent items.
Diffstat (limited to 'src/kitemviews')
| -rw-r--r-- | src/kitemviews/kfileitemmodel.cpp | 38 | ||||
| -rw-r--r-- | src/kitemviews/kfileitemmodel.h | 14 |
2 files changed, 37 insertions, 15 deletions
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<QByteArray, QVariant> 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<QPair<int, QVariant> > 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. |
