mirror of
https://invent.kde.org/system/dolphin
synced 2024-09-19 16:31:21 +00:00
Restore the tree state in Details View if a folder is re-expanded
This patch actually does two things when collapsing an expanded folder with expanded children: (a) It removes all expanded children (which are removed from the model) from m_expandedDirs. (b) It remembers the expanded children and restores them if the top-level folder is re-expanded. BUG: 304363 FIXED-IN: 4.12.0 REVIEW: 113293
This commit is contained in:
parent
8f6471b664
commit
07f0d125b2
|
@ -440,6 +440,11 @@ bool KFileItemModel::setExpanded(int index, bool expanded)
|
||||||
if (expanded) {
|
if (expanded) {
|
||||||
m_expandedDirs.insert(targetUrl, url);
|
m_expandedDirs.insert(targetUrl, url);
|
||||||
m_dirLister->openUrl(url, KDirLister::Keep);
|
m_dirLister->openUrl(url, KDirLister::Keep);
|
||||||
|
|
||||||
|
const KUrl::List previouslyExpandedChildren = m_itemData.at(index)->values.value("previouslyExpandedChildren").value<KUrl::List>();
|
||||||
|
foreach (const KUrl& url, previouslyExpandedChildren) {
|
||||||
|
m_urlsToExpand.insert(url);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
m_expandedDirs.remove(targetUrl);
|
m_expandedDirs.remove(targetUrl);
|
||||||
m_dirLister->stop(url);
|
m_dirLister->stop(url);
|
||||||
|
@ -448,14 +453,24 @@ bool KFileItemModel::setExpanded(int index, bool expanded)
|
||||||
const int itemCount = m_itemData.count();
|
const int itemCount = m_itemData.count();
|
||||||
const int firstChildIndex = index + 1;
|
const int firstChildIndex = index + 1;
|
||||||
|
|
||||||
|
KUrl::List expandedChildren;
|
||||||
|
|
||||||
int childIndex = firstChildIndex;
|
int childIndex = firstChildIndex;
|
||||||
while (childIndex < itemCount && expandedParentsCount(childIndex) > parentLevel) {
|
while (childIndex < itemCount && expandedParentsCount(childIndex) > parentLevel) {
|
||||||
|
ItemData* itemData = m_itemData.at(childIndex);
|
||||||
|
if (itemData->values.value("isExpanded").toBool()) {
|
||||||
|
const KUrl targetUrl = itemData->item.targetUrl();
|
||||||
|
m_expandedDirs.remove(targetUrl);
|
||||||
|
expandedChildren.append(targetUrl);
|
||||||
|
}
|
||||||
++childIndex;
|
++childIndex;
|
||||||
}
|
}
|
||||||
const int childrenCount = childIndex - firstChildIndex;
|
const int childrenCount = childIndex - firstChildIndex;
|
||||||
|
|
||||||
removeFilteredChildren(KItemRangeList() << KItemRange(index, 1 + childrenCount));
|
removeFilteredChildren(KItemRangeList() << KItemRange(index, 1 + childrenCount));
|
||||||
removeItems(KItemRangeList() << KItemRange(firstChildIndex, childrenCount), DeleteItemData);
|
removeItems(KItemRangeList() << KItemRange(firstChildIndex, childrenCount), DeleteItemData);
|
||||||
|
|
||||||
|
m_itemData.at(index)->values.insert("previouslyExpandedChildren", expandedChildren);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
Loading…
Reference in a new issue