[kdelibs] followup upstream mimetypes fix
Rex Dieter
rdieter at fedoraproject.org
Sat Oct 19 12:26:24 UTC 2013
commit 9625fd188099e32877fd65715de8e2239f2953b1
Author: Rex Dieter <rdieter at math.unl.edu>
Date: Sat Oct 19 07:26:21 2013 -0500
followup upstream mimetypes fix
...-for-association-with-derived-mimetypes-f.patch | 84 ++++++++++++++++++++
kdelibs.spec | 7 ++-
2 files changed, 90 insertions(+), 1 deletions(-)
---
diff --git a/0015-Improve-fix-for-association-with-derived-mimetypes-f.patch b/0015-Improve-fix-for-association-with-derived-mimetypes-f.patch
new file mode 100644
index 0000000..873b9e5
--- /dev/null
+++ b/0015-Improve-fix-for-association-with-derived-mimetypes-f.patch
@@ -0,0 +1,84 @@
+From 8bfcace7efc0feea8899f70dfc15c3050c90ea99 Mon Sep 17 00:00:00 2001
+From: David Faure <faure at kde.org>
+Date: Sat, 19 Oct 2013 10:15:35 +0200
+Subject: [PATCH 15/15] Improve fix for association with derived mimetypes
+ (f723e2e7d36)
+
+If a desktop file was mentionning two aliases, they would both get
+removed, due to is() returning true for aliases as well.
+
+CCBUG: 321706
+---
+ kded/kbuildservicefactory.cpp | 7 ++++++-
+ kded/tests/kmimeassociationstest.cpp | 14 ++++++++++----
+ 2 files changed, 16 insertions(+), 5 deletions(-)
+
+diff --git a/kded/kbuildservicefactory.cpp b/kded/kbuildservicefactory.cpp
+index b4564bd..7a2a2fc 100644
+--- a/kded/kbuildservicefactory.cpp
++++ b/kded/kbuildservicefactory.cpp
+@@ -269,8 +269,13 @@ void KBuildServiceFactory::populateServiceTypes()
+ } else {
+ bool shouldAdd = true;
+ foreach (const QString &otherType, service->serviceTypes()) {
++ // Skip derived types if the base class is listed (#321706)
+ if (stName != otherType && mime->is(otherType)) {
+- shouldAdd = false;
++ // But don't skip aliases (they got resolved into mime->name() already, but don't let two aliases cancel out)
++ if (KMimeTypeRepository::self()->canonicalName(otherType) != mime->name()) {
++ //kDebug() << "Skipping" << mime->name() << "because of" << otherType << "(canonical" << KMimeTypeRepository::self()->canonicalName(otherType) << ") while parsing" << service->entryPath();
++ shouldAdd = false;
++ }
+ }
+ }
+ if (shouldAdd) {
+diff --git a/kded/tests/kmimeassociationstest.cpp b/kded/tests/kmimeassociationstest.cpp
+index a07637f..342a8fd 100644
+--- a/kded/tests/kmimeassociationstest.cpp
++++ b/kded/tests/kmimeassociationstest.cpp
+@@ -140,10 +140,12 @@ private Q_SLOTS:
+ // This interacted badly with mimeapps.list listing another app for text/plain, but the
+ // lookup found this app first, due to c-src. The fix: ignoring derived mimetypes when
+ // the base mimetype is already listed.
++ //
++ // Also include aliases (msword), to check they don't cancel each other out.
+ fakeCSrcApplication = m_localApps + "fakecsrcapplication.desktop";
+ if (!QFile::exists(fakeCSrcApplication)) {
+ mustUpdateKSycoca = true;
+- writeAppDesktopFile(fakeCSrcApplication, QStringList() << "text/plain" << "text/c-src", 8);
++ writeAppDesktopFile(fakeCSrcApplication, QStringList() << "text/plain" << "text/c-src" << "application/vnd.ms-word" << "application/msword", 8);
+ }
+
+ fakeJpegApplication = m_localApps + "fakejpegapplication.desktop";
+@@ -200,6 +202,7 @@ private Q_SLOTS:
+ preferredApps["text/plain"] << "faketextapplication.desktop" << "kde4-kwrite.desktop";
+ preferredApps["text/x-csrc"] << "faketextapplication.desktop" << "kde4-kwrite.desktop";
+ preferredApps["text/html"] << "fakehtmlapplication.desktop";
++ preferredApps["application/msword"] << "fakecsrcapplication.desktop";
+ removedApps["image/jpeg"] << "firefox.desktop";
+ removedApps["text/html"] << "kde4-dolphin.desktop" << "kde4-kwrite.desktop";
+
+@@ -231,14 +234,17 @@ private Q_SLOTS:
+ for (ExpectedResultsMap::const_iterator it = preferredApps.constBegin(),
+ end = preferredApps.constEnd() ; it != end ; ++it) {
+ const QString mime = it.key();
+- // Derived mimetypes are handled outside KMimeAssociations
+- if (mime == QLatin1String("text/x-csrc"))
++ // The data for derived types and aliases isn't for this test (which only looks at mimeapps.list)
++ if (mime == QLatin1String("text/x-csrc") || mime == QLatin1String("application/msword"))
+ continue;
+ const QList<KServiceOffer> offers = offerHash.offersFor(mime);
+ Q_FOREACH(const QString& service, it.value()) {
+ KService::Ptr serv = KService::serviceByStorageId(service);
+ if (serv && !offersContains(offers, serv)) {
+- kDebug() << serv.data() << serv->entryPath() << "does not have" << mime;
++ kDebug() << "expected offer" << serv->entryPath() << "not in offers for" << mime << ":";
++ Q_FOREACH(const KServiceOffer& offer, offers) {
++ kDebug() << offer.service()->storageId();
++ }
+ QFAIL("offer does not have servicetype");
+ }
+ }
+--
+1.8.3.1
+
diff --git a/kdelibs.spec b/kdelibs.spec
index 027de02..55b5857 100644
--- a/kdelibs.spec
+++ b/kdelibs.spec
@@ -38,7 +38,7 @@ Source10: SOLID_HAL_LEGACY.sh
Summary: KDE Libraries
Version: 4.11.2
-Release: 2%{?dist}
+Release: 3%{?dist}
Name: kdelibs
Epoch: 6
@@ -167,6 +167,7 @@ Patch093: turn-the-packagekit-support-feature-off-by-default.patch
Patch102: 0002-Improve-error-handling-when-writing-to-the-kdeinit4-.patch
Patch110: 0010-Enable-translation-functions-for-js-QScriptEngine-sc.patch
Patch112: 0012-Fix-association-with-derived-mimetype-again.patch
+Patch115: 0015-Improve-fix-for-association-with-derived-mimetypes-f.patch
## security fix
@@ -363,6 +364,7 @@ sed -i -e "s|@@VERSION_RELEASE@@|%{version}-%{release}|" kio/kio/kprotocolmanage
%patch102 -p1 -b .0002
%patch110 -p1 -b .0010
%patch112 -p1 -b .0012
+%patch115 -p1 -b .0015
# security fixes
@@ -612,6 +614,9 @@ gtk-update-icon-cache %{_kde4_iconsdir}/hicolor &> /dev/null || :
%changelog
+* Sat Oct 19 2013 Rex Dieter <rdieter at fedoraproject.org> - 6:4.11.2-3
+- followup upstream mimetypes fix
+
* Fri Oct 18 2013 Rex Dieter <rdieter at fedoraproject.org> - 6:4.11.2-2
- backport a few upstream fixes
More information about the scm-commits
mailing list