X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/ce3ec0d0e6d2e73bcc8d465442e83c54835d36d1..4832bd7fbde4bae828fb5cd667eb129d1ce78af7:/src/dolphinview.cpp diff --git a/src/dolphinview.cpp b/src/dolphinview.cpp index 2dd8e289b..69d7706d3 100644 --- a/src/dolphinview.cpp +++ b/src/dolphinview.cpp @@ -71,7 +71,8 @@ DolphinView::DolphinView(QWidget* parent, m_fileItemDelegate(0), m_dolphinModel(dolphinModel), m_dirLister(dirLister), - m_proxyModel(proxyModel) + m_proxyModel(proxyModel), + m_rootUrl(url) { setFocusPolicy(Qt::StrongFocus); m_topLayout = new QVBoxLayout(this); @@ -121,6 +122,11 @@ const KUrl& DolphinView::url() const return m_controller->url(); } +void DolphinView::setRootUrl(const KUrl& url) +{ + m_rootUrl = url; +} + KUrl DolphinView::rootUrl() const { return isColumnViewActive() ? m_dirLister->url() : url(); @@ -414,12 +420,33 @@ void DolphinView::setUrl(const KUrl& url) return; } + const KUrl oldRootUrl = rootUrl(); m_controller->setUrl(url); // emits urlChanged, which we forward - applyViewProperties(url); + bool useUrlProperties = true; + const bool restoreColumnView = !isColumnViewActive() + && m_rootUrl.isParentOf(url) + && (m_rootUrl != url); + if (restoreColumnView) { + applyViewProperties(m_rootUrl); + if (itemView() == m_columnView) { + startDirLister(m_rootUrl); + m_columnView->showColumn(url); + useUrlProperties = false; + } + } + + if (useUrlProperties) { + applyViewProperties(url); + startDirLister(url); + } - startDirLister(url); itemView()->setFocus(); + + const KUrl newRootUrl = rootUrl(); + if (newRootUrl != oldRootUrl) { + emit rootUrlChanged(newRootUrl); + } } void DolphinView::mouseReleaseEvent(QMouseEvent* event) @@ -505,41 +532,31 @@ void DolphinView::startDirLister(const KUrl& url, bool reload) m_dirLister->stop(); - bool openDir = true; bool keepOldDirs = isColumnViewActive() && !m_initializeColumnView; m_initializeColumnView = false; if (keepOldDirs) { + // keeping old directories is only necessary for hierarchical views + // like the column view if (reload) { - keepOldDirs = false; - - const KUrl& dirListerUrl = m_dirLister->url(); - if (dirListerUrl.isValid()) { - const KUrl::List dirs = m_dirLister->directories(); - KUrl url; - foreach(url, dirs) { - m_dirLister->updateDirectory(url); - } - openDir = false; - } + // for the column view it is not enough to reload the directory lister, + // so this task is delegated to the column view directly + m_columnView->reload(); } else if (m_dirLister->directories().contains(url)) { // The dir lister contains the directory already, so - // KDirLister::openUrl() may not been invoked twice. + // KDirLister::openUrl() may not get invoked twice. m_dirLister->updateDirectory(url); - openDir = false; } else { const KUrl& dirListerUrl = m_dirLister->url(); if ((dirListerUrl == url) || !m_dirLister->url().isParentOf(url)) { // The current URL is not a child of the dir lister // URL. This may happen when e. g. a place has been selected // and hence the view must be reset. - keepOldDirs = false; + m_dirLister->openUrl(url, false, false); } } - } - - if (openDir) { - m_dirLister->openUrl(url, keepOldDirs, reload); + } else { + m_dirLister->openUrl(url, false, reload); } }