diff --git a/0001-sync-bookmarkmanager-only-if-change-was-by-process.patch b/0001-sync-bookmarkmanager-only-if-change-was-by-process.patch new file mode 100644 index 0000000..6a80e31 --- /dev/null +++ b/0001-sync-bookmarkmanager-only-if-change-was-by-process.patch @@ -0,0 +1,122 @@ +From e7e0f2d8f06e4086a1872757d779e19a06537b2a Mon Sep 17 00:00:00 2001 +From: Marco Martin +Date: Mon, 9 Feb 2015 18:18:33 +0100 +Subject: [PATCH 1/1] sync bookmarkmanager only if change was by process + +This is an attempt to fix a bug that seems quite difficult to reproduce, +It seems there is a weird race condition linked to the sync of the two files +.local/share/user-places.xbel +.local/share/kfileplaces/bookmarks.xml +causing the bug +https://bugs.kde.org/show_bug.cgi?id=343735 +all processes that are listening for changes in the bookmark manager will +try to sync their bookmarks with the shared ones (user-places.xbel) +and depending what process arrives first, some bookmarks may be lost + +The same commit will happen on kdelibs4 as well + +CCBUG:343735 +REVIEW:122459 +--- + src/filewidgets/kfileplacesmodel.cpp | 9 +++++++++ + src/filewidgets/kfileplacessharedbookmarks.cpp | 7 +------ + src/filewidgets/kfileplacessharedbookmarks_p.h | 3 ++- + 3 files changed, 12 insertions(+), 7 deletions(-) + +diff --git a/src/filewidgets/kfileplacesmodel.cpp b/src/filewidgets/kfileplacesmodel.cpp +index d8da868098ca8dd46129aa718e4dc75ebf871192..6c9201223c7576866de5f2e7ff91069e1e68bebe 100644 +--- a/src/filewidgets/kfileplacesmodel.cpp ++++ b/src/filewidgets/kfileplacesmodel.cpp +@@ -656,6 +656,8 @@ bool KFilePlacesModel::dropMimeData(const QMimeData *data, Qt::DropAction action + return false; + } + ++ d->sharedBookmarks->updateSharedBookmarks(); ++ + d->reloadAndSignal(); + + return true; +@@ -683,6 +685,8 @@ void KFilePlacesModel::addPlace(const QString &text, const QUrl &url, + d->bookmarkManager->root().moveBookmark(bookmark, item->bookmark()); + } + ++ d->sharedBookmarks->updateSharedBookmarks(); ++ + d->reloadAndSignal(); + } + +@@ -710,6 +714,8 @@ void KFilePlacesModel::editPlace(const QModelIndex &index, const QString &text, + bookmark.setIcon(iconName); + bookmark.setMetaDataItem("OnlyInApp", appName); + ++ d->sharedBookmarks->updateSharedBookmarks(); ++ + d->reloadAndSignal(); + emit dataChanged(index, index); + } +@@ -733,6 +739,7 @@ void KFilePlacesModel::removePlace(const QModelIndex &index) const + } + + d->bookmarkManager->root().deleteBookmark(bookmark); ++ d->sharedBookmarks->updateSharedBookmarks(); + d->reloadAndSignal(); + } + +@@ -752,6 +759,8 @@ void KFilePlacesModel::setPlaceHidden(const QModelIndex &index, bool hidden) + + bookmark.setMetaDataItem("IsHidden", (hidden ? "true" : "false")); + ++ d->sharedBookmarks->updateSharedBookmarks(); ++ + d->reloadAndSignal(); + emit dataChanged(index, index); + } +diff --git a/src/filewidgets/kfileplacessharedbookmarks.cpp b/src/filewidgets/kfileplacessharedbookmarks.cpp +index fbd6b5363f8229e113a6c9d49715e6ee210ab9fd..3e7ffb9348ae5996ac2ae46ddc1ef27418400152 100644 +--- a/src/filewidgets/kfileplacessharedbookmarks.cpp ++++ b/src/filewidgets/kfileplacessharedbookmarks.cpp +@@ -127,11 +127,6 @@ KFilePlacesSharedBookmarks::KFilePlacesSharedBookmarks(KBookmarkManager *mgr) + connect(m_sharedBookmarkManager, SIGNAL(bookmarksChanged(QString)), + this, SLOT(slotSharedBookmarksChanged())); + +- connect(m_placesBookmarkManager, SIGNAL(changed(QString,QString)), +- this, SLOT(slotBookmarksChanged())); +- connect(m_placesBookmarkManager, SIGNAL(bookmarksChanged(QString)), +- this, SLOT(slotBookmarksChanged())); +- + integrateSharedBookmarks(); + } + +@@ -278,7 +273,7 @@ void KFilePlacesSharedBookmarks::slotSharedBookmarksChanged() + } + } + +-void KFilePlacesSharedBookmarks::slotBookmarksChanged() ++void KFilePlacesSharedBookmarks::updateSharedBookmarks() + { + //qDebug() << "places bookmarks changed"; + bool dirty = exportSharedBookmarks(); +diff --git a/src/filewidgets/kfileplacessharedbookmarks_p.h b/src/filewidgets/kfileplacessharedbookmarks_p.h +index 4c9f6a4da4ff42dc16dd148fc29c8a93b27e6a48..2f9f4b8a84bcfbb85c701adc2c2ad4f453663609 100644 +--- a/src/filewidgets/kfileplacessharedbookmarks_p.h ++++ b/src/filewidgets/kfileplacessharedbookmarks_p.h +@@ -38,6 +38,8 @@ public: + /* delete m_sharedBookmarkManager; */ + } + ++ void updateSharedBookmarks(); ++ + private: + + bool integrateSharedBookmarks(); +@@ -49,7 +51,6 @@ private: + private Q_SLOTS: + + void slotSharedBookmarksChanged(); +- void slotBookmarksChanged(); + + }; + +-- +2.2.2 + diff --git a/kio.changes b/kio.changes index 4039667..54fe41d 100644 --- a/kio.changes +++ b/kio.changes @@ -25,6 +25,8 @@ Sun Feb 8 18:15:28 UTC 2015 - hrvoje.senjan@gmail.com warnings when using KFilePlacesModel * For more details please see: https://www.kde.org/announcements/kde-frameworks-5.7.0.php +- Added 0001-sync-bookmarkmanager-only-if-change-was-by-process.patch, + kde#343735 ------------------------------------------------------------------- Sat Jan 3 18:03:27 UTC 2015 - hrvoje.senjan@gmail.com diff --git a/kio.spec b/kio.spec index 77432b7..d99e7e9 100644 --- a/kio.spec +++ b/kio.spec @@ -69,6 +69,8 @@ Group: System/GUI/KDE Url: http://www.kde.org Source: http://download.kde.org/stable/frameworks/5.6/%{name}-%{version}.tar.xz Source1: baselibs.conf +# PATCH-FIX-UPSTREAM 0001-sync-bookmarkmanager-only-if-change-was-by-process.patch +Patch0: 0001-sync-bookmarkmanager-only-if-change-was-by-process.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build %description @@ -98,6 +100,7 @@ Development files. %lang_package %prep %setup -q +%patch0 -p1 %build %cmake_kf5 -d build