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);
return m_controller->url();
}
+void DolphinView::setRootUrl(const KUrl& url)
+{
+ m_rootUrl = url;
+}
+
KUrl DolphinView::rootUrl() const
{
return isColumnViewActive() ? m_dirLister->url() : 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)
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);
}
}