summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRenato Araujo Oliveira Filho <[email protected]>2018-01-19 13:37:09 -0300
committerRenato Araujo Oliveira Filho <[email protected]>2018-01-26 11:14:30 -0300
commita8a3fa51a0649ffc43b0d740c268e39a6dd6672b (patch)
treef89bb52f464dd19733cc546e18a4551c9eb9fa1d
parent3bf68fd71492f02bffb6cf040e9471c5e997180e (diff)
Fix place item edit after creation
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
-rw-r--r--src/panels/places/placesitem.cpp9
-rw-r--r--src/panels/places/placesitemmodel.cpp8
-rw-r--r--src/tests/placesitemmodeltest.cpp37
3 files changed, 49 insertions, 5 deletions
diff --git a/src/panels/places/placesitem.cpp b/src/panels/places/placesitem.cpp
index d7e87cf..3c6023b 100644
--- a/src/panels/places/placesitem.cpp
+++ b/src/panels/places/placesitem.cpp
@@ -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;
diff --git a/src/panels/places/placesitemmodel.cpp b/src/panels/places/placesitemmodel.cpp
index bee3b7c..077c904 100644
--- a/src/panels/places/placesitemmodel.cpp
+++ b/src/panels/places/placesitemmodel.cpp
@@ -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);
}
diff --git a/src/tests/placesitemmodeltest.cpp b/src/tests/placesitemmodeltest.cpp
index 8fb0167..a74b3ea 100644
--- a/src/tests/placesitemmodeltest.cpp
+++ b/src/tests/placesitemmodeltest.cpp
@@ -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"