]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Fix place item edit after creation
authorRenato Araujo Oliveira Filho <renato.araujo@kdab.com>
Fri, 19 Jan 2018 16:37:09 +0000 (13:37 -0300)
committerRenato Araujo Oliveira Filho <renato.araujo@kdab.com>
Fri, 26 Jan 2018 14:14:30 +0000 (11:14 -0300)
Summary:
Make sure that the place can be edited after the creation.

Depends on D9333

BUG: 389147

Test Plan:
Create an item in dolphin places panel, make sure that you
can rename it

Reviewers: #dolphin, ngraham

Reviewed By: ngraham

Subscribers: michaelh, elvisangelaccio, lbeltrame, ngraham, #dolphin

Differential Revision: https://phabricator.kde.org/D9985

src/panels/places/placesitem.cpp
src/panels/places/placesitemmodel.cpp
src/tests/placesitemmodeltest.cpp

index d7e87cf7a9e41944f2992fef09cbc966997c9b62..3c6023ba80797ecd24a5b4318dacab03c3a545e1 100644 (file)
@@ -129,12 +129,15 @@ Solid::Device PlacesItem::device() const
 
 void PlacesItem::setBookmark(const KBookmark& bookmark)
 {
-    if (bookmark == m_bookmark) {
-        return;
-    }
+    const bool bookmarkDataChanged = !(bookmark == m_bookmark);
 
+    // bookmark object must be updated to keep in sync with source model
     m_bookmark = bookmark;
 
+    if (!bookmarkDataChanged) {
+        return;
+    }
+
     delete m_access;
     delete m_volume;
     delete m_disc;
index bee3b7cbe662fcc3c0bc7ab44aa6cd656ea8f28b..077c9044c24930e3c2b37224a2569dc089065175 100644 (file)
@@ -410,7 +410,10 @@ void PlacesItemModel::addItemFromSourceModel(const QModelIndex &index)
 
     const KBookmark bookmark = m_sourceModel->bookmarkForIndex(index);
     Q_ASSERT(!bookmark.isNull());
-    PlacesItem *item = new PlacesItem(bookmark);
+    PlacesItem *item = itemFromBookmark(bookmark);
+    if (!item) {
+        item = new PlacesItem(bookmark);
+    }
     updateItem(item, index);
     insertSortedItem(item);
 
@@ -602,6 +605,8 @@ void PlacesItemModel::onSourceModelDataChanged(const QModelIndex &topLeft, const
             placeItem->setUrl(m_sourceModel->url(sourceIndex));
             placeItem->bookmark().setMetaDataItem(QStringLiteral("OnlyInApp"),
                                                   bookmark.metaDataItem(QStringLiteral("OnlyInApp")));
+            // must update the bookmark object
+            placeItem->setBookmark(bookmark);
         }
     }
 }
@@ -641,7 +646,6 @@ void PlacesItemModel::loadBookmarks()
 {
     for(int r = 0, rMax = m_sourceModel->rowCount(); r < rMax; r++) {
         const QModelIndex sourceIndex = m_sourceModel->index(r, 0);
-        KBookmark bookmark = m_sourceModel->bookmarkForIndex(sourceIndex);
         if (m_hiddenItemsShown || !m_sourceModel->isHidden(sourceIndex)) {
             addItemFromSourceModel(sourceIndex);
         }
index 8fb01676abc6364208a81adf8b408ca702c53179..a74b3ea6cbdf0a58019a9ddb650fe53d80733f17 100644 (file)
@@ -84,6 +84,7 @@ private slots:
     void testDragAndDrop();
     void testHideDevices();
     void testDuplicatedEntries();
+    void renameAfterCreation();
 
 private:
     PlacesItemModel* m_model;
@@ -808,6 +809,42 @@ void PlacesItemModelTest::testDuplicatedEntries()
     delete newModel;
 }
 
+void PlacesItemModelTest::renameAfterCreation()
+{
+    const QUrl tempUrl = QUrl::fromLocalFile(QStandardPaths::writableLocation(QStandardPaths::TempLocation));
+    QStringList urls = initialUrls();
+    PlacesItemModel *model = new PlacesItemModel();
+
+    CHECK_PLACES_URLS(urls);
+    QTRY_COMPARE(model->count(), m_model->count());
+
+    // create a new place
+    createPlaceItem(QStringLiteral("Temporary Dir"), tempUrl, QString());
+    urls.insert(3, tempUrl.toLocalFile());
+
+    // make sure that the new item will be removed later
+    removePlaceAfter(3);
+
+    CHECK_PLACES_URLS(urls);
+    QCOMPARE(model->count(), m_model->count());
+
+
+    // modify place text
+    QSignalSpy changedSpy(m_model, &PlacesItemModel::itemsChanged);
+
+    PlacesItem *item = m_model->placesItem(3);
+    item->setText(QStringLiteral("New Temporary Dir"));
+    item->setUrl(item->url());
+    item->setIcon(item->icon());
+    m_model->refresh();
+
+    QTRY_COMPARE(changedSpy.count(), 1);
+
+    // check if the place was modified in both models
+    QTRY_COMPARE(m_model->placesItem(3)->text(), QStringLiteral("New Temporary Dir"));
+    QTRY_COMPARE(model->placesItem(3)->text(), QStringLiteral("New Temporary Dir"));
+}
+
 QTEST_MAIN(PlacesItemModelTest)
 
 #include "placesitemmodeltest.moc"