[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