Fix the mimetype default fix
authorAlexander Larsson <alexl@redhat.com>
Thu, 28 Jun 2012 13:38:06 +0000 (15:38 +0200)
committerAlexander Larsson <alexl@redhat.com>
Thu, 28 Jun 2012 13:38:06 +0000 (15:38 +0200)
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

index 025b70c..745940b 100644 (file)
@@ -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);