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).
This commit is contained in:
Alexander Larsson 2012-06-28 15:38:06 +02:00
parent f14c0112d0
commit c35106fcc4

View File

@ -3239,6 +3239,7 @@ get_all_desktop_entries_for_mime_type (const char *base_mime_type,
char **mime_types; char **mime_types;
char **default_entries; char **default_entries;
char **removed_associations; char **removed_associations;
gboolean already_found_handler;
int i, j, k; int i, j, k;
GPtrArray *array; GPtrArray *array;
char **anc; char **anc;
@ -3290,6 +3291,11 @@ get_all_desktop_entries_for_mime_type (const char *base_mime_type,
{ {
mime_type = mime_types[i]; 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 */ /* Go through all apps listed in user and system dirs */
for (dir_list = mime_info_cache->dirs; for (dir_list = mime_info_cache->dirs;
dir_list != NULL; 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 /* Pick the explicit default application if we got no result earlier
* (ie, for more specific mime types) * (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); 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); default_entries = g_hash_table_lookup (dir->defaults_list_map, mime_type);
for (j = 0; default_entries != NULL && default_entries[j] != NULL; j++) 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]); old_default_entry = g_strdup (default_entries[j]);
desktop_entries = append_desktop_entry (desktop_entries, default_entries[j], removed_entries); desktop_entries = append_desktop_entry (desktop_entries, default_entries[j], removed_entries);