From 11a88edb28cdc0aa183fb8aad2deb3c4bbd132ca Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Wed, 21 Nov 2007 04:56:50 +0000 Subject: [PATCH] Avoid drawing one too many frames. (#107398, Owen Taylor, Miguel Gomez) 2007-11-20 Matthias Clasen * gtk/gtkimage.c (animation_timeout): Avoid drawing one too many frames. (#107398, Owen Taylor, Miguel Gomez) svn path=/trunk/; revision=19017 --- ChangeLog | 5 +++++ gtk/gtkimage.c | 18 ++++++++++-------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3e59bbcf78..0de9e60913 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2007-11-20 Matthias Clasen + + * gtk/gtkimage.c (animation_timeout): Avoid drawing one too many + frames. (#107398, Owen Taylor, Miguel Gomez) + Tue Nov 20 15:19:42 2007 +0100 Tim Janik Moved Gdk test functions from Gtk+ to Gdk test utils. diff --git a/gtk/gtkimage.c b/gtk/gtkimage.c index a4012b90e5..43c442613d 100644 --- a/gtk/gtkimage.c +++ b/gtk/gtkimage.c @@ -1342,6 +1342,7 @@ static gint animation_timeout (gpointer data) { GtkImage *image; + int delay; image = GTK_IMAGE (data); @@ -1349,16 +1350,17 @@ animation_timeout (gpointer data) gdk_pixbuf_animation_iter_advance (image->data.anim.iter, NULL); - if (gdk_pixbuf_animation_iter_get_delay_time (image->data.anim.iter) >= 0) - image->data.anim.frame_timeout = - gdk_threads_add_timeout (gdk_pixbuf_animation_iter_get_delay_time (image->data.anim.iter), - animation_timeout, - image); + delay = gdk_pixbuf_animation_iter_get_delay_time (image->data.anim.iter); + if (delay >= 0) + { + image->data.anim.frame_timeout = + gdk_threads_add_timeout (delay, animation_timeout, image); - gtk_widget_queue_draw (GTK_WIDGET (image)); + gtk_widget_queue_draw (GTK_WIDGET (image)); - if (GTK_WIDGET_DRAWABLE (image)) - gdk_window_process_updates (GTK_WIDGET (image)->window, TRUE); + if (GTK_WIDGET_DRAWABLE (image)) + gdk_window_process_updates (GTK_WIDGET (image)->window, TRUE); + } return FALSE; }