Index: gtk/gtkimage.c
===================================================================
RCS file: /cvs/gnome/gtk+/gtk/gtkimage.c,v
retrieving revision 1.72
diff -u -p -r1.72 gtkimage.c
--- gtk/gtkimage.c	30 Sep 2005 15:40:55 -0000	1.72
+++ gtk/gtkimage.c	14 Nov 2005 15:46:56 -0000
@@ -1396,8 +1396,11 @@ animation_timeout (gpointer data)
       g_timeout_add (gdk_pixbuf_animation_iter_get_delay_time (image->data.anim.iter),
                      animation_timeout,
                      image);
-  
+
   gtk_widget_queue_draw (GTK_WIDGET (image));
+
+  if (GTK_WIDGET_DRAWABLE (image))
+    gdk_window_process_updates (GTK_WIDGET (image)->window, TRUE);
 
   GDK_THREADS_LEAVE ();
 
Index: tests/testimage.c
===================================================================
RCS file: /cvs/gnome/gtk+/tests/testimage.c,v
retrieving revision 1.1
diff -u -p -r1.1 testimage.c
--- tests/testimage.c	25 Oct 2004 04:36:39 -0000	1.1
+++ tests/testimage.c	14 Nov 2005 15:46:56 -0000
@@ -68,6 +68,30 @@ drag_data_received (GtkWidget        *wi
   gtk_image_set_from_pixbuf (GTK_IMAGE (image), pixbuf);
 }
 
+static gboolean
+idle_func (gpointer data)
+{
+  g_print ("keep me busy\n");
+
+  return TRUE;
+}
+
+static gboolean
+anim_image_expose (GtkWidget      *widget,
+                   GdkEventExpose *eevent,
+                   gpointer        data)
+{
+  g_print ("start busyness\n");
+
+  g_signal_handlers_disconnect_by_func (widget, anim_image_expose, data);
+
+  /* produce high load */
+  g_idle_add_full (G_PRIORITY_DEFAULT,
+                   idle_func, NULL, NULL);
+
+  return FALSE;
+}
+
 int
 main (int argc, char **argv)
 {
@@ -78,14 +102,18 @@ main (int argc, char **argv)
   GtkIconSet *iconset;
   GtkIconSource *iconsource;
   gchar *icon_name = "gnome-terminal";
-  
+  gchar *anim_filename = NULL;
+
   gtk_init (&argc, &argv);
 
   if (argc > 1)
     icon_name = argv[1];
 
+  if (argc > 2)
+    anim_filename = argv[2];
+
   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
-  table = gtk_table_new (4, 3, FALSE);
+  table = gtk_table_new (6, 3, FALSE);
   gtk_container_add (GTK_CONTAINER (window), table);
 
   label = gtk_label_new ("symbolic size");
@@ -144,7 +172,21 @@ main (int argc, char **argv)
   image = gtk_image_new_from_icon_name (icon_name, GTK_ICON_SIZE_DIALOG);
   gtk_image_set_pixel_size (GTK_IMAGE (image), 30);
   gtk_table_attach_defaults (GTK_TABLE (table), image, 2, 3, 4, 5);
-		   
+
+  if (anim_filename)
+    {
+      label = gtk_label_new ("GTK_IMAGE_ANIMATION (from file)");
+      gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 5, 6);
+      image = gtk_image_new_from_file (anim_filename);
+      gtk_image_set_pixel_size (GTK_IMAGE (image), 30);
+      gtk_table_attach_defaults (GTK_TABLE (table), image, 2, 3, 5, 6);
+
+      /* produce high load */
+      g_signal_connect_after (image, "expose-event",
+                              G_CALLBACK (anim_image_expose),
+                              NULL);
+    }
+
   gtk_widget_show_all (window);
 
   gtk_main ();
