]> cloud.milkyroute.net Git - dolphin.git/commitdiff
When the view is reloaded in Dolphin or the DolphinPart inside
authorFrank Reininghaus <frank78ac@googlemail.com>
Mon, 30 Nov 2009 08:15:22 +0000 (08:15 +0000)
committerFrank Reininghaus <frank78ac@googlemail.com>
Mon, 30 Nov 2009 08:15:22 +0000 (08:15 +0000)
Konqueror, restore the selection, the current item, the scroll
position, and the expanded folders in the Details View.

BUG: 169893
BUG: 187732

svn path=/trunk/KDE/kdebase/apps/; revision=1056438

src/dolphinview.cpp
src/dolphinview.h

index e057c950acd6d83ce4ccd2347ceb38484e0d5b47..fe42964099800dc88ee6025a66cfe4894ca6f6b8 100644 (file)
@@ -438,8 +438,16 @@ KFileItemDelegate::InformationList DolphinView::additionalInfo() const
 
 void DolphinView::reload()
 {
+    QByteArray viewState;
+    QDataStream saveStream(&viewState, QIODevice::WriteOnly);
+    saveState(saveStream);
+    m_selectedItems = selectedItems();
+
     setUrl(url());
     loadDirectory(url(), true);
+
+    QDataStream restoreStream(viewState);
+    restoreState(restoreStream);
 }
 
 void DolphinView::refresh()
@@ -593,11 +601,7 @@ void DolphinView::invertSelection()
 
 void DolphinView::clearSelection()
 {
-    QItemSelectionModel* selModel = m_viewAccessor.itemView()->selectionModel();
-    const QModelIndex currentIndex = selModel->currentIndex();
-    selModel->setCurrentIndex(currentIndex, QItemSelectionModel::Current |
-                                            QItemSelectionModel::Clear);
-    m_selectedItems.clear();
+    m_viewAccessor.itemView()->clearSelection();
 }
 
 void DolphinView::changeSelection(const KFileItemList& selection)
@@ -1143,12 +1147,6 @@ void DolphinView::selectAndScrollToCreatedItem()
     m_createdItemUrl = KUrl();
 }
 
-void DolphinView::restoreSelection()
-{
-    disconnect(m_viewAccessor.dirLister(), SIGNAL(completed()), this, SLOT(restoreSelection()));
-    changeSelection(m_selectedItems);
-}
-
 void DolphinView::emitContentsMoved()
 {
     // TODO: If DolphinViewContainer uses DolphinView::saveState(...) to save the
@@ -1234,6 +1232,11 @@ void DolphinView::slotLoadingCompleted()
         }
     }
 
+    if (!m_selectedItems.isEmpty()) {
+        changeSelection(m_selectedItems);
+        m_selectedItems.clear();
+    }
+
     // Restore the contents position. This has to be done using a Qt::QueuedConnection
     // because the view might not be in its final state yet.
     QMetaObject::invokeMethod(this, "restoreContentsPosition", Qt::QueuedConnection);
@@ -1262,11 +1265,6 @@ void DolphinView::loadDirectory(const KUrl& url, bool reload)
     m_loadingDirectory = true;
     m_expanderActive = false;
 
-    if (reload) {
-        m_selectedItems = selectedItems();
-        connect(m_viewAccessor.dirLister(), SIGNAL(completed()), this, SLOT(restoreSelection()));
-    }
-
     m_viewAccessor.dirLister()->openUrl(url, reload ? KDirLister::Reload : KDirLister::NoFlags);
 }
 
index 97054b7542c8f6fbde3965125d37d0dc078ec88b..770391610fcf92c277d76481c7a022e2488ce7c8 100644 (file)
@@ -714,11 +714,6 @@ private slots:
      */
     void selectAndScrollToCreatedItem();
 
-    /**
-     * Restore selection after view refresh.
-     */
-    void restoreSelection();
-
     /**
      * Called when a redirection happens.
      * Testcase: fish://localhost