mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-12-26 15:36:14 +01:00
appinfo: avoid overriding the system defaults when adding support
We want to be compatible with the following situation: - there's no explicit default set in mimeapps.list - we add support for a content type to a specific application, and that list is empty - the default should be picked from the system list, not overridden by the user-added application. So we make the default explicit in this case, by adding it to the relevant section in mimeapps.list. https://bugzilla.gnome.org/show_bug.cgi?id=637675
This commit is contained in:
parent
e666a2ed69
commit
6a10591573
@ -1184,8 +1184,9 @@ update_mimeapps_list (const char *desktop_id,
|
|||||||
{
|
{
|
||||||
char *dirname, *filename, *string;
|
char *dirname, *filename, *string;
|
||||||
GKeyFile *key_file;
|
GKeyFile *key_file;
|
||||||
gboolean load_succeeded, res;
|
gboolean load_succeeded, res, explicit_default;
|
||||||
char **old_list, **list;
|
char **old_list, **list;
|
||||||
|
GList *system_list;
|
||||||
gsize length, data_size;
|
gsize length, data_size;
|
||||||
char *data;
|
char *data;
|
||||||
int i, j, k;
|
int i, j, k;
|
||||||
@ -1221,6 +1222,8 @@ update_mimeapps_list (const char *desktop_id,
|
|||||||
content_types = g_key_file_get_keys (key_file, DEFAULT_APPLICATIONS_GROUP, NULL, NULL);
|
content_types = g_key_file_get_keys (key_file, DEFAULT_APPLICATIONS_GROUP, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
explicit_default = FALSE;
|
||||||
|
|
||||||
for (k = 0; content_types && content_types[k]; k++)
|
for (k = 0; content_types && content_types[k]; k++)
|
||||||
{
|
{
|
||||||
/* set as default, if requested so */
|
/* set as default, if requested so */
|
||||||
@ -1245,11 +1248,15 @@ update_mimeapps_list (const char *desktop_id,
|
|||||||
content_types[k],
|
content_types[k],
|
||||||
NULL);
|
NULL);
|
||||||
else
|
else
|
||||||
|
{
|
||||||
g_key_file_set_string (key_file,
|
g_key_file_set_string (key_file,
|
||||||
DEFAULT_APPLICATIONS_GROUP,
|
DEFAULT_APPLICATIONS_GROUP,
|
||||||
content_types[k],
|
content_types[k],
|
||||||
string);
|
string);
|
||||||
|
|
||||||
|
explicit_default = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
g_free (string);
|
g_free (string);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1319,11 +1326,33 @@ update_mimeapps_list (const char *desktop_id,
|
|||||||
content_types[k],
|
content_types[k],
|
||||||
NULL);
|
NULL);
|
||||||
else
|
else
|
||||||
|
{
|
||||||
g_key_file_set_string_list (key_file,
|
g_key_file_set_string_list (key_file,
|
||||||
ADDED_ASSOCIATIONS_GROUP,
|
ADDED_ASSOCIATIONS_GROUP,
|
||||||
content_types[k],
|
content_types[k],
|
||||||
(const char * const *)list, i);
|
(const char * const *)list, i);
|
||||||
|
|
||||||
|
/* if we had no explicit default set, we should add the system default to the
|
||||||
|
* list, to avoid overriding it with applications from this list.
|
||||||
|
*/
|
||||||
|
if (!explicit_default)
|
||||||
|
{
|
||||||
|
system_list = get_all_desktop_entries_for_mime_type (content_type, (const char **) list, FALSE, NULL);
|
||||||
|
|
||||||
|
if (system_list != NULL)
|
||||||
|
{
|
||||||
|
string = system_list->data;
|
||||||
|
|
||||||
|
g_key_file_set_string (key_file,
|
||||||
|
DEFAULT_APPLICATIONS_GROUP,
|
||||||
|
content_types[k],
|
||||||
|
string);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_list_free_full (system_list, g_free);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
g_strfreev (list);
|
g_strfreev (list);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user