]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Make --select can automatically scroll to the selected file.
authorWeng Xuetian <wengxt@gmail.com>
Mon, 27 Aug 2012 17:55:17 +0000 (13:55 -0400)
committerWeng Xuetian <wengxt@gmail.com>
Mon, 27 Aug 2012 18:01:10 +0000 (14:01 -0400)
REVIEW: 106209

src/dolphinpart.cpp
src/views/dolphinview.cpp
src/views/dolphinview.h

index d1626e55d5da1c648208f83d668fb75753958dc9..fff7dc0e08b7e74f7039dd698527abc017cb7a9b 100644 (file)
@@ -554,7 +554,12 @@ void DolphinPart::createDirectory()
 
 void DolphinPart::setFilesToSelect(const KUrl::List& files)
 {
+    if (files.isEmpty()) {
+        return;
+    }
+
     m_view->markUrlsAsSelected(files);
+    m_view->markUrlAsCurrent(files.at(0));
 }
 
 ////
index 7cfb3fc41d258ef5af451c15eec26f8cb990b205..f2b0a5c8c39173d2120b0329b168828f7564984e 100644 (file)
@@ -98,8 +98,8 @@ DolphinView::DolphinView(const KUrl& url, QWidget* parent) :
     m_toolTipManager(0),
     m_selectionChangedTimer(0),
     m_currentItemUrl(),
+    m_scrollToCurrentItem(false),
     m_restoredContentsPosition(),
-    m_createdItemUrl(),
     m_selectedUrls(),
     m_versionControlObserver(0)
 {
@@ -363,6 +363,7 @@ void DolphinView::markUrlsAsSelected(const QList<KUrl>& urls)
 void DolphinView::markUrlAsCurrent(const KUrl& url)
 {
     m_currentItemUrl = url;
+    m_scrollToCurrentItem = true;
 }
 
 void DolphinView::selectItems(const QRegExp& pattern, bool enabled)
@@ -1142,25 +1143,8 @@ QString DolphinView::viewPropertiesContext() const
 
 void DolphinView::observeCreatedItem(const KUrl& url)
 {
-    m_createdItemUrl = url;
-    connect(m_model, SIGNAL(directoryLoadingCompleted()),
-            this, SLOT(selectAndScrollToCreatedItem()));
-}
-
-void DolphinView::selectAndScrollToCreatedItem()
-{
-    KItemListSelectionManager* selectionManager = m_container->controller()->selectionManager();
-    const int index = m_model->index(m_createdItemUrl);
-    if (index != -1) {
-        selectionManager->setCurrentItem(index);
-        selectionManager->clearSelection();
-        selectionManager->setSelected(index);
-        m_view->scrollToItem(index);
-    }
-
-    disconnect(m_model, SIGNAL(directoryLoadingCompleted()),
-               this, SLOT(selectAndScrollToCreatedItem()));
-    m_createdItemUrl = KUrl();
+    markUrlAsCurrent(url);
+    markUrlsAsSelected(QList<KUrl>() << url);
 }
 
 void DolphinView::slotDirectoryRedirection(const KUrl& oldUrl, const KUrl& newUrl)
@@ -1178,6 +1162,12 @@ void DolphinView::updateViewState()
         const int currentIndex = m_model->index(m_currentItemUrl);
         if (currentIndex != -1) {
             selectionManager->setCurrentItem(currentIndex);
+
+            // scroll to current item and reset the state
+            if (m_scrollToCurrentItem) {
+                m_view->scrollToItem(currentIndex);
+                m_scrollToCurrentItem = false;
+            }
         } else {
             selectionManager->setCurrentItem(0);
         }
index 1ad4d6c8229896389fb71a6199e997db1ae2f5af..10f63c57afdc64cd1903fdeff74c3ff634286067 100644 (file)
@@ -181,8 +181,8 @@ public:
     void markUrlsAsSelected(const QList<KUrl>& urls);
 
     /**
-     * Marks the item indicated by \p url as the current item after the
-     * directory DolphinView::url() has been loaded.
+     * Marks the item indicated by \p url to be scrolled to and as the
+     * current item after directory DolphinView::url() has been loaded.
      */
     void markUrlAsCurrent(const KUrl& url);
 
@@ -640,17 +640,9 @@ private slots:
      * Observes the item with the URL \a url. As soon as the directory
      * model indicates that the item is available, the item will
      * get selected and it is assured that the item stays visible.
-     *
-     * @see selectAndScrollToCreatedItem()
      */
     void observeCreatedItem(const KUrl& url);
 
-    /**
-     * Selects and scrolls to the item that got observed
-     * by observeCreatedItem().
-     */
-    void selectAndScrollToCreatedItem();
-
     /**
      * Called when a redirection happens.
      * Testcase: fish://localhost
@@ -754,8 +746,8 @@ private:
     QTimer* m_selectionChangedTimer;
 
     KUrl m_currentItemUrl; // Used for making the view to remember the current URL after F5
+    bool m_scrollToCurrentItem; // Used for marking we need to scroll to current item or not
     QPoint m_restoredContentsPosition;
-    KUrl m_createdItemUrl; // URL for a new item that got created by the "Create New..." menu
 
     QList<KUrl> m_selectedUrls; // Used for making the view to remember selections after F5