┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmmanuel Pescosta <[email protected]>2013-07-18 17:07:34 +0200
committerEmmanuel Pescosta <[email protected]>2013-07-18 17:07:34 +0200
commitaa2dda8cb4df1da0171dd34f34dacf94c958f21e (patch)
treec468f026a1ce6f7154ad8885fc3566e67d23fa19
parent63b26cbf2c849f724b7e2f5c8f40f6883d6278e5 (diff)
Overwrite the changed role value with an empty QVariant,
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
-rw-r--r--src/kitemviews/kfileitemmodelrolesupdater.cpp12
-rw-r--r--src/kitemviews/kfileitemmodelrolesupdater.h6
-rw-r--r--src/kitemviews/private/knepomukrolesprovider.cpp7
-rw-r--r--src/kitemviews/private/knepomukrolesprovider.h2
4 files changed, 23 insertions, 4 deletions
diff --git a/src/kitemviews/kfileitemmodelrolesupdater.cpp b/src/kitemviews/kfileitemmodelrolesupdater.cpp
index 317a7a352..698a6c5f0 100644
--- a/src/kitemviews/kfileitemmodelrolesupdater.cpp
+++ b/src/kitemviews/kfileitemmodelrolesupdater.cpp
@@ -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();
diff --git a/src/kitemviews/kfileitemmodelrolesupdater.h b/src/kitemviews/kfileitemmodelrolesupdater.h
index 605c36f81..e17667a0c 100644
--- a/src/kitemviews/kfileitemmodelrolesupdater.h
+++ b/src/kitemviews/kfileitemmodelrolesupdater.h
@@ -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
diff --git a/src/kitemviews/private/knepomukrolesprovider.cpp b/src/kitemviews/private/knepomukrolesprovider.cpp
index 661670cfa..e237f948f 100644
--- a/src/kitemviews/private/knepomukrolesprovider.cpp
+++ b/src/kitemviews/private/knepomukrolesprovider.cpp
@@ -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()
diff --git a/src/kitemviews/private/knepomukrolesprovider.h b/src/kitemviews/private/knepomukrolesprovider.h
index b8c7e51e6..68a4027e1 100644
--- a/src/kitemviews/private/knepomukrolesprovider.h
+++ b/src/kitemviews/private/knepomukrolesprovider.h
@@ -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();