diff options
-rw-r--r-- | ChangeLog | 11 | ||||
-rw-r--r-- | libnautilus-private/nautilus-file.c | 25 | ||||
-rw-r--r-- | libnautilus-private/nautilus-icon-info.c | 6 | ||||
-rw-r--r-- | libnautilus-private/nautilus-icon-info.h | 1 |
4 files changed, 41 insertions, 2 deletions
@@ -1,3 +1,14 @@ +2008-10-23 Alexander Larsson <alexl@redhat.com> + + Merged from trunk: + + * libnautilus-private/nautilus-file.c: + * libnautilus-private/nautilus-icon-info.[ch]: + Manually fall back to default fallback icon for + files if not found. Goes with the corresponding + glib/gvfs change to not add the fallback icon to + the end of files icons. (#528320) + 2008-10-22 Alexander Larsson <alexl@redhat.com> Merged from trunk: diff --git a/libnautilus-private/nautilus-file.c b/libnautilus-private/nautilus-file.c index 5dc7e7bcf..2959f808c 100644 --- a/libnautilus-private/nautilus-file.c +++ b/libnautilus-private/nautilus-file.c @@ -3482,6 +3482,23 @@ nautilus_file_get_gicon (NautilusFile *file, return g_themed_icon_new ("text-x-generic"); } +static GIcon * +get_default_file_icon (NautilusFileIconFlags flags) +{ + static GIcon *fallback_icon = NULL; + static GIcon *fallback_icon_preview = NULL; + if (fallback_icon == NULL) { + fallback_icon = g_themed_icon_new ("text-x-generic"); + fallback_icon_preview = g_themed_icon_new ("text-x-preview"); + g_themed_icon_append_name (G_THEMED_ICON (fallback_icon_preview), "text-x-generic"); + } + if (flags & NAUTILUS_FILE_ICON_FLAGS_EMBEDDING_TEXT) { + return fallback_icon_preview; + } else { + return fallback_icon; + } +} + NautilusIconInfo * nautilus_file_get_icon (NautilusFile *file, int size, @@ -3573,11 +3590,15 @@ nautilus_file_get_icon (NautilusFile *file, if (gicon) { icon = nautilus_icon_info_lookup (gicon, size); + if (nautilus_icon_info_is_fallback (icon)) { + g_object_unref (icon); + icon = nautilus_icon_info_lookup (get_default_file_icon (flags), size); + } g_object_unref (gicon); return icon; + } else { + return nautilus_icon_info_lookup (get_default_file_icon (flags), size); } - - return nautilus_icon_info_new_for_pixbuf (NULL); } GdkPixbuf * diff --git a/libnautilus-private/nautilus-icon-info.c b/libnautilus-private/nautilus-icon-info.c index c53696705..802c74582 100644 --- a/libnautilus-private/nautilus-icon-info.c +++ b/libnautilus-private/nautilus-icon-info.c @@ -59,6 +59,12 @@ nautilus_icon_info_init (NautilusIconInfo *icon) icon->sole_owner = TRUE; } +gboolean +nautilus_icon_info_is_fallback (NautilusIconInfo *icon) +{ + return icon->pixbuf == NULL; +} + static void pixbuf_toggle_notify (gpointer info, GObject *object, diff --git a/libnautilus-private/nautilus-icon-info.h b/libnautilus-private/nautilus-icon-info.h index 9d556e46b..5d37d2339 100644 --- a/libnautilus-private/nautilus-icon-info.h +++ b/libnautilus-private/nautilus-icon-info.h @@ -58,6 +58,7 @@ NautilusIconInfo * nautilus_icon_info_lookup (GIcon int size); NautilusIconInfo * nautilus_icon_info_lookup_from_name (const char *name, int size); +gboolean nautilus_icon_info_is_fallback (NautilusIconInfo *icon); GdkPixbuf * nautilus_icon_info_get_pixbuf (NautilusIconInfo *icon); GdkPixbuf * nautilus_icon_info_get_pixbuf_nodefault (NautilusIconInfo *icon); GdkPixbuf * nautilus_icon_info_get_pixbuf_nodefault_at_size (NautilusIconInfo *icon, |