diff --git a/src/kcalprefs.cpp b/src/kcalprefs.cpp --- a/src/kcalprefs.cpp +++ b/src/kcalprefs.cpp @@ -310,7 +310,7 @@ void KCalPrefs::setCategoryColor(const QString &cat, const QColor &color) { - Akonadi::Tag tag = d->mTagCache.getTagByGid(cat.toUtf8()); + Akonadi::Tag tag = d->mTagCache.getTagByName(cat); Akonadi::TagAttribute *attr = tag.attribute(Akonadi::Tag::AddIfMissing); attr->setBackgroundColor(color); new Akonadi::TagModifyJob(tag); @@ -321,7 +321,7 @@ QColor color; if (!cat.isEmpty()) { - const Akonadi::Tag &tag = d->mTagCache.getTagByGid(cat.toUtf8()); + const Akonadi::Tag &tag = d->mTagCache.getTagByName(cat); if (Akonadi::TagAttribute *attr = tag.attribute()) { color = attr->backgroundColor(); } diff --git a/src/tagcache.h b/src/tagcache.h --- a/src/tagcache.h +++ b/src/tagcache.h @@ -42,6 +42,7 @@ public: TagCache(); Akonadi::Tag getTagByGid(const QByteArray &gid) const; + Akonadi::Tag getTagByName(const QString &name) const; private Q_SLOTS: void onTagAdded(const Akonadi::Tag &); @@ -54,6 +55,7 @@ QHash mCache; QHash mGidCache; + QHash mNameCache; Akonadi::Monitor *mMonitor; }; diff --git a/src/tagcache.cpp b/src/tagcache.cpp --- a/src/tagcache.cpp +++ b/src/tagcache.cpp @@ -47,10 +47,16 @@ return mCache.value(mGidCache.value(gid)); } +Akonadi::Tag TagCache::getTagByName(const QString &name) const +{ + return mCache.value(mNameCache.value(name)); +} + void TagCache::onTagAdded(const Akonadi::Tag &tag) { mCache.insert(tag.id(), tag); mGidCache.insert(tag.gid(), tag.id()); + mNameCache.insert(tag.name(), tag.id()); } void TagCache::onTagChanged(const Akonadi::Tag &tag) @@ -62,6 +68,7 @@ { mCache.remove(tag.id()); mGidCache.remove(tag.gid()); + mNameCache.remove(tag.name()); } void TagCache::retrieveTags()