]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/panels/places/placesitemmodel.cpp
Merge remote-tracking branch 'origin/KDE/4.9'
[dolphin.git] / src / panels / places / placesitemmodel.cpp
index 89488610fe8eca5d90d1066f0ee24d6c67ea91ab..31285aea285b1a75dc54eb6297e30706ba47c773 100644 (file)
@@ -31,6 +31,7 @@
 #include <KComponentData>
 #include <KDebug>
 #include <KIcon>
+#include <kprotocolinfo.h>
 #include <KLocale>
 #include <KStandardDirs>
 #include <KUser>
@@ -554,11 +555,14 @@ void PlacesItemModel::onItemChanged(int index, const QSet<QByteArray>& changedRo
 void PlacesItemModel::slotDeviceAdded(const QString& udi)
 {
     const Solid::Device device(udi);
-    if (m_predicate.matches(device)) {
-        m_availableDevices << udi;
-        const KBookmark bookmark = PlacesItem::createDeviceBookmark(m_bookmarkManager, udi);
-        appendItem(new PlacesItem(bookmark));
+
+    if (!m_predicate.matches(device)) {
+        return;
     }
+
+    m_availableDevices << udi;
+    const KBookmark bookmark = PlacesItem::createDeviceBookmark(m_bookmarkManager, udi);
+    appendItem(new PlacesItem(bookmark));
 }
 
 void PlacesItemModel::slotDeviceRemoved(const QString& udi)
@@ -947,14 +951,21 @@ void PlacesItemModel::createSystemBookmarks()
 
 void PlacesItemModel::initializeAvailableDevices()
 {
-    m_predicate = Solid::Predicate::fromString(
-        "[[[[ StorageVolume.ignored == false AND [ StorageVolume.usage == 'FileSystem' OR StorageVolume.usage == 'Encrypted' ]]"
+    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();