Matthias Clasen 581d98
--- eog-2.18.0.1/libeog/eog-image.c.svgz	2007-03-12 19:43:29.000000000 -0400
Matthias Clasen 581d98
+++ eog-2.18.0.1/libeog/eog-image.c	2007-04-01 10:39:49.000000000 -0400
Matthias Clasen 581d98
@@ -455,7 +455,7 @@
Matthias Clasen 581d98
 }
Matthias Clasen 581d98
 
Matthias Clasen 581d98
 static GnomeVFSFileSize
Matthias Clasen 581d98
-eog_image_determine_file_bytes (EogImage *img, GError **error)
Matthias Clasen 581d98
+eog_image_determine_file_bytes (EogImage *img, gchar **mime_type, GError **error)
Matthias Clasen 581d98
 {
Matthias Clasen 581d98
 	GnomeVFSFileInfo *info;
Matthias Clasen 581d98
 	GnomeVFSFileSize bytes;
Matthias Clasen 581d98
@@ -466,15 +466,20 @@
Matthias Clasen 581d98
 	result = gnome_vfs_get_file_info_uri (img->priv->uri,
Matthias Clasen 581d98
 					      info,
Matthias Clasen 581d98
 					      GNOME_VFS_FILE_INFO_DEFAULT |
Matthias Clasen 581d98
+                                              GNOME_VFS_FILE_INFO_GET_MIME_TYPE |
Matthias Clasen 581d98
 					      GNOME_VFS_FILE_INFO_FOLLOW_LINKS);
Matthias Clasen 581d98
 
Matthias Clasen 581d98
 	if ((result != GNOME_VFS_OK) || (info->valid_fields & GNOME_VFS_FILE_INFO_FIELDS_SIZE) == 0) {
Matthias Clasen 581d98
 		bytes = 0;
Matthias Clasen 581d98
+                if (mime_type)
Matthias Clasen 581d98
+                       *mime_type = NULL;
Matthias Clasen 581d98
 		g_set_error (error, EOG_IMAGE_ERROR, EOG_IMAGE_ERROR_VFS,
Matthias Clasen 581d98
 			     gnome_vfs_result_to_string (result));
Matthias Clasen 581d98
 	}
Matthias Clasen 581d98
 	else {
Matthias Clasen 581d98
 		bytes = info->size;
Matthias Clasen 581d98
+                if (mime_type)
Matthias Clasen 581d98
+                       *mime_type = g_strdup (info->mime_type);
Matthias Clasen 581d98
 	}
Matthias Clasen 581d98
 
Matthias Clasen 581d98
 	gnome_vfs_file_info_unref (info);
Matthias Clasen 581d98
@@ -643,6 +648,7 @@
Matthias Clasen 581d98
 	gboolean first_run = TRUE;
Matthias Clasen 581d98
 	EogMetadataReader *md_reader = NULL;
Matthias Clasen 581d98
 	GdkPixbufFormat *format;
Matthias Clasen 581d98
+	gchar *mime_type;
Matthias Clasen 581d98
 	gboolean read_image_data = (data2read & EOG_IMAGE_DATA_IMAGE);
Matthias Clasen 581d98
 
Matthias Clasen 581d98
 	g_assert (error == NULL || *error == NULL);
Matthias Clasen 581d98
@@ -660,24 +666,29 @@
Matthias Clasen 581d98
 		priv->file_type = NULL;
Matthias Clasen 581d98
 	}
Matthias Clasen 581d98
 
Matthias Clasen 581d98
-	priv->bytes = eog_image_determine_file_bytes (img, error);
Matthias Clasen 581d98
+	priv->bytes = eog_image_determine_file_bytes (img, &mime_type, error);
Matthias Clasen 581d98
 	if (priv->bytes == 0 && (error == NULL || *error != NULL)) {
Matthias Clasen 581d98
+		g_free (mime_type);
Matthias Clasen 581d98
 		return FALSE;
Matthias Clasen 581d98
 	}
Matthias Clasen 581d98
 
Matthias Clasen 581d98
 	result = gnome_vfs_open_uri (&handle, priv->uri, GNOME_VFS_OPEN_READ);
Matthias Clasen 581d98
 	if (result != GNOME_VFS_OK) {
Matthias Clasen 581d98
+		g_free (mime_type);
Matthias Clasen 581d98
 		g_set_error (error, EOG_IMAGE_ERROR, EOG_IMAGE_ERROR_VFS,
Matthias Clasen 581d98
 			     gnome_vfs_result_to_string (result));
Matthias Clasen 581d98
 		return FALSE;
Matthias Clasen 581d98
 	}
Matthias Clasen 581d98
 	
Matthias Clasen 581d98
 	buffer = g_new0 (guchar, READ_BUFFER_SIZE);
Matthias Clasen 581d98
+        loader = gdk_pixbuf_loader_new_with_mime_type (mime_type, NULL);
Matthias Clasen 581d98
+        g_free (mime_type);
Matthias Clasen 581d98
+        if (loader == NULL)
Matthias Clasen 581d98
+             loader = gdk_pixbuf_loader_new (); 
Matthias Clasen 581d98
 	failed = FALSE;
Matthias Clasen 581d98
 	bytes_read_total = 0;
Matthias Clasen 581d98
 
Matthias Clasen 581d98
 	if (read_image_data) {
Matthias Clasen 581d98
-		loader = gdk_pixbuf_loader_new ();
Matthias Clasen 581d98
 		g_signal_connect_object (G_OBJECT (loader), "size-prepared", (GCallback) load_size_prepared, img, 0);
Matthias Clasen 581d98
         }
Matthias Clasen 581d98