]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphinview.cpp
Move the code for restoring the current item from DolphinViewContainer to DolphinView...
[dolphin.git] / src / dolphinview.cpp
index 5a0f00beecd7b11ddc9449205f633e6701fa3b09..ae6ea5ec7bbfcaf3b9de5a19b6d86f389f7dba90 100644 (file)
@@ -84,9 +84,10 @@ DolphinView::DolphinView(QWidget* parent,
     m_dirLister(dirLister),
     m_proxyModel(proxyModel),
     m_iconManager(0),
-    m_toolTipManager(0)
+    m_toolTipManager(0),
+    m_rootUrl(),
+    m_currentItemUrl()
 {
-    setFocusPolicy(Qt::StrongFocus);
     m_topLayout = new QVBoxLayout(this);
     m_topLayout->setSpacing(0);
     m_topLayout->setMargin(0);
@@ -124,6 +125,9 @@ DolphinView::DolphinView(QWidget* parent,
     connect(m_controller, SIGNAL(viewportEntered()),
             this, SLOT(clearHoverInformation()));
 
+    connect(m_dirLister, SIGNAL(completed()),
+            this, SLOT(restoreCurrentItem()));
+
     applyViewProperties(url);
     m_topLayout->addWidget(itemView());
 }
@@ -480,6 +484,8 @@ void DolphinView::calculateItemCount(int& fileCount, int& folderCount)
 
 void DolphinView::setUrl(const KUrl& url)
 {
+    // remember current item candidate (see restoreCurrentItem())
+    m_currentItemUrl = url;
     updateView(url, KUrl());
 }
 
@@ -749,7 +755,7 @@ void DolphinView::triggerItem(const KFileItem& item)
         return;
     }
 
-    // TODO: the m_isContextMenuOpen check is a workaround for Qt-issue xxxxxx
+    // TODO: the m_isContextMenuOpen check is a workaround for Qt-issue 207192
     if (item.isNull() || m_isContextMenuOpen) {
         return;
     }
@@ -778,7 +784,7 @@ void DolphinView::openContextMenu(const QPoint& pos)
         m_toolTipManager->hideTip();
     }
 
-    m_isContextMenuOpen = true; // TODO: workaround for Qt-issue xxxxxx
+    m_isContextMenuOpen = true; // TODO: workaround for Qt-issue 207192
     emit requestContextMenu(item, url());
     m_isContextMenuOpen = false;
 }
@@ -956,6 +962,21 @@ void DolphinView::slotDeleteFileFinished(KJob* job)
     }
 }
 
+
+void DolphinView::restoreCurrentItem()
+{
+    const QModelIndex dirIndex = m_dolphinModel->indexForUrl(m_currentItemUrl);
+    if (dirIndex.isValid()) {
+        const QModelIndex proxyIndex = m_proxyModel->mapFromSource(dirIndex);
+        QAbstractItemView* view = itemView();
+        const bool clearSelection = !hasSelection();
+        view->setCurrentIndex(proxyIndex);
+        if (clearSelection) {
+            view->clearSelection();
+        }
+    }
+}
+
 void DolphinView::loadDirectory(const KUrl& url, bool reload)
 {
     if (!url.isValid()) {