From c35106fcc4a736a2cdd3566042da15216dea415b Mon Sep 17 00:00:00 2001 From: Alexander Larsson Date: Thu, 28 Jun 2012 15:38:06 +0200 Subject: [PATCH] Fix the mimetype default fix We need to ignore the defaults.list item only when there was a mimetype handler found in a previous mimetype, not if one was found for the same mimetype as the one that is listed in defaults.list (same for the new-style defaults). --- gio/gdesktopappinfo.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/gio/gdesktopappinfo.c b/gio/gdesktopappinfo.c index 025b70c..745940b 100644 --- a/gio/gdesktopappinfo.c +++ b/gio/gdesktopappinfo.c @@ -3239,6 +3239,7 @@ get_all_desktop_entries_for_mime_type (const char *base_mime_type, char **mime_types; char **default_entries; char **removed_associations; + gboolean already_found_handler; int i, j, k; GPtrArray *array; char **anc; @@ -3290,6 +3291,11 @@ get_all_desktop_entries_for_mime_type (const char *base_mime_type, { mime_type = mime_types[i]; + /* This is true if we already found a handler for a more specific + mimetype. If its set we ignore any defaults for the less specific + mimetypes. */ + already_found_handler = (desktop_entries != NULL); + /* Go through all apps listed in user and system dirs */ for (dir_list = mime_info_cache->dirs; dir_list != NULL; @@ -3300,7 +3306,7 @@ get_all_desktop_entries_for_mime_type (const char *base_mime_type, /* Pick the explicit default application if we got no result earlier * (ie, for more specific mime types) */ - if (desktop_entries == NULL) + if (!already_found_handler) { entry = g_hash_table_lookup (dir->mimeapps_list_defaults_map, mime_type); @@ -3326,7 +3332,7 @@ get_all_desktop_entries_for_mime_type (const char *base_mime_type, default_entries = g_hash_table_lookup (dir->defaults_list_map, mime_type); for (j = 0; default_entries != NULL && default_entries[j] != NULL; j++) { - if (default_entry == NULL && old_default_entry == NULL && desktop_entries == NULL) + if (default_entry == NULL && old_default_entry == NULL && !already_found_handler) old_default_entry = g_strdup (default_entries[j]); desktop_entries = append_desktop_entry (desktop_entries, default_entries[j], removed_entries); -- 2.7.4