Matthias Clasen 75b071
diff -up eog-2.19.4/src/eog-image.c.svgz eog-2.19.4/src/eog-image.c
Matthias Clasen 75b071
--- eog-2.19.4/src/eog-image.c.svgz	2007-07-09 16:20:10.000000000 -0400
Matthias Clasen 75b071
+++ eog-2.19.4/src/eog-image.c	2007-07-10 10:41:07.000000000 -0400
Matthias Clasen 75b071
@@ -480,7 +480,7 @@ eog_image_apply_transformations (EogImag
Matthias Clasen c24191
 }
Matthias Clasen c24191
 
Matthias Clasen c24191
 static GnomeVFSFileSize
Matthias Clasen c24191
-eog_image_determine_file_bytes (EogImage *img, GError **error)
Matthias Clasen c24191
+eog_image_determine_file_bytes (EogImage *img, gchar **mime_type, GError **error)
Matthias Clasen c24191
 {
Matthias Clasen c24191
 	GnomeVFSFileInfo *info;
Matthias Clasen c24191
 	GnomeVFSFileSize bytes;
Matthias Clasen 75b071
@@ -491,11 +491,14 @@ eog_image_determine_file_bytes (EogImage
Matthias Clasen c24191
 	result = gnome_vfs_get_file_info_uri (img->priv->uri,
Matthias Clasen c24191
 					      info,
Matthias Clasen c24191
 					      GNOME_VFS_FILE_INFO_DEFAULT |
Matthias Clasen c24191
+					      GNOME_VFS_FILE_INFO_GET_MIME_TYPE |
Matthias Clasen c24191
 					      GNOME_VFS_FILE_INFO_FOLLOW_LINKS);
Matthias Clasen c24191
 
Matthias Clasen c24191
 	if ((result != GNOME_VFS_OK) || 
Matthias Clasen c24191
 	    (info->valid_fields & GNOME_VFS_FILE_INFO_FIELDS_SIZE) == 0) {
Matthias Clasen c24191
 		bytes = 0;
Matthias Clasen c24191
+		if (mime_type)
Matthias Clasen c24191
+			*mime_type = NULL;
Matthias Clasen c24191
 
Matthias Clasen c24191
 		g_set_error (error, 
Matthias Clasen c24191
 			     EOG_IMAGE_ERROR, 
Matthias Clasen 75b071
@@ -503,6 +506,8 @@ eog_image_determine_file_bytes (EogImage
Matthias Clasen c24191
 			     gnome_vfs_result_to_string (result));
Matthias Clasen c24191
 	} else {
Matthias Clasen c24191
 		bytes = info->size;
Matthias Clasen c24191
+		if (mime_type)
Matthias Clasen c24191
+			*mime_type = g_strdup (info->mime_type);
Matthias Clasen c24191
 	}
Matthias Clasen c24191
 
Matthias Clasen c24191
 	gnome_vfs_file_info_unref (info);
Matthias Clasen 75b071
@@ -834,6 +839,7 @@ eog_image_real_load (EogImage *img, 
Matthias Clasen c24191
 	GnomeVFSResult result;
Matthias Clasen c24191
 	EogMetadataReader *md_reader = NULL;
Matthias Clasen c24191
 	GdkPixbufFormat *format;
Matthias Clasen c24191
+	gchar *mime_type;
Matthias Clasen c24191
 	GdkPixbufLoader *loader = NULL;
Matthias Clasen c24191
 	guchar *buffer;
Matthias Clasen c24191
 	gboolean failed = FALSE;
Matthias Clasen 75b071
@@ -852,9 +858,10 @@ eog_image_real_load (EogImage *img, 
Matthias Clasen c24191
 		priv->file_type = NULL;
Matthias Clasen c24191
 	}
Matthias Clasen c24191
 
Matthias Clasen c24191
-	priv->bytes = eog_image_determine_file_bytes (img, error);
Matthias Clasen c24191
+	priv->bytes = eog_image_determine_file_bytes (img, &mime_type, error);
Matthias Clasen c24191
 
Matthias Clasen 75b071
 	if (priv->bytes == 0) {
Matthias Clasen 75b071
+                g_free (mime_type);
Matthias Clasen c24191
 		return FALSE;
Matthias Clasen c24191
 	}
Matthias Clasen c24191
 
Matthias Clasen 75b071
@@ -877,6 +884,7 @@ eog_image_real_load (EogImage *img, 
Matthias Clasen c24191
 	result = gnome_vfs_open_uri (&handle, priv->uri, GNOME_VFS_OPEN_READ);
Matthias Clasen c24191
 
Matthias Clasen c24191
 	if (result != GNOME_VFS_OK) {
Matthias Clasen c24191
+		g_free (mime_type);
Matthias Clasen c24191
 		g_set_error (error, 
Matthias Clasen c24191
 			     EOG_IMAGE_ERROR, 
Matthias Clasen c24191
 			     EOG_IMAGE_ERROR_VFS,
Matthias Clasen 75b071
@@ -886,9 +894,12 @@ eog_image_real_load (EogImage *img, 
Matthias Clasen c24191
 	}
Matthias Clasen c24191
 	
Matthias Clasen c24191
 	buffer = g_new0 (guchar, EOG_IMAGE_READ_BUFFER_SIZE);
Matthias Clasen c24191
+	loader = gdk_pixbuf_loader_new_with_mime_type (mime_type, NULL);
Matthias Clasen c24191
+	g_free (mime_type);
Matthias Clasen c24191
+	if (loader == NULL)
Matthias Clasen c24191
+		loader = gdk_pixbuf_loader_new (); 
Matthias Clasen c24191
 
Matthias Clasen c24191
 	if (read_image_data || read_only_dimension) {
Matthias Clasen c24191
-		loader = gdk_pixbuf_loader_new ();
Matthias Clasen c24191
 
Matthias Clasen c24191
 		g_signal_connect_object (G_OBJECT (loader), 
Matthias Clasen c24191
 					 "size-prepared",