]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphinview.cpp
Restore the root URL when navigating through the history (this is important for views...
[dolphin.git] / src / dolphinview.cpp
index d7e79f3302f32ea833fd33cf5a5a43daacb0f3e3..ab413f765e9a60796610f5a8644e83b8514ce4c4 100644 (file)
@@ -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,28 @@ void DolphinView::setUrl(const KUrl& url)
         return;
     }
 
+    const KUrl oldRootUrl = rootUrl();
     m_controller->setUrl(url); // emits urlChanged, which we forward
 
-    applyViewProperties(url);
+    const bool restoreColumnView = !isColumnViewActive()
+                                   && m_rootUrl.isParentOf(url)
+                                   && (m_rootUrl != url);
+    if (restoreColumnView) {
+        applyViewProperties(m_rootUrl);
+        startDirLister(m_rootUrl);
+        Q_ASSERT(itemView() == m_columnView);
+        m_columnView->showColumn(url);
+    } else {
+        applyViewProperties(url);
+        startDirLister(url);
+    }
 
-    startDirLister(url);
     itemView()->setFocus();
+
+    const KUrl newRootUrl = rootUrl();
+    if (newRootUrl != oldRootUrl) {
+        emit rootUrlChanged(newRootUrl);
+    }
 }
 
 void DolphinView::mouseReleaseEvent(QMouseEvent* event)
@@ -525,9 +547,8 @@ void DolphinView::startDirLister(const KUrl& url, bool reload)
                 // 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);
             }
-            m_dirLister->openUrl(url, keepOldDirs, false);
         }
     } else {
         m_dirLister->openUrl(url, false, reload);