diff options
-rw-r--r-- | mail/ChangeLog | 7 | ||||
-rw-r--r-- | mail/mail-display.c | 24 |
2 files changed, 25 insertions, 6 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog index e7402b5263..4f0bab6887 100644 --- a/mail/ChangeLog +++ b/mail/ChangeLog @@ -1,3 +1,10 @@ +2000-12-21 Dan Winship <danw@helixcode.com> + + * mail-display.c (pixbuf_for_mime_type): Deal with the possibility + that we have an icon-filename listed for a MIME type, but the icon + file doesn't actually exist. Also, if gnome-unknown.png can't be + found, fall back. Might fix a crash people have been reporting... + 2000-12-18 Chris Toshok <toshok@helixcode.com> * mail-format.c (handle_multipart_encrypted): for now #ifdef diff --git a/mail/mail-display.c b/mail/mail-display.c index 52858874f6..b7d4442a2a 100644 --- a/mail/mail-display.c +++ b/mail/mail-display.c @@ -20,6 +20,7 @@ #include "mail-display.h" #include "mail-config.h" #include "mail.h" +#include "art/empty.xpm" #include <bonobo.h> #include <libgnorba/gnorba.h> @@ -374,7 +375,7 @@ pixbuf_for_mime_type (const char *mime_type) { const char *icon_name; char *filename = NULL; - GdkPixbuf *pixbuf; + GdkPixbuf *pixbuf = NULL; icon_name = gnome_vfs_mime_get_value (mime_type, "icon-filename"); if (icon_name) { @@ -398,11 +399,22 @@ pixbuf_for_mime_type (const char *mime_type) } } - if (!filename) - filename = gnome_pixmap_file ("gnome-unknown.png"); + if (filename) { + pixbuf = gdk_pixbuf_new_from_file (filename); + g_free (filename); + } - pixbuf = gdk_pixbuf_new_from_file (filename); - g_free (filename); + if (!pixbuf) { + filename = gnome_pixmap_file ("gnome-unknown.png"); + if (filename) { + pixbuf = gdk_pixbuf_new_from_file (filename); + g_free (filename); + } else { + g_warning ("Could not get any icon for %s!",mime_type); + pixbuf = gdk_pixbuf_new_from_xpm_data ( + (const char **)empty_xpm); + } + } return pixbuf; } @@ -469,7 +481,7 @@ pixbuf_gen_idle (struct _PixbufLoader *pbl) mini = gdk_pixbuf_scale_simple (pixbuf, width, height, GDK_INTERP_BILINEAR); - if (error) + if (error || !pbl->mstream) gdk_pixbuf_unref (pixbuf); bonobo_ui_toolbar_icon_set_pixbuf ( BONOBO_UI_TOOLBAR_ICON (pbl->pixmap), mini); |