diff --git a/dolphin/src/dolphincontextmenu.cpp b/dolphin/src/dolphincontextmenu.cpp
index bb26c7a..e706695 100644
--- a/dolphin/src/dolphincontextmenu.cpp
+++ b/dolphin/src/dolphincontextmenu.cpp
@@ -48,6 +48,7 @@
#include <KStandardAction>
#include <KStandardDirs>
#include <KToolBar>
+#include <KBookmarkManager>
#include <panels/places/placesitem.h>
#include <panels/places/placesitemmodel.h>
@@ -402,14 +403,17 @@ void DolphinContextMenu::addShowMenuBarAction()
bool DolphinContextMenu::placeExists(const KUrl& url) const
{
- PlacesItemModel model;
+ const QString file = KStandardDirs::locateLocal("data", "kfileplaces/bookmarks.xml");
+ KBookmarkManager* manager = KBookmarkManager::managerForFile(file, "kfilePlaces");
+ KBookmarkGroup group = manager->root();
- const int count = model.count();
- for (int i = 0; i < count; ++i) {
- const KUrl placeUrl = model.placesItem(i)->url();
- if (placeUrl.equals(url, KUrl::CompareWithoutTrailingSlash)) {
- return true;
- }
+ KBookmark bookmark = group.first();
+ while (!bookmark.isNull()) {
+ if (bookmark.url().equals(url, KUrl::CompareWithoutTrailingSlash)) {
+ return true;
+ }
+
+ bookmark = group.next(bookmark);
}
return false;
diff --git a/dolphin/src/panels/places/placesitemmodel.cpp b/dolphin/src/panels/places/placesitemmodel.cpp
index 1789f18..b352712 100644
--- a/dolphin/src/panels/places/placesitemmodel.cpp
+++ b/dolphin/src/panels/places/placesitemmodel.cpp
@@ -41,6 +41,8 @@
#include <QMimeData>
#include <QTimer>
+#include <kfileplacesdevicecache.h>
+
#include <Solid/Device>
#include <Solid/DeviceNotifier>
#include <Solid/OpticalDisc>
@@ -76,8 +78,6 @@ PlacesItemModel::PlacesItemModel(QObject* parent) :
KStandardItemModel(parent),
m_fileIndexingEnabled(false),
m_hiddenItemsShown(false),
- m_availableDevices(),
- m_predicate(),
m_bookmarkManager(0),
m_systemBookmarks(),
m_systemBookmarksIndexes(),
@@ -556,7 +556,7 @@ void PlacesItemModel::slotDeviceAdded(const QString& udi)
{
const Solid::Device device(udi);
- if (!m_predicate.matches(device)) {
+ if (!KFilePlacesDeviceCache::self()->predicate().matches(device)) {
return;
}
@@ -567,10 +567,6 @@ void PlacesItemModel::slotDeviceAdded(const QString& udi)
void PlacesItemModel::slotDeviceRemoved(const QString& udi)
{
- if (!m_availableDevices.contains(udi)) {
- return;
- }
-
for (int i = 0; i < m_bookmarkedItems.count(); ++i) {
PlacesItem* item = m_bookmarkedItems[i];
if (item && item->udi() == udi) {
@@ -953,30 +949,13 @@ void PlacesItemModel::createSystemBookmarks()
void PlacesItemModel::initializeAvailableDevices()
{
- QString predicate("[[[[ StorageVolume.ignored == false AND [ StorageVolume.usage == 'FileSystem' OR StorageVolume.usage == 'Encrypted' ]]"
- " OR "
- "[ IS StorageAccess AND StorageDrive.driveType == 'Floppy' ]]"
- " OR "
- "OpticalDisc.availableContent & 'Audio' ]"
- " OR "
- "StorageAccess.ignored == false ]");
-
-
- if (KProtocolInfo::isKnownProtocol("mtp")) {
- predicate.prepend("[");
- predicate.append(" OR PortableMediaPlayer.supportedProtocols == 'mtp']");
- }
-
- m_predicate = Solid::Predicate::fromString(predicate);
- Q_ASSERT(m_predicate.isValid());
-
- Solid::DeviceNotifier* notifier = Solid::DeviceNotifier::instance();
- connect(notifier, SIGNAL(deviceAdded(QString)), this, SLOT(slotDeviceAdded(QString)));
- connect(notifier, SIGNAL(deviceRemoved(QString)), this, SLOT(slotDeviceRemoved(QString)));
+ KFilePlacesDeviceCache* placesCache = KFilePlacesDeviceCache::self();
+ connect(placesCache, SIGNAL(deviceAdded(QString)), SLOT(slotDeviceAdded(QString)));
+ connect(placesCache, SIGNAL(deviceRemoved(QString)), SLOT(slotDeviceRemoved(QString)));
- const QList<Solid::Device>& deviceList = Solid::Device::listFromQuery(m_predicate);
- foreach (const Solid::Device& device, deviceList) {
- m_availableDevices << device.udi();
+ const QSet<QString> &devices = placesCache->devices();
+ foreach (const QString& device, devices) {
+ slotDeviceAdded(device);
}
}
diff --git a/dolphin/src/panels/places/placesitemmodel.h b/dolphin/src/panels/places/placesitemmodel.h
index 463e564..fc513be 100644
--- a/dolphin/src/panels/places/placesitemmodel.h
+++ b/dolphin/src/panels/places/placesitemmodel.h
@@ -267,7 +267,6 @@ private:
bool m_hiddenItemsShown;
QSet<QString> m_availableDevices;
- Solid::Predicate m_predicate;
KBookmarkManager* m_bookmarkManager;
struct SystemBookmarkData