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

Stephan Arts stephan at xfce.org
Sat Oct 13 16:54:02 CEST 2007


Author: stephan
Date: 2007-10-13 14:54:02 +0000 (Sat, 13 Oct 2007)
New Revision: 3370

Modified:
   ristretto/trunk/src/picture_viewer.c
Log:
Fix memory leak



Modified: ristretto/trunk/src/picture_viewer.c
===================================================================
--- ristretto/trunk/src/picture_viewer.c	2007-10-13 09:41:37 UTC (rev 3369)
+++ ristretto/trunk/src/picture_viewer.c	2007-10-13 14:54:02 UTC (rev 3370)
@@ -709,6 +709,11 @@
             g_signal_handlers_disconnect_by_func(viewer->priv->loader , cb_rstto_picture_viewer_area_updated, viewer);
             gdk_pixbuf_loader_close(viewer->priv->loader, NULL);
             g_object_unref(viewer->priv->loader);
+            if(viewer->priv->animation)
+            {
+                g_object_unref(viewer->priv->animation);
+                viewer->priv->animation = NULL;
+            }
         }
         viewer->priv->loader = gdk_pixbuf_loader_new();
 
@@ -829,8 +834,10 @@
     viewer->priv->animation = gdk_pixbuf_loader_get_animation(loader);
     viewer->priv->iter = gdk_pixbuf_animation_get_iter(viewer->priv->animation, NULL);
     if (viewer->priv->src_pixbuf)
+    {
         gdk_pixbuf_unref(viewer->priv->src_pixbuf);
-    viewer->priv->src_pixbuf = NULL;
+        viewer->priv->src_pixbuf = NULL;
+    }
 
     gint time = gdk_pixbuf_animation_iter_get_delay_time(viewer->priv->iter);
 
@@ -880,17 +887,40 @@
 static void
 cb_rstto_picture_viewer_closed(GdkPixbufLoader *loader, RsttoPictureViewer *viewer)
 {
+    gint time = -1;
+
     GtkWidget *widget = GTK_WIDGET(viewer);
-
-    if (viewer->priv->src_pixbuf)
-        gdk_pixbuf_unref(viewer->priv->src_pixbuf);
     if (viewer->priv->iter)
-        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);
+        time = gdk_pixbuf_animation_iter_get_delay_time(viewer->priv->iter);
+    }
 
+    if (time != -1)
+    {
+        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->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);
+        }
+    }
     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