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
This commit is contained in:
Frank Reininghaus 2009-11-30 08:15:22 +00:00
parent bd47f7f978
commit 56a81a196f
2 changed files with 14 additions and 21 deletions

View 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);
}

View file

@ -714,11 +714,6 @@ private slots:
*/
void selectAndScrollToCreatedItem();
/**
* Restore selection after view refresh.
*/
void restoreSelection();
/**
* Called when a redirection happens.
* Testcase: fish://localhost