]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Merge branch 'release/20.12'
authorFelix Ernst <fe.a.ernst@gmail.com>
Mon, 23 Nov 2020 12:38:22 +0000 (13:38 +0100)
committerFelix Ernst <fe.a.ernst@gmail.com>
Mon, 23 Nov 2020 12:38:22 +0000 (13:38 +0100)
src/dolphinviewcontainer.cpp
src/panels/places/placespanel.cpp
src/panels/places/placespanel.h
src/tests/placesitemmodeltest.cpp

index 0fe8ee9d3de0790ca3ebfb0e0c6ec65d2691b9b3..4b11fc3d1115a73e96dc6b79f58a32c206559a60 100644 (file)
@@ -118,6 +118,10 @@ DolphinViewContainer::DolphinViewContainer(const QUrl& url, QWidget* parent) :
             m_urlNavigator.get(), &DolphinUrlNavigator::setLocationUrl);
     connect(m_urlNavigator.get(), &DolphinUrlNavigator::urlChanged,
             this, &DolphinViewContainer::slotUrlNavigatorLocationChanged);
+    connect(m_urlNavigator.get(), &DolphinUrlNavigator::urlAboutToBeChanged,
+            this, &DolphinViewContainer::slotUrlNavigatorLocationAboutToBeChanged);
+    connect(m_urlNavigator.get(), &DolphinUrlNavigator::urlSelectionRequested,
+            this, &DolphinViewContainer::slotUrlSelectionRequested);
     connect(m_view, &DolphinView::writeStateChanged,
             this, &DolphinViewContainer::writeStateChanged);
     connect(m_view, &DolphinView::requestItemInfo,
@@ -297,20 +301,18 @@ void DolphinViewContainer::connectUrlNavigator(DolphinUrlNavigator *urlNavigator
     }
     urlNavigator->setActive(isActive());
 
-    connect(m_view, &DolphinView::urlChanged,
-            urlNavigator, &DolphinUrlNavigator::setLocationUrl);
+    // Url changes are still done via m_urlNavigator.
     connect(urlNavigator, &DolphinUrlNavigator::urlChanged,
-            this, &DolphinViewContainer::slotUrlNavigatorLocationChanged);
-    connect(urlNavigator, &DolphinUrlNavigator::activated,
-            this, &DolphinViewContainer::activate);
-    connect(urlNavigator, &DolphinUrlNavigator::urlAboutToBeChanged,
-            this, &DolphinViewContainer::slotUrlNavigatorLocationAboutToBeChanged);
-    connect(urlNavigator, &DolphinUrlNavigator::urlSelectionRequested,
-            this, &DolphinViewContainer::slotUrlSelectionRequested);
+            m_urlNavigator.get(), &DolphinUrlNavigator::setLocationUrl);
     connect(urlNavigator, &DolphinUrlNavigator::urlsDropped,
             this, [=](const QUrl &destination, QDropEvent *event) {
         m_view->dropUrls(destination, event, urlNavigator->dropWidget());
     });
+    // Aside from these, only visual things need to be connected.
+    connect(m_view, &DolphinView::urlChanged,
+            urlNavigator, &DolphinUrlNavigator::setLocationUrl);
+    connect(urlNavigator, &DolphinUrlNavigator::activated,
+            this, &DolphinViewContainer::activate);
 
     m_urlNavigatorConnected = urlNavigator;
 }
@@ -321,18 +323,14 @@ void DolphinViewContainer::disconnectUrlNavigator()
         return;
     }
 
+    disconnect(m_urlNavigatorConnected, &DolphinUrlNavigator::urlChanged,
+               m_urlNavigator.get(), &DolphinUrlNavigator::setLocationUrl);
+    disconnect(m_urlNavigatorConnected, &DolphinUrlNavigator::urlsDropped,
+               this, nullptr);
     disconnect(m_view, &DolphinView::urlChanged,
                m_urlNavigatorConnected, &DolphinUrlNavigator::setLocationUrl);
-    disconnect(m_urlNavigatorConnected, &DolphinUrlNavigator::urlChanged,
-               this, &DolphinViewContainer::slotUrlNavigatorLocationChanged);
     disconnect(m_urlNavigatorConnected, &DolphinUrlNavigator::activated,
                this, &DolphinViewContainer::activate);
-    disconnect(m_urlNavigatorConnected, &DolphinUrlNavigator::urlAboutToBeChanged,
-               this, &DolphinViewContainer::slotUrlNavigatorLocationAboutToBeChanged);
-    disconnect(m_urlNavigatorConnected, &DolphinUrlNavigator::urlSelectionRequested,
-               this, &DolphinViewContainer::slotUrlSelectionRequested);
-    disconnect(m_urlNavigatorConnected, &DolphinUrlNavigator::urlsDropped,
-               this, nullptr);
 
     m_urlNavigatorVisualState = m_urlNavigatorConnected->visualState();
     m_urlNavigatorConnected = nullptr;
index ef174946b216d28565a8a6a3dc3e11a25ff8c771..4d50fe5f8021eb44540ed07b23e46a914ee4977d 100644 (file)
@@ -77,7 +77,7 @@ bool PlacesPanel::urlChanged()
     }
 
     if (m_controller) {
-        selectClosestItem();
+        selectItem();
     }
 
     return true;
@@ -139,7 +139,7 @@ void PlacesPanel::showEvent(QShowEvent* event)
         layout->setContentsMargins(0, 0, 0, 0);
         layout->addWidget(container);
 
-        selectClosestItem();
+        selectItem();
     }
 
     Panel::showEvent(event);
@@ -293,7 +293,7 @@ void PlacesPanel::slotItemContextMenuRequested(int index, const QPointF& pos)
         }
     }
 
-    selectClosestItem();
+    selectItem();
 }
 
 void PlacesPanel::slotViewContextMenuRequested(const QPointF& pos)
@@ -361,7 +361,7 @@ void PlacesPanel::slotViewContextMenuRequested(const QPointF& pos)
         }
     }
 
-    selectClosestItem();
+    selectItem();
 }
 
 QAction *PlacesPanel::buildGroupContextMenu(QMenu *menu, int index)
@@ -529,13 +529,17 @@ void PlacesPanel::editEntry(int index)
     delete dialog;
 }
 
-void PlacesPanel::selectClosestItem()
+void PlacesPanel::selectItem()
 {
     const int index = m_model->closestItem(url());
     KItemListSelectionManager* selectionManager = m_controller->selectionManager();
     selectionManager->setCurrentItem(index);
     selectionManager->clearSelection();
-    selectionManager->setSelected(index);
+
+    const QUrl closestUrl = m_model->url(index);
+    if (!closestUrl.path().isEmpty() && url() == closestUrl) {
+        selectionManager->setSelected(index);
+    }
 }
 
 void PlacesPanel::triggerItem(int index, Qt::MouseButton button)
index fe4f46ba6c449a4eb9f33c62e3def09ccf107fef..67b484c652bdef2db5c3d7bc325e515602c51b04 100644 (file)
@@ -68,10 +68,10 @@ private:
     void editEntry(int index);
 
     /**
-     * Selects the item that has the closest URL for the URL set
+     * Selects the item that matches the URL set
      * for the panel (see Panel::setUrl()).
      */
-    void selectClosestItem();
+    void selectItem();
 
     void triggerItem(int index, Qt::MouseButton button);
 
index bac89bc612988ca65b48046dbd7d9e31eba42ac0..0a6ccf27ddf5fbf158a357dd8eaaa48d0104aba7 100644 (file)
@@ -71,6 +71,9 @@ private:
     bool m_hasDesktopFolder = false;
     bool m_hasDocumentsFolder = false;
     bool m_hasDownloadsFolder = false;
+    bool m_hasMusicFolder = false;
+    bool m_hasPicturesFolder = false;
+    bool m_hasVideosFolder = false;
 
     void setBalooEnabled(bool enabled);
     int indexOf(const QUrl &url);
@@ -82,6 +85,7 @@ private:
     void schedulePlaceRemoval(int index);
     void cancelPlaceRemoval(int index);
     QMimeData *createMimeData(const QList<int> &indexes) const;
+    void increaseIndexIfNeeded(int &index) const;
     QTemporaryDir m_tempHomeDir;
 };
 
@@ -161,6 +165,18 @@ QStringList PlacesItemModelTest::initialUrls() const
             urls << QDir::homePath() + QStringLiteral("/Downloads");
         }
 
+        if (m_hasMusicFolder) {
+            urls << QDir::homePath() + QStringLiteral("/Music");
+        }
+
+        if (m_hasPicturesFolder) {
+            urls << QDir::homePath() + QStringLiteral("/Pictures");
+        }
+
+        if (m_hasVideosFolder) {
+            urls << QDir::homePath() + QStringLiteral("/Videos");
+        }
+
         urls << QStringLiteral("trash:/")
              << QStringLiteral("remote:/")
              << QStringLiteral("/media/nfs");
@@ -215,6 +231,28 @@ QMimeData *PlacesItemModelTest::createMimeData(const QList<int> &indexes) const
     return mimeData;
 }
 
+void PlacesItemModelTest::increaseIndexIfNeeded(int &index) const
+{
+    if (m_hasDesktopFolder) {
+        index++;
+    }
+    if (m_hasDocumentsFolder) {
+        index++;
+    }
+    if (m_hasDownloadsFolder) {
+        index++;
+    }
+    if (m_hasMusicFolder) {
+        index++;
+    }
+    if (m_hasPicturesFolder) {
+        index++;
+    }
+    if (m_hasVideosFolder) {
+        index++;
+    }
+}
+
 void PlacesItemModelTest::init()
 {
     m_model = new PlacesItemModel();
@@ -270,6 +308,21 @@ void PlacesItemModelTest::initTestCase()
         m_expectedModelCount++;
     }
 
+    if (QDir(QStandardPaths::writableLocation(QStandardPaths::MusicLocation)).exists()) {
+        m_hasMusicFolder = true;
+        m_expectedModelCount++;
+    }
+
+    if (QDir(QStandardPaths::writableLocation(QStandardPaths::PicturesLocation)).exists()) {
+        m_hasPicturesFolder = true;
+        m_expectedModelCount++;
+    }
+
+    if (QDir(QStandardPaths::writableLocation(QStandardPaths::MoviesLocation)).exists()) {
+        m_hasVideosFolder = true;
+        m_expectedModelCount++;
+    }
+
     qRegisterMetaType<KItemRangeList>();
     qRegisterMetaType<KItemRange>();
 }
@@ -289,15 +342,7 @@ void PlacesItemModelTest::testGroups()
 {
     const auto groups = m_model->groups();
     int expectedRemoteIndex = 2;
-    if (m_hasDesktopFolder) {
-        expectedRemoteIndex++;
-    }
-    if (m_hasDocumentsFolder) {
-        expectedRemoteIndex++;
-    }
-    if (m_hasDownloadsFolder) {
-        expectedRemoteIndex++;
-    }
+    increaseIndexIfNeeded(expectedRemoteIndex);
 
     QCOMPARE(groups.size(), 6);
 
@@ -366,15 +411,7 @@ void PlacesItemModelTest::testDeletePlace()
     PlacesItemModel *model = new PlacesItemModel();
 
     int tempDirIndex = 2;
-    if (m_hasDesktopFolder) {
-        tempDirIndex++;
-    }
-    if (m_hasDocumentsFolder) {
-        tempDirIndex++;
-    }
-    if (m_hasDownloadsFolder) {
-        tempDirIndex++;
-    }
+    increaseIndexIfNeeded(tempDirIndex);
 
     // create a new place
     createPlaceItem(QStringLiteral("Temporary Dir"), tempUrl, QString());
@@ -539,15 +576,7 @@ void PlacesItemModelTest::testHideItem()
 void PlacesItemModelTest::testSystemItems()
 {
     int tempDirIndex = 2;
-    if (m_hasDesktopFolder) {
-        tempDirIndex++;
-    }
-    if (m_hasDocumentsFolder) {
-        tempDirIndex++;
-    }
-    if (m_hasDownloadsFolder) {
-        tempDirIndex++;
-    }
+    increaseIndexIfNeeded(tempDirIndex);
 
     QCOMPARE(m_model->count(), m_expectedModelCount);
     for (int r = 0; r < m_model->count(); r++) {
@@ -590,15 +619,7 @@ void PlacesItemModelTest::testSystemItems()
 void PlacesItemModelTest::testEditBookmark()
 {
     int tempDirIndex = 2;
-    if (m_hasDesktopFolder) {
-        tempDirIndex++;
-    }
-    if (m_hasDocumentsFolder) {
-        tempDirIndex++;
-    }
-    if (m_hasDownloadsFolder) {
-        tempDirIndex++;
-    }
+    increaseIndexIfNeeded(tempDirIndex);
 
     QScopedPointer<PlacesItemModel> other(new PlacesItemModel());
 
@@ -631,15 +652,7 @@ void PlacesItemModelTest::testEditBookmark()
 void PlacesItemModelTest::testEditAfterCreation()
 {
     int tempDirIndex = 2;
-    if (m_hasDesktopFolder) {
-        tempDirIndex++;
-    }
-    if (m_hasDocumentsFolder) {
-        tempDirIndex++;
-    }
-    if (m_hasDownloadsFolder) {
-        tempDirIndex++;
-    }
+    increaseIndexIfNeeded(tempDirIndex);
 
     const QUrl tempUrl = QUrl::fromLocalFile(QStandardPaths::writableLocation(QStandardPaths::TempLocation));
     QSignalSpy itemsInsertedSpy(m_model, &PlacesItemModel::itemsInserted);
@@ -671,15 +684,7 @@ void PlacesItemModelTest::testEditAfterCreation()
 void PlacesItemModelTest::testEditMetadata()
 {
     int tempDirIndex = 2;
-    if (m_hasDesktopFolder) {
-        tempDirIndex++;
-    }
-    if (m_hasDocumentsFolder) {
-        tempDirIndex++;
-    }
-    if (m_hasDownloadsFolder) {
-        tempDirIndex++;
-    }
+    increaseIndexIfNeeded(tempDirIndex);
 
     const QUrl tempUrl = QUrl::fromLocalFile(QStandardPaths::writableLocation(QStandardPaths::TempLocation));
     QSignalSpy itemsInsertedSpy(m_model, &PlacesItemModel::itemsInserted);
@@ -713,15 +718,7 @@ void PlacesItemModelTest::testEditMetadata()
 void PlacesItemModelTest::testRefresh()
 {
     int tempDirIndex = 2;
-    if (m_hasDesktopFolder) {
-        tempDirIndex++;
-    }
-    if (m_hasDocumentsFolder) {
-        tempDirIndex++;
-    }
-    if (m_hasDownloadsFolder) {
-        tempDirIndex++;
-    }
+    increaseIndexIfNeeded(tempDirIndex);
 
     const QUrl tempUrl = QUrl::fromLocalFile(QStandardPaths::writableLocation(QStandardPaths::TempLocation));
     QSignalSpy itemsInsertedSpy(m_model, &PlacesItemModel::itemsInserted);
@@ -784,15 +781,7 @@ void PlacesItemModelTest::testIcons()
 void PlacesItemModelTest::testDragAndDrop()
 {
     int lastIndex = 1; // last index of places group
-    if (m_hasDesktopFolder) {
-        lastIndex++;
-    }
-    if (m_hasDocumentsFolder) {
-        lastIndex++;
-    }
-    if (m_hasDownloadsFolder) {
-        lastIndex++;
-    }
+    increaseIndexIfNeeded(lastIndex);
 
     QList<QVariant> args;
     KItemRangeList range;
@@ -907,15 +896,7 @@ void PlacesItemModelTest::testDuplicatedEntries()
 void PlacesItemModelTest::renameAfterCreation()
 {
     int tempDirIndex = 2;
-    if (m_hasDesktopFolder) {
-        tempDirIndex++;
-    }
-    if (m_hasDocumentsFolder) {
-        tempDirIndex++;
-    }
-    if (m_hasDownloadsFolder) {
-        tempDirIndex++;
-    }
+    increaseIndexIfNeeded(tempDirIndex);
 
     const QUrl tempUrl = QUrl::fromLocalFile(QStandardPaths::writableLocation(QStandardPaths::TempLocation));
     QStringList urls = initialUrls();