Index: gtk/gtksettings.c
===================================================================
RCS file: /cvs/gnome/gtk+/gtk/gtksettings.c,v
retrieving revision 1.81
diff -u -p -r1.81 gtksettings.c
--- gtk/gtksettings.c	23 Nov 2005 17:11:35 -0000	1.81
+++ gtk/gtksettings.c	25 Nov 2005 12:54:46 -0000
@@ -85,7 +85,8 @@ enum {
   PROP_SHOW_UNICODE_MENU,
   PROP_TIMEOUT_INITIAL,
   PROP_TIMEOUT_REPEAT,
-  PROP_COLOR_SCHEME
+  PROP_COLOR_SCHEME,
+  PROP_ENABLE_ANIMATIONS
 };
 
 
@@ -458,6 +459,16 @@ gtk_settings_class_init (GtkSettingsClas
 					     NULL);
 
   g_assert (result == PROP_COLOR_SCHEME);
+
+  result = settings_install_property_parser (class,
+                                             g_param_spec_boolean ("gtk-enable-animations",
+                                                                   P_("Enable Animations"),
+                                                                   P_("Whether to enable toolkit-wide animations."),
+                                                                   TRUE,
+                                                                   GTK_PARAM_READWRITE),
+                                             NULL);
+
+  g_assert (result == PROP_ENABLE_ANIMATIONS);
 }
 
 static void
Index: gtk/gtktoolbar.c
===================================================================
RCS file: /cvs/gnome/gtk+/gtk/gtktoolbar.c,v
retrieving revision 1.174
diff -u -p -r1.174 gtktoolbar.c
--- gtk/gtktoolbar.c	24 Nov 2005 16:51:22 -0000	1.174
+++ gtk/gtktoolbar.c	25 Nov 2005 12:54:46 -0000
@@ -67,6 +67,7 @@ typedef struct _ToolbarContent ToolbarCo
 
 #define DEFAULT_ICON_SIZE GTK_ICON_SIZE_LARGE_TOOLBAR
 #define DEFAULT_TOOLBAR_STYLE GTK_TOOLBAR_BOTH
+#define DEFAULT_ANIMATION_STATE TRUE
 
 #define MAX_HOMOGENEOUS_N_CHARS 13 /* Items that are wider than this do not participate
 				    * in the homogeneous game. In units of
@@ -145,11 +146,13 @@ struct _GtkToolbarPrivate
 
   gulong        style_set_connection;
   gulong        icon_size_connection;
+  gulong        animation_connection;
 
   guint		show_arrow : 1;
   guint		need_sync : 1;
   guint		is_sliding : 1;
   guint		need_rebuild : 1;	/* whether the overflow menu should be regenerated */
+  guint         animation : 1;
 };
 
 static void       gtk_toolbar_init                 (GtkToolbar          *toolbar);
@@ -658,7 +661,7 @@ gtk_toolbar_class_init (GtkToolbarClass 
                                                     GTK_TYPE_ICON_SIZE,
                                                     DEFAULT_ICON_SIZE,
                                                     GTK_PARAM_READWRITE));  
-  
+
   binding_set = gtk_binding_set_by_class (klass);
   
   add_arrow_bindings (binding_set, GDK_Left, GTK_DIR_LEFT);
@@ -698,6 +701,7 @@ gtk_toolbar_init (GtkToolbar *toolbar)
   toolbar->orientation = GTK_ORIENTATION_HORIZONTAL;
   toolbar->style = DEFAULT_TOOLBAR_STYLE;
   toolbar->icon_size = DEFAULT_ICON_SIZE;
+  priv->animation = DEFAULT_ANIMATION_STATE;
   toolbar->tooltips = gtk_tooltips_new ();
   g_object_ref_sink (toolbar->tooltips);
   
@@ -1040,10 +1044,16 @@ gtk_toolbar_size_request (GtkWidget     
 }
 
 static gint
-position (gint from, gint to, gdouble elapsed)
+position (GtkToolbar *toolbar,
+          gint        from,
+          gint        to,
+          gdouble     elapsed)
 {
   gint n_pixels;
 
+  if (! GTK_TOOLBAR_GET_PRIVATE (toolbar)->animation)
+    return to;
+
   if (elapsed <= ACCEL_THRESHOLD)
     {
       n_pixels = SLIDE_SPEED * elapsed;
@@ -1058,7 +1068,7 @@ position (gint from, gint to, gdouble el
       n_pixels = (SLIDE_SPEED / ACCEL_THRESHOLD) * elapsed * elapsed -
 	SLIDE_SPEED * elapsed + SLIDE_SPEED * ACCEL_THRESHOLD;
     }
-  
+
   if (to > from)
     return MIN (from + n_pixels, to);
   else
@@ -1073,13 +1083,15 @@ compute_intermediate_allocation (GtkTool
 {
   GtkToolbarPrivate *priv = GTK_TOOLBAR_GET_PRIVATE (toolbar);
   gdouble elapsed = g_timer_elapsed (priv->timer, NULL);
-  
-  intermediate->x = position (start->x, goal->x, elapsed);
-  intermediate->y = position (start->y, goal->y, elapsed);
-  intermediate->width =
-    position (start->x + start->width, goal->x + goal->width, elapsed) - intermediate->x;
-  intermediate->height =
-    position (start->y + start->height, goal->y + goal->height, elapsed) - intermediate->y;
+
+  intermediate->x      = position (toolbar, start->x, goal->x, elapsed);
+  intermediate->y      = position (toolbar, start->y, goal->y, elapsed);
+  intermediate->width  = position (toolbar, start->x + start->width,
+                                   goal->x + goal->width,
+                                   elapsed) - intermediate->x;
+  intermediate->height = position (toolbar, start->y + start->height,
+                                   goal->y + goal->height,
+                                   elapsed) - intermediate->y;
 }
 
 static void
@@ -1990,6 +2002,13 @@ gtk_toolbar_focus (GtkWidget        *wid
   return result;
 }
 
+static GtkSettings *
+toolbar_get_settings (GtkToolbar *toolbar)
+{
+  GtkToolbarPrivate *priv = GTK_TOOLBAR_GET_PRIVATE (toolbar);
+  return priv->settings;
+}
+
 static void
 style_change_notify (GtkToolbar *toolbar)
 {
@@ -2012,11 +2031,21 @@ icon_size_change_notify (GtkToolbar *too
     }
 }
 
-static GtkSettings *
-toolbar_get_settings (GtkToolbar *toolbar)
+static void
+animation_change_notify (GtkToolbar *toolbar)
 {
   GtkToolbarPrivate *priv = GTK_TOOLBAR_GET_PRIVATE (toolbar);
-  return priv->settings;
+  GtkSettings *settings = toolbar_get_settings (toolbar);
+  gboolean animation;
+
+  if (settings)
+    g_object_get (settings,
+                  "gtk-enable-animations", &animation,
+                  NULL);
+  else
+    animation = DEFAULT_ANIMATION_STATE;
+
+  priv->animation = animation;
 }
 
 static void
@@ -2040,6 +2069,7 @@ gtk_toolbar_screen_changed (GtkWidget *w
     {
       g_signal_handler_disconnect (old_settings, priv->style_set_connection);
       g_signal_handler_disconnect (old_settings, priv->icon_size_connection);
+      g_signal_handler_disconnect (old_settings, priv->animation_connection);
 
       g_object_unref (old_settings);
     }
@@ -2056,15 +2086,20 @@ gtk_toolbar_screen_changed (GtkWidget *w
 				  "notify::gtk-toolbar-icon-size",
 				  G_CALLBACK (icon_size_change_notify),
 				  toolbar);
-      
-      g_object_ref (settings);
-      priv->settings = settings;
+      priv->animation_connection =
+        g_signal_connect_swapped (settings,
+                                  "notify::gtk-enable-animations",
+                                  G_CALLBACK (animation_change_notify),
+                                  toolbar);
+
+      priv->settings = g_object_ref (settings);
     }
   else
     priv->settings = NULL;
-  
+
   style_change_notify (toolbar);
   icon_size_change_notify (toolbar);
+  animation_change_notify (toolbar);
 }
 
 static int
