mirror of
https://invent.kde.org/system/dolphin
synced 2024-10-28 11:25:14 +00:00
Fix expansion levels for search results
Force an expansion level of 0 for search results to prevent showing tabbed child items without parent items.
This commit is contained in:
parent
0c1ad320d1
commit
b27aefa798
|
@ -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()) {
|
||||
|
|
|
@ -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.
|
||||
|
|
Loading…
Reference in a new issue