[Goodies-commits] r3372 - ristretto/trunk/src

Stephan Arts stephan at xfce.org
Sat Oct 13 18:20:14 CEST 2007


Author: stephan
Date: 2007-10-13 16:20:14 +0000 (Sat, 13 Oct 2007)
New Revision: 3372

Modified:
   ristretto/trunk/src/picture_viewer.c
Log:
Fix segfault with animated images



Modified: ristretto/trunk/src/picture_viewer.c
===================================================================
--- ristretto/trunk/src/picture_viewer.c	2007-10-13 15:58:31 UTC (rev 3371)
+++ ristretto/trunk/src/picture_viewer.c	2007-10-13 16:20:14 UTC (rev 3372)
@@ -651,42 +651,45 @@
 static gboolean
 cb_rstto_picture_viewer_update_image(RsttoPictureViewer *viewer)
 {
-    if(gdk_pixbuf_animation_iter_advance(viewer->priv->iter, NULL))
+    if (viewer->priv->iter)
     {
-        GdkPixbuf *src_pixbuf = gdk_pixbuf_animation_iter_get_pixbuf(viewer->priv->iter);
-        
-        if (src_pixbuf)
+        if(gdk_pixbuf_animation_iter_advance(viewer->priv->iter, NULL))
         {
-            RsttoNavigatorEntry *entry = rstto_navigator_get_file(viewer->priv->navigator);
-            if (viewer->priv->src_pixbuf)
-                gdk_pixbuf_unref(viewer->priv->src_pixbuf);
-            viewer->priv->src_pixbuf = gdk_pixbuf_rotate_simple(src_pixbuf, rstto_navigator_entry_get_rotation(entry));
-
-            if (rstto_navigator_entry_get_flip(entry, FALSE))
+            GdkPixbuf *src_pixbuf = gdk_pixbuf_animation_iter_get_pixbuf(viewer->priv->iter);
+            
+            if (src_pixbuf)
             {
-                src_pixbuf = viewer->priv->src_pixbuf;
-                viewer->priv->src_pixbuf = gdk_pixbuf_flip(src_pixbuf, FALSE);
-                gdk_pixbuf_unref(src_pixbuf);
+                RsttoNavigatorEntry *entry = rstto_navigator_get_file(viewer->priv->navigator);
+                if (viewer->priv->src_pixbuf)
+                    gdk_pixbuf_unref(viewer->priv->src_pixbuf);
+                viewer->priv->src_pixbuf = gdk_pixbuf_rotate_simple(src_pixbuf, rstto_navigator_entry_get_rotation(entry));
+
+                if (rstto_navigator_entry_get_flip(entry, FALSE))
+                {
+                    src_pixbuf = viewer->priv->src_pixbuf;
+                    viewer->priv->src_pixbuf = gdk_pixbuf_flip(src_pixbuf, FALSE);
+                    gdk_pixbuf_unref(src_pixbuf);
+                }
+
+                if (rstto_navigator_entry_get_flip(entry, TRUE))
+                {
+                    src_pixbuf = viewer->priv->src_pixbuf;
+                    viewer->priv->src_pixbuf = gdk_pixbuf_flip(src_pixbuf, TRUE);
+                    gdk_pixbuf_unref(src_pixbuf);
+                }
             }
 
-            if (rstto_navigator_entry_get_flip(entry, TRUE))
+            rstto_picture_viewer_refresh(viewer);
+            rstto_picture_viewer_paint(GTK_WIDGET(viewer));
+
+            gint time = gdk_pixbuf_animation_iter_get_delay_time(viewer->priv->iter);
+            if (time != -1)
             {
-                src_pixbuf = viewer->priv->src_pixbuf;
-                viewer->priv->src_pixbuf = gdk_pixbuf_flip(src_pixbuf, TRUE);
-                gdk_pixbuf_unref(src_pixbuf);
+                viewer->priv->timeout_id = g_timeout_add(time, (GSourceFunc)cb_rstto_picture_viewer_update_image, viewer);
             }
-        }
 
-        rstto_picture_viewer_refresh(viewer);
-        rstto_picture_viewer_paint(GTK_WIDGET(viewer));
-
-        gint time = gdk_pixbuf_animation_iter_get_delay_time(viewer->priv->iter);
-        if (time != -1)
-        {
-            viewer->priv->timeout_id = g_timeout_add(time, (GSourceFunc)cb_rstto_picture_viewer_update_image, viewer);
+            return FALSE;
         }
-
-        return FALSE;
     }
     return TRUE;
 }
@@ -719,6 +722,10 @@
                 gdk_pixbuf_unref(viewer->priv->src_pixbuf);
                 viewer->priv->src_pixbuf = NULL;
             }
+            if (viewer->priv->iter)
+            {
+                viewer->priv->iter = NULL;
+            }
         }
         viewer->priv->loader = gdk_pixbuf_loader_new();
 
@@ -892,40 +899,22 @@
 static void
 cb_rstto_picture_viewer_closed(GdkPixbufLoader *loader, RsttoPictureViewer *viewer)
 {
-    gint time = -1;
-
     GtkWidget *widget = GTK_WIDGET(viewer);
-    if (viewer->priv->iter)
+
+    if (viewer->priv->src_pixbuf)
     {
-        time = gdk_pixbuf_animation_iter_get_delay_time(viewer->priv->iter);
+        gdk_pixbuf_unref(viewer->priv->src_pixbuf);
+        viewer->priv->src_pixbuf = NULL;
     }
-
-    if (time != -1)
+    if (viewer->priv->iter)
     {
-        if (viewer->priv->src_pixbuf)
-        {
-            gdk_pixbuf_unref(viewer->priv->src_pixbuf);
-            viewer->priv->src_pixbuf = NULL;
-        }
         viewer->priv->src_pixbuf = gdk_pixbuf_animation_iter_get_pixbuf(viewer->priv->iter);
-        if (viewer->priv->src_pixbuf)
-        {
-            viewer->priv->src_pixbuf = gdk_pixbuf_copy(viewer->priv->src_pixbuf);
-        }
     }
-    else
+    if (viewer->priv->src_pixbuf)
     {
-        if (viewer->priv->animation)
-        {
-            g_object_unref(viewer->priv->animation);
-            viewer->priv->animation = NULL;
-        }
-        viewer->priv->src_pixbuf = gdk_pixbuf_loader_get_pixbuf(loader);
-        if (viewer->priv->src_pixbuf)
-        {
-            g_object_ref(viewer->priv->src_pixbuf);
-        }
+        viewer->priv->src_pixbuf = gdk_pixbuf_copy(viewer->priv->src_pixbuf);
     }
+
     rstto_picture_viewer_refresh(viewer);
     rstto_picture_viewer_paint(GTK_WIDGET(viewer));
     if (GTK_WIDGET_REALIZED(widget))




More information about the Goodies-commits mailing list