From: Peter Penz Date: Mon, 8 Nov 2010 18:05:36 +0000 (+0000) Subject: Remember the root-URL when saving the state of a view. This allows to restore a colum... X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/1ae377cd6ced8477fe235ca6a8006fef91e1fc33?ds=inline Remember the root-URL when saving the state of a view. This allows to restore a column-view correctly when going back in history. svn path=/trunk/KDE/kdebase/apps/; revision=1194323 --- diff --git a/src/views/dolphinview.cpp b/src/views/dolphinview.cpp index 2c2dbc231..101f98724 100644 --- a/src/views/dolphinview.cpp +++ b/src/views/dolphinview.cpp @@ -83,7 +83,6 @@ DolphinView::DolphinView(QWidget* parent, m_viewModeController(0), m_viewAccessor(proxyModel), m_selectionChangedTimer(0), - m_rootUrl(), m_activeItemUrl(), m_restoredContentsPosition(), m_createdItemUrl(), @@ -904,13 +903,18 @@ bool DolphinView::itemsExpandable() const void DolphinView::restoreState(QDataStream& stream) { - // current item + // Restore the URL of the current item that had the keyboard focus stream >> m_activeItemUrl; - // view position + // Restore the root URL + KUrl rootUrl; + stream >> rootUrl; + m_viewAccessor.setRootUrl(rootUrl); + + // Restore the view position stream >> m_restoredContentsPosition; - // expanded folders (only relevant for the details view - will be ignored by the view in other view modes) + // Restore expanded folders (only relevant for the details view - will be ignored by the view in other view modes) QSet urlsToExpand; stream >> urlsToExpand; const DolphinDetailsViewExpander* expander = m_viewAccessor.setExpandedUrls(urlsToExpand); @@ -925,7 +929,7 @@ void DolphinView::restoreState(QDataStream& stream) void DolphinView::saveState(QDataStream& stream) { - // current item + // Save the URL of the current item that has the keyboard focus KFileItem currentItem; const QAbstractItemView* view = m_viewAccessor.itemView(); @@ -935,19 +939,22 @@ void DolphinView::saveState(QDataStream& stream) currentItem = m_viewAccessor.dirModel()->itemForIndex(dirModelIndex); } - KUrl currentUrl; + KUrl currentItemUrl; if (!currentItem.isNull()) { - currentUrl = currentItem.url(); + currentItemUrl = currentItem.url(); } - stream << currentUrl; + stream << currentItemUrl; + + // Save the root URL + stream << m_viewAccessor.rootUrl(); - // view position + // Save view position const int x = view->horizontalScrollBar()->value(); const int y = view->verticalScrollBar()->value(); stream << QPoint(x, y); - // expanded folders (only relevant for the details view - the set will be empty in other view modes) + // Save expanded folders (only relevant for the details view - the set will be empty in other view modes) stream << m_viewAccessor.expandedUrls(); } @@ -1106,6 +1113,7 @@ void DolphinView::applyViewProperties() if (m_viewAccessor.itemView() == 0) { createView(); } + Q_ASSERT(m_viewAccessor.itemView() != 0); Q_ASSERT(m_viewAccessor.itemDelegate() != 0); @@ -1282,6 +1290,7 @@ QItemSelection DolphinView::childrenMatchingPattern(const QModelIndex& parent, c } DolphinView::ViewAccessor::ViewAccessor(DolphinSortFilterProxyModel* proxyModel) : + m_rootUrl(), m_iconsView(0), m_detailsView(0), m_columnsContainer(0), @@ -1322,6 +1331,12 @@ void DolphinView::ViewAccessor::createView(QWidget* parent, m_columnsContainer = new DolphinColumnViewContainer(parent, dolphinViewController, viewModeController); + if (!m_rootUrl.isEmpty() && m_rootUrl.isParentOf(viewModeController->url())) { + // The column-view must show several columns starting with m_rootUrl as + // first column and viewModeController->url() as last column. + m_columnsContainer->showColumn(m_rootUrl); + m_columnsContainer->showColumn(viewModeController->url()); + } break; default: @@ -1365,7 +1380,6 @@ void DolphinView::ViewAccessor::deleteView() } } - void DolphinView::ViewAccessor::prepareUrlChange(const KUrl& url) { if (m_columnsContainer != 0) { @@ -1403,9 +1417,14 @@ QWidget* DolphinView::ViewAccessor::layoutTarget() const return itemView(); } +void DolphinView::ViewAccessor::setRootUrl(const KUrl& rootUrl) +{ + m_rootUrl = rootUrl; +} + KUrl DolphinView::ViewAccessor::rootUrl() const { - return (m_columnsContainer != 0) ? m_columnsContainer->rootUrl() : KUrl(); + return (m_columnsContainer != 0) ? m_columnsContainer->rootUrl() : m_rootUrl; } bool DolphinView::ViewAccessor::supportsCategorizedSorting() const @@ -1418,7 +1437,6 @@ bool DolphinView::ViewAccessor::itemsExpandable() const return (m_detailsView != 0) && m_detailsView->itemsExpandable(); } - QSet DolphinView::ViewAccessor::expandedUrls() const { if (m_detailsView != 0) { diff --git a/src/views/dolphinview.h b/src/views/dolphinview.h index 5fcf1ab4d..d513eba1b 100644 --- a/src/views/dolphinview.h +++ b/src/views/dolphinview.h @@ -756,6 +756,7 @@ private: */ QWidget* layoutTarget() const; + void setRootUrl(const KUrl& rootUrl); KUrl rootUrl() const; bool supportsCategorizedSorting() const; @@ -775,6 +776,7 @@ private: KDirLister* dirLister() const; private: + KUrl m_rootUrl; DolphinIconsView* m_iconsView; DolphinDetailsView* m_detailsView; DolphinColumnViewContainer* m_columnsContainer; @@ -801,7 +803,6 @@ private: QTimer* m_selectionChangedTimer; - KUrl m_rootUrl; KUrl m_activeItemUrl; QPoint m_restoredContentsPosition; KUrl m_createdItemUrl; // URL for a new item that got created by the "Create New..." menu diff --git a/src/views/viewmodecontroller.h b/src/views/viewmodecontroller.h index c7378d59a..9435a21e6 100644 --- a/src/views/viewmodecontroller.h +++ b/src/views/viewmodecontroller.h @@ -77,7 +77,7 @@ public: * Requests the view mode implementation to hide tooltips. */ void requestToolTipHiding(); - + public slots: /** * Sets the URL to \a url and emits the signals cancelPreviews() and