diff src/image.c @ 1916:69ab167a50f5

do not mix autodetected and user-defined stereo mode
author Vladimir Nadvornik <nadvornik@suse.cz>
date Sat, 14 May 2011 21:53:45 +0200
parents 6e146fa6ec29
children 4845663f466e 26dfd7a4d130
line wrap: on
line diff
--- a/src/image.c	Sun Apr 10 21:11:50 2011 +0200
+++ b/src/image.c	Sat May 14 21:53:45 2011 +0200
@@ -1105,7 +1105,7 @@
 
 void image_change_pixbuf(ImageWindow *imd, GdkPixbuf *pixbuf, gdouble zoom, gboolean lazy)
 {
-
+	StereoPixbufData stereo_data = STEREO_PIXBUF_DEFAULT;
 	/* read_exif and similar functions can actually notice that the file has changed and trigger
 	   a notification that removes the pixbuf from cache and unrefs it. Therefore we must ref it
 	   here before it is taken over by the renderer. */
@@ -1124,9 +1124,13 @@
 			}
 		}
 
-	if (pixbuf && imd->user_stereo)
+	if (pixbuf)
 		{
-		g_object_set_data(G_OBJECT(pixbuf), "stereo_data", GINT_TO_POINTER(imd->user_stereo));
+		stereo_data = imd->user_stereo;
+		if (stereo_data == STEREO_PIXBUF_DEFAULT)
+			{
+			stereo_data = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(pixbuf), "stereo_data"));
+			}
 		}
 
 	pixbuf_renderer_set_post_process_func((PixbufRenderer *)imd->pr, NULL, NULL, FALSE);
@@ -1138,12 +1142,13 @@
 
 	if (lazy)
 		{
-		pixbuf_renderer_set_pixbuf_lazy((PixbufRenderer *)imd->pr, pixbuf, zoom, imd->orientation);
+		pixbuf_renderer_set_pixbuf_lazy((PixbufRenderer *)imd->pr, pixbuf, zoom, imd->orientation, stereo_data);
 		}
 	else
 		{
 		pixbuf_renderer_set_pixbuf((PixbufRenderer *)imd->pr, pixbuf, zoom);
 		pixbuf_renderer_set_orientation((PixbufRenderer *)imd->pr, imd->orientation);
+		pixbuf_renderer_set_stereo_data((PixbufRenderer *)imd->pr, stereo_data);
 		}
 
 	if (pixbuf) g_object_unref(pixbuf);