mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-08-19 23:28:54 +02:00
Use icons from the shared mime database, if available.
svn path=/trunk/; revision=6976
This commit is contained in:
@@ -1,5 +1,8 @@
|
|||||||
2008-06-09 Matthias Clasen <mclasen@redhat.com>
|
2008-06-09 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* gcontenttype.c (g_content_type_get_icon): Use icons specified
|
||||||
|
in the shared mime database, if available.
|
||||||
|
|
||||||
* xdgmime/*: Sync with upstream. This brings support for
|
* xdgmime/*: Sync with upstream. This brings support for
|
||||||
glob weights, generic icons, and changes the cache format to
|
glob weights, generic icons, and changes the cache format to
|
||||||
version 1.1.
|
version 1.1.
|
||||||
|
@@ -659,12 +659,18 @@ GIcon *
|
|||||||
g_content_type_get_icon (const char *type)
|
g_content_type_get_icon (const char *type)
|
||||||
{
|
{
|
||||||
char *mimetype_icon, *generic_mimetype_icon, *q;
|
char *mimetype_icon, *generic_mimetype_icon, *q;
|
||||||
char *icon_names[3];
|
char *xdg_mimetype_icon, *legacy_mimetype_icon;
|
||||||
|
char *icon_names[4];
|
||||||
|
int n;
|
||||||
const char *p;
|
const char *p;
|
||||||
GIcon *themed_icon;
|
GIcon *themed_icon;
|
||||||
|
|
||||||
g_return_val_if_fail (type != NULL, NULL);
|
g_return_val_if_fail (type != NULL, NULL);
|
||||||
|
|
||||||
|
G_LOCK (gio_xdgmime);
|
||||||
|
xdg_mimetype_icon = g_strdup (xdg_mime_get_icon (type));
|
||||||
|
G_UNLOCK (gio_xdgmime);
|
||||||
|
|
||||||
mimetype_icon = g_strdup (type);
|
mimetype_icon = g_strdup (type);
|
||||||
|
|
||||||
while ((q = strchr (mimetype_icon, '/')) != NULL)
|
while ((q = strchr (mimetype_icon, '/')) != NULL)
|
||||||
@@ -673,21 +679,27 @@ g_content_type_get_icon (const char *type)
|
|||||||
p = strchr (type, '/');
|
p = strchr (type, '/');
|
||||||
if (p == NULL)
|
if (p == NULL)
|
||||||
p = type + strlen (type);
|
p = type + strlen (type);
|
||||||
|
|
||||||
|
/* Not all icons have migrated to the new icon theme spec, look for old names too */
|
||||||
|
legacy_mimetype_icon = g_strconcat ("gnome-mime-", mimetype_icon, NULL);
|
||||||
|
|
||||||
generic_mimetype_icon = g_malloc (p - type + strlen ("-x-generic") + 1);
|
generic_mimetype_icon = g_malloc (p - type + strlen ("-x-generic") + 1);
|
||||||
memcpy (generic_mimetype_icon, type, p - type);
|
memcpy (generic_mimetype_icon, type, p - type);
|
||||||
memcpy (generic_mimetype_icon + (p - type), "-x-generic", strlen ("-x-generic"));
|
memcpy (generic_mimetype_icon + (p - type), "-x-generic", strlen ("-x-generic"));
|
||||||
generic_mimetype_icon[(p - type) + strlen ("-x-generic")] = 0;
|
generic_mimetype_icon[(p - type) + strlen ("-x-generic")] = 0;
|
||||||
|
|
||||||
icon_names[0] = mimetype_icon;
|
if (xdg_mimetype_icon)
|
||||||
/* Not all icons have migrated to the new icon theme spec, look for old names too */
|
icon_names[n++] = xdg_mimetype_icon;
|
||||||
icon_names[1] = g_strconcat ("gnome-mime-", mimetype_icon, NULL);
|
|
||||||
icon_names[2] = generic_mimetype_icon;
|
icon_names[n++] = mimetype_icon;
|
||||||
|
icon_names[n++] = legacy_mimetype_icon;
|
||||||
|
icon_names[n++] = generic_mimetype_icon;
|
||||||
|
|
||||||
themed_icon = g_themed_icon_new_from_names (icon_names, 3);
|
themed_icon = g_themed_icon_new_from_names (icon_names, n);
|
||||||
|
|
||||||
|
g_free (xdg_mimetype_icon);
|
||||||
g_free (mimetype_icon);
|
g_free (mimetype_icon);
|
||||||
g_free (icon_names[1]);
|
g_free (legacy_mimetype_icon);
|
||||||
g_free (generic_mimetype_icon);
|
g_free (generic_mimetype_icon);
|
||||||
|
|
||||||
return themed_icon;
|
return themed_icon;
|
||||||
@@ -845,7 +857,7 @@ g_content_type_guess (const char *filename,
|
|||||||
|
|
||||||
if (mimetype == NULL)
|
if (mimetype == NULL)
|
||||||
{
|
{
|
||||||
/* Conflicts, and sniffed type was no help or not there. guess on the first one */
|
/* Conflicts, and sniffed type was no help or not there. Guess on the first one */
|
||||||
mimetype = g_strdup (name_mimetypes[0]);
|
mimetype = g_strdup (name_mimetypes[0]);
|
||||||
if (result_uncertain)
|
if (result_uncertain)
|
||||||
*result_uncertain = TRUE;
|
*result_uncertain = TRUE;
|
||||||
|
Reference in New Issue
Block a user