]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Overwrite the changed role value with an empty QVariant,
authorEmmanuel Pescosta <emmanuelpescosta099@gmail.com>
Thu, 18 Jul 2013 15:07:34 +0000 (17:07 +0200)
committerEmmanuel Pescosta <emmanuelpescosta099@gmail.com>
Thu, 18 Jul 2013 15:07:34 +0000 (17:07 +0200)
because the nepomuk roles provider doesn't overwrite it when the property
value list is empty.

BUG: 322348
REVIEW: 111505
FIXED-IN: 4.11.0

src/kitemviews/kfileitemmodelrolesupdater.cpp
src/kitemviews/kfileitemmodelrolesupdater.h
src/kitemviews/private/knepomukrolesprovider.cpp
src/kitemviews/private/knepomukrolesprovider.h

index 317a7a352279b167388b359b84ee752ab0b5a5b0..698a6c5f00fa494bbb8e2892d6c4c75c3c4e4462 100644 (file)
@@ -294,7 +294,7 @@ void KFileItemModelRolesUpdater::setRoles(const QSet<QByteArray>& roles)
 
                 m_nepomukResourceWatcher = new Nepomuk2::ResourceWatcher(this);
                 connect(m_nepomukResourceWatcher, SIGNAL(propertyChanged(Nepomuk2::Resource,Nepomuk2::Types::Property,QVariantList,QVariantList)),
-                        this, SLOT(applyChangedNepomukRoles(Nepomuk2::Resource)));
+                        this, SLOT(applyChangedNepomukRoles(Nepomuk2::Resource,Nepomuk2::Types::Property)));
             } else if (!hasNepomukRole && m_nepomukResourceWatcher) {
                 delete m_nepomukResourceWatcher;
                 m_nepomukResourceWatcher = 0;
@@ -721,7 +721,7 @@ void KFileItemModelRolesUpdater::resolveRecentlyChangedItems()
     updateChangedItems();
 }
 
-void KFileItemModelRolesUpdater::applyChangedNepomukRoles(const Nepomuk2::Resource& resource)
+void KFileItemModelRolesUpdater::applyChangedNepomukRoles(const Nepomuk2::Resource& resource, const Nepomuk2::Types::Property& property)
 {
 #ifdef HAVE_NEPOMUK
     if (!Nepomuk2::ResourceManager::instance()->initialized()) {
@@ -740,6 +740,14 @@ void KFileItemModelRolesUpdater::applyChangedNepomukRoles(const Nepomuk2::Resour
     QHash<QByteArray, QVariant> data = rolesData(item);
 
     const KNepomukRolesProvider& rolesProvider = KNepomukRolesProvider::instance();
+    const QByteArray role = rolesProvider.roleForPropertyUri(property.uri());
+    if (!role.isEmpty() && m_roles.contains(role)) {
+        // Overwrite the changed role value with an empty QVariant, because the roles
+        // provider doesn't overwrite it when the property value list is empty.
+        // See bug 322348
+        data.insert(role, QVariant());
+    }
+
     QHashIterator<QByteArray, QVariant> it(rolesProvider.roleValues(resource, m_roles));
     while (it.hasNext()) {
         it.next();
index 605c36f81af3943d5a7ffb22c739c5c03063e910..e17667a0c62c38e87a7af3d4f8c314055622462d 100644 (file)
@@ -43,6 +43,10 @@ class QTimer;
     {
         class ResourceWatcher;
         class Resource;
+        namespace Types
+        {
+            class Property;
+        }
     }
 #else
     // Required for the slot applyChangedNepomukRoles() that
@@ -208,7 +212,7 @@ private slots:
      */
     void resolveRecentlyChangedItems();
 
-    void applyChangedNepomukRoles(const Nepomuk2::Resource& resource);
+    void applyChangedNepomukRoles(const Nepomuk2::Resource& resource, const Nepomuk2::Types::Property& property);
 
     /**
      * Is invoked if a directory watched by KDirWatch got dirty. Updates
index 661670cfa4c840cc8af2ee54436dff346ed83154..e237f948f33a880f15b10a6838dd212598453285 100644 (file)
@@ -68,7 +68,7 @@ QHash<QByteArray, QVariant> KNepomukRolesProvider::roleValues(const Nepomuk2::Re
         it.next();
 
         const Nepomuk2::Types::Property property = it.key();
-        const QByteArray role = m_roleForUri.value(property.uri());
+        const QByteArray role = roleForPropertyUri(property.uri());
         if (role.isEmpty() || !roles.contains(role)) {
             continue;
         }
@@ -118,6 +118,11 @@ QHash<QByteArray, QVariant> KNepomukRolesProvider::roleValues(const Nepomuk2::Re
     return values;
 }
 
+QByteArray KNepomukRolesProvider::roleForPropertyUri(const QUrl& uri) const
+{
+    return m_roleForUri.value(uri);
+}
+
 KNepomukRolesProvider::KNepomukRolesProvider() :
     m_roles(),
     m_roleForUri()
index b8c7e51e60e55ffb4c0c116b94613dbdb58efa8c..68a4027e151cd5cbed97ad1917d6f5573d3ecc59 100644 (file)
@@ -55,6 +55,8 @@ public:
     QHash<QByteArray, QVariant> roleValues(const Nepomuk2::Resource& resource,
                                            const QSet<QByteArray>& roles) const;
 
+    QByteArray roleForPropertyUri(const QUrl& uri) const;
+
 protected:
     KNepomukRolesProvider();