From: Frank Reininghaus Date: Mon, 30 Nov 2009 08:15:22 +0000 (+0000) Subject: When the view is reloaded in Dolphin or the DolphinPart inside X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/56a81a196f9db867bc69f23fe46c239045f784ca?ds=sidebyside When the view is reloaded in Dolphin or the DolphinPart inside 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 --- diff --git a/src/dolphinview.cpp b/src/dolphinview.cpp index e057c950a..fe4296409 100644 --- a/src/dolphinview.cpp +++ b/src/dolphinview.cpp @@ -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); } diff --git a/src/dolphinview.h b/src/dolphinview.h index 97054b754..770391610 100644 --- a/src/dolphinview.h +++ b/src/dolphinview.h @@ -714,11 +714,6 @@ private slots: */ void selectAndScrollToCreatedItem(); - /** - * Restore selection after view refresh. - */ - void restoreSelection(); - /** * Called when a redirection happens. * Testcase: fish://localhost