X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/ab39a5952001cdb3d1b9ca693da7f8e246558fb8..233a08164f79d9909693c5de438f856467ad5b76:/src/dolphinview.cpp diff --git a/src/dolphinview.cpp b/src/dolphinview.cpp index e057c950a..54294161d 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() @@ -569,13 +577,7 @@ void DolphinView::setUrl(const KUrl& url) void DolphinView::selectAll() { - QAbstractItemView* view = m_viewAccessor.itemView(); - // TODO: there seems to be a bug in QAbstractItemView::selectAll(); if - // the Ctrl-key is pressed (e. g. for Ctrl+A), selectAll() inverts the - // selection instead of selecting all items. This is bypassed for KDE 4.0 - // by invoking clearSelection() first. - view->clearSelection(); - view->selectAll(); + m_viewAccessor.itemView()->selectAll(); } void DolphinView::invertSelection() @@ -593,11 +595,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 +1141,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 +1226,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 +1259,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); }