mirror of
https://invent.kde.org/system/dolphin
synced 2024-11-05 18:47:12 +00:00
optimization: don't load the directory tree if the widget is invisible
svn path=/trunk/KDE/kdebase/apps/; revision=661865
This commit is contained in:
parent
4405774647
commit
aad46935fa
2 changed files with 51 additions and 39 deletions
|
@ -86,50 +86,18 @@ void TreeViewSidebarPage::setUrl(const KUrl& url)
|
||||||
}
|
}
|
||||||
|
|
||||||
SidebarPage::setUrl(url);
|
SidebarPage::setUrl(url);
|
||||||
|
// TODO: it makes only sense to load the tree if the TreeViewSidebarPage
|
||||||
// adjust the root of the tree to the base bookmark
|
// is visible, but currently an assertion is triggered in KDirModel when hiding
|
||||||
KFilePlacesModel* placesModel = DolphinSettings::instance().placesModel();
|
// the tree view, changing to a complete different hierarchy and showing it again.
|
||||||
KUrl baseUrl = placesModel->url(placesModel->closestItem(url));
|
//if (isVisible()) {
|
||||||
if (!baseUrl.isValid()) {
|
loadTree(url);
|
||||||
// it's possible that no closest item is available and hence an
|
//}
|
||||||
// empty URL is returned
|
|
||||||
baseUrl = url;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_dirLister->url() != baseUrl) {
|
|
||||||
m_dirLister->stop();
|
|
||||||
m_dirLister->openUrl(baseUrl);
|
|
||||||
}
|
|
||||||
|
|
||||||
// select the folder which contains the given URL
|
|
||||||
QItemSelectionModel* selModel = m_treeView->selectionModel();
|
|
||||||
selModel->clearSelection();
|
|
||||||
|
|
||||||
const QModelIndex index = m_dirModel->indexForUrl(url);
|
|
||||||
if (index.isValid()) {
|
|
||||||
// the item with the given URL is already part of the model
|
|
||||||
const QModelIndex proxyIndex = m_proxyModel->mapFromSource(index);
|
|
||||||
m_treeView->scrollTo(proxyIndex);
|
|
||||||
selModel->setCurrentIndex(proxyIndex, QItemSelectionModel::Select);
|
|
||||||
} else {
|
|
||||||
// The item with the given URL is not loaded by the model yet. Iterate
|
|
||||||
// backward to the base URL and trigger the loading of the items for
|
|
||||||
// each hierarchy level.
|
|
||||||
connect(m_dirLister, SIGNAL(completed()),
|
|
||||||
this, SLOT(expandSelectionParent()));
|
|
||||||
|
|
||||||
KUrl parentUrl = url.upUrl();
|
|
||||||
while (!parentUrl.isParentOf(baseUrl)) {
|
|
||||||
m_dirLister->openUrl(parentUrl, true, false);
|
|
||||||
parentUrl = parentUrl.upUrl();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TreeViewSidebarPage::showEvent(QShowEvent* event)
|
void TreeViewSidebarPage::showEvent(QShowEvent* event)
|
||||||
{
|
{
|
||||||
SidebarPage::showEvent(event);
|
SidebarPage::showEvent(event);
|
||||||
|
loadTree(url());
|
||||||
}
|
}
|
||||||
|
|
||||||
void TreeViewSidebarPage::contextMenuEvent(QContextMenuEvent* event)
|
void TreeViewSidebarPage::contextMenuEvent(QContextMenuEvent* event)
|
||||||
|
@ -201,4 +169,45 @@ void TreeViewSidebarPage::dropUrls(const KUrl::List& urls,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TreeViewSidebarPage::loadTree(const KUrl& url)
|
||||||
|
{
|
||||||
|
// adjust the root of the tree to the base bookmark
|
||||||
|
KFilePlacesModel* placesModel = DolphinSettings::instance().placesModel();
|
||||||
|
KUrl baseUrl = placesModel->url(placesModel->closestItem(url));
|
||||||
|
if (!baseUrl.isValid()) {
|
||||||
|
// it's possible that no closest item is available and hence an
|
||||||
|
// empty URL is returned
|
||||||
|
baseUrl = url;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_dirLister->url() != baseUrl) {
|
||||||
|
m_dirLister->stop();
|
||||||
|
m_dirLister->openUrl(baseUrl);
|
||||||
|
}
|
||||||
|
|
||||||
|
// select the folder which contains the given URL
|
||||||
|
QItemSelectionModel* selModel = m_treeView->selectionModel();
|
||||||
|
selModel->clearSelection();
|
||||||
|
|
||||||
|
const QModelIndex index = m_dirModel->indexForUrl(url);
|
||||||
|
if (index.isValid()) {
|
||||||
|
// the item with the given URL is already part of the model
|
||||||
|
const QModelIndex proxyIndex = m_proxyModel->mapFromSource(index);
|
||||||
|
m_treeView->scrollTo(proxyIndex);
|
||||||
|
selModel->setCurrentIndex(proxyIndex, QItemSelectionModel::Select);
|
||||||
|
} else {
|
||||||
|
// The item with the given URL is not loaded by the model yet. Iterate
|
||||||
|
// backward to the base URL and trigger the loading of the items for
|
||||||
|
// each hierarchy level.
|
||||||
|
connect(m_dirLister, SIGNAL(completed()),
|
||||||
|
this, SLOT(expandSelectionParent()));
|
||||||
|
|
||||||
|
KUrl parentUrl = url.upUrl();
|
||||||
|
while (!parentUrl.isParentOf(baseUrl)) {
|
||||||
|
m_dirLister->openUrl(parentUrl, true, false);
|
||||||
|
parentUrl = parentUrl.upUrl();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#include "treeviewsidebarpage.moc"
|
#include "treeviewsidebarpage.moc"
|
||||||
|
|
|
@ -78,6 +78,9 @@ private slots:
|
||||||
void dropUrls(const KUrl::List& urls,
|
void dropUrls(const KUrl::List& urls,
|
||||||
const QModelIndex& index);
|
const QModelIndex& index);
|
||||||
|
|
||||||
|
private:
|
||||||
|
void loadTree(const KUrl& url);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
KDirLister* m_dirLister;
|
KDirLister* m_dirLister;
|
||||||
KDirModel* m_dirModel;
|
KDirModel* m_dirModel;
|
||||||
|
|
Loading…
Reference in a new issue