┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/kitemviews
diff options
context:
space:
mode:
authorPeter Penz <[email protected]>2011-12-14 23:43:46 +0100
committerPeter Penz <[email protected]>2011-12-14 23:46:12 +0100
commitb27aefa798267bd8e1b031c66b458196eded19a0 (patch)
treebbc46d590b3c5b72164e03cd1e181a9a45d00f04 /src/kitemviews
parent0c1ad320d1fbc284da881328fa2240730bf547c5 (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.cpp38
-rw-r--r--src/kitemviews/kfileitemmodel.h14
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.