From 012e360d42bab9dfdbe411f1b03e028dafaf4d72 Mon Sep 17 00:00:00 2001 From: Luc Menut <lmenut@mageia.org> Date: Mon, 6 Oct 2014 00:39:32 +0200 Subject: [PATCH 2/3] Read mimeapps.list from XDG_CONFIG_HOME and XDG_CONFIG_DIRS as per mime-apps-spec http://standards.freedesktop.org/mime-apps-spec/mime-apps-spec-1.0.1.html#file --- kded/kmimeassociations.cpp | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/kded/kmimeassociations.cpp b/kded/kmimeassociations.cpp index 052251d..bb22e30 100644 --- a/kded/kmimeassociations.cpp +++ b/kded/kmimeassociations.cpp @@ -28,6 +28,8 @@ #include <kglobal.h> #include <kstandarddirs.h> +#include <QtCore/QFile> + KMimeAssociations::KMimeAssociations(KOfferHash& offerHash) : m_offerHash(offerHash) { @@ -52,8 +54,24 @@ text/plain=gnome-gedit.desktop;gnu-emacs.desktop; bool KMimeAssociations::parseAllMimeAppsList() { + // search for mimeapps.list in $XDG_CONFIG_HOME and $XDG_CONFIG_DIRS + // http://standards.freedesktop.org/mime-apps-spec/mime-apps-spec-1.0.html + QStringList xdgConfigMimeappsDirs = QFile::decodeName(qgetenv("XDG_CONFIG_DIRS")).split(':'); + if (xdgConfigMimeappsDirs.isEmpty()) { + xdgConfigMimeappsDirs.append(QLatin1String("/etc/xdg")); + } + xdgConfigMimeappsDirs.prepend(KGlobal::dirs()->localxdgconfdir()); + + QStringList xdgConfigMimeappsFiles; + Q_FOREACH(const QString &dir, xdgConfigMimeappsDirs) { + const QString file = dir + QLatin1String("/mimeapps.list"); + if (QFile::exists(file)) { + xdgConfigMimeappsFiles.append(file); + } + } + // Using the "merged view" from KConfig is not enough since we -add- at every level, we don't replace. - const QStringList mimeappsFiles = KGlobal::dirs()->findAllResources("xdgdata-apps", "mimeapps.list"); + const QStringList mimeappsFiles = xdgConfigMimeappsFiles + KGlobal::dirs()->findAllResources("xdgdata-apps", "mimeapps.list"); if (mimeappsFiles.isEmpty()) return false; -- 2.1.2