Index: gtk/gtkcalendar.c
===================================================================
RCS file: /cvs/gnome/gtk+/gtk/gtkcalendar.c,v
retrieving revision 1.95
diff -u -p -r1.95 gtkcalendar.c
--- gtk/gtkcalendar.c	4 Oct 2005 13:42:27 -0000	1.95
+++ gtk/gtkcalendar.c	18 Nov 2005 12:03:49 -0000
@@ -2286,9 +2286,6 @@ gtk_calendar_expose (GtkWidget	    *widg
  *           Mouse handling             *
  ****************************************/
 
-#define CALENDAR_INITIAL_TIMER_DELAY    200
-#define CALENDAR_TIMER_DELAY            20
-
 static void
 calendar_arrow_action (GtkCalendar *calendar,
 		       guint        arrow)
@@ -2327,10 +2324,16 @@ calendar_timer (gpointer data)
 
       if (priv->need_timer)
 	{
+          GtkSettings *settings;
+          guint        timeout;
+
+          settings = gtk_widget_get_settings (GTK_WIDGET (calendar));
+          g_object_get (settings, "gtk-timeout-repeat", &timeout, NULL);
+
 	  priv->need_timer = FALSE;
-	  priv->timer = g_timeout_add (CALENDAR_TIMER_DELAY, 
-					       (GSourceFunc) calendar_timer, 
-					       (gpointer) calendar);
+	  priv->timer = g_timeout_add (timeout,
+                                       (GSourceFunc) calendar_timer,
+                                       (gpointer) calendar);
 	}
       else 
 	retval = TRUE;
@@ -2351,8 +2354,14 @@ calendar_start_spinning (GtkCalendar *ca
   
   if (!priv->timer)
     {
+      GtkSettings *settings;
+      guint        timeout;
+
+      settings = gtk_widget_get_settings (GTK_WIDGET (calendar));
+      g_object_get (settings, "gtk-timeout-initial", &timeout, NULL);
+
       priv->need_timer = TRUE;
-      priv->timer = g_timeout_add (CALENDAR_INITIAL_TIMER_DELAY, 
+      priv->timer = g_timeout_add (timeout,
 				   calendar_timer,
 				   calendar);
     }
Index: gtk/gtknotebook.c
===================================================================
RCS file: /cvs/gnome/gtk+/gtk/gtknotebook.c,v
retrieving revision 1.189
diff -u -p -r1.189 gtknotebook.c
--- gtk/gtknotebook.c	13 Sep 2005 19:57:41 -0000	1.189
+++ gtk/gtknotebook.c	18 Nov 2005 12:03:51 -0000
@@ -39,12 +39,11 @@
 #include "gtkalias.h"
 
 
-#define TAB_OVERLAP    2
-#define TAB_CURVATURE  1
-#define ARROW_SIZE     12
-#define ARROW_SPACING  0
-#define NOTEBOOK_INIT_SCROLL_DELAY (200)
-#define NOTEBOOK_SCROLL_DELAY      (100)
+#define TAB_OVERLAP         2
+#define TAB_CURVATURE       1
+#define ARROW_SIZE          12
+#define ARROW_SPACING       0
+#define SCROLL_DELAY_FACTOR 5
 
 
 enum {
@@ -1715,8 +1714,13 @@ gtk_notebook_arrow_button_press (GtkNote
       
       if (!notebook->timer)
 	{
-	  notebook->timer = g_timeout_add (NOTEBOOK_INIT_SCROLL_DELAY, 
-					   (GSourceFunc) gtk_notebook_timer, 
+          GtkSettings *settings = gtk_widget_get_settings (widget);
+          guint        timeout;
+
+          g_object_get (settings, "gtk-timeout-initial", &timeout, NULL);
+
+	  notebook->timer = g_timeout_add (timeout,
+					   (GSourceFunc) gtk_notebook_timer,
 					   (gpointer) notebook);
 	  notebook->need_timer = TRUE;
 	}
@@ -2584,11 +2588,17 @@ gtk_notebook_timer (GtkNotebook *noteboo
     {
       gtk_notebook_do_arrow (notebook, notebook->click_child);
 
-      if (notebook->need_timer) 
+      if (notebook->need_timer)
 	{
+          GtkSettings *settings;
+          guint        timeout;
+
+          settings = gtk_widget_get_settings (GTK_WIDGET (notebook));
+          g_object_get (settings, "gtk-timeout-repeat", &timeout, NULL);
+
 	  notebook->need_timer = FALSE;
-	  notebook->timer = g_timeout_add (NOTEBOOK_SCROLL_DELAY,
-					   (GSourceFunc) gtk_notebook_timer, 
+	  notebook->timer = g_timeout_add (timeout * SCROLL_DELAY_FACTOR,
+					   (GSourceFunc) gtk_notebook_timer,
 					   (gpointer) notebook);
 	}
       else
Index: gtk/gtkpathbar.c
===================================================================
RCS file: /cvs/gnome/gtk+/gtk/gtkpathbar.c,v
retrieving revision 1.47
diff -u -p -r1.47 gtkpathbar.c
--- gtk/gtkpathbar.c	10 Nov 2005 15:17:40 -0000	1.47
+++ gtk/gtkpathbar.c	18 Nov 2005 12:03:52 -0000
@@ -48,8 +48,7 @@ typedef enum {
 
 #define BUTTON_DATA(x) ((ButtonData *)(x))
 
-#define SCROLL_TIMEOUT           150
-#define INITIAL_SCROLL_TIMEOUT   300
+#define SCROLL_DELAY_FACTOR 5
 
 static guint path_bar_signals [LAST_SIGNAL] = { 0 };
 
@@ -739,9 +738,14 @@ gtk_path_bar_scroll_timeout (GtkPathBar 
 
       if (path_bar->need_timer) 
 	{
+          GtkSettings *settings = gtk_widget_get_settings (GTK_WIDGET (path_bar));
+          guint        timeout;
+
+          g_object_get (settings, "gtk-timeout-repeat", &timeout, NULL);
+
 	  path_bar->need_timer = FALSE;
 
-	  path_bar->timer = g_timeout_add (SCROLL_TIMEOUT,
+	  path_bar->timer = g_timeout_add (timeout * SCROLL_DELAY_FACTOR,
 					   (GSourceFunc)gtk_path_bar_scroll_timeout,
 					   path_bar);
 	  
@@ -788,10 +792,17 @@ gtk_path_bar_slider_button_press (GtkWid
       gtk_path_bar_scroll_down (path_bar->down_slider_button, path_bar);
     }
 
+  g_print ("%s: timer = %d\n", G_STRFUNC, path_bar->timer);
+
   if (!path_bar->timer)
     {
+      GtkSettings *settings = gtk_widget_get_settings (widget);
+      guint        timeout;
+
+      g_object_get (settings, "gtk-timeout-initial", &timeout, NULL);
+
       path_bar->need_timer = TRUE;
-      path_bar->timer = g_timeout_add (INITIAL_SCROLL_TIMEOUT,
+      path_bar->timer = g_timeout_add (timeout * 2,
 				       (GSourceFunc)gtk_path_bar_scroll_timeout,
 				       path_bar);
     }
Index: gtk/gtkrange.c
===================================================================
RCS file: /cvs/gnome/gtk+/gtk/gtkrange.c,v
retrieving revision 1.115
diff -u -p -r1.115 gtkrange.c
--- gtk/gtkrange.c	11 Nov 2005 12:48:29 -0000	1.115
+++ gtk/gtkrange.c	18 Nov 2005 12:03:53 -0000
@@ -37,9 +37,8 @@
 #include "gtkprivate.h"
 #include "gtkalias.h"
 
-#define SCROLL_INITIAL_DELAY 250  /* must hold button this long before ... */
-#define SCROLL_LATER_DELAY   100  /* ... it starts repeating at this rate  */
-#define UPDATE_DELAY         300  /* Delay for queued update */
+#define SCROLL_DELAY_FACTOR 5    /* Scroll repeat multiplier */
+#define UPDATE_DELAY        300  /* Delay for queued update */
 
 enum {
   PROP_0,
@@ -2693,14 +2692,18 @@ second_timeout (gpointer data)
 static gboolean
 initial_timeout (gpointer data)
 {
-  GtkRange *range;
+  GtkRange    *range;
+  GtkSettings *settings;
+  guint        timeout;
 
   GDK_THREADS_ENTER ();
+  settings = gtk_widget_get_settings (GTK_WIDGET (data));
+  g_object_get (settings, "gtk-timeout-repeat", &timeout, NULL);
+
   range = GTK_RANGE (data);
-  range->timer->timeout_id = 
-    g_timeout_add (SCROLL_LATER_DELAY,
-                   second_timeout,
-                   range);
+  range->timer->timeout_id = g_timeout_add (timeout * SCROLL_DELAY_FACTOR,
+                                            second_timeout,
+                                            range);
   GDK_THREADS_LEAVE ();
 
   /* remove self */
@@ -2711,15 +2714,20 @@ static void
 gtk_range_add_step_timer (GtkRange      *range,
                           GtkScrollType  step)
 {
+  GtkSettings *settings;
+  guint        timeout;
+
   g_return_if_fail (range->timer == NULL);
   g_return_if_fail (step != GTK_SCROLL_NONE);
-  
+
+  settings = gtk_widget_get_settings (GTK_WIDGET (range));
+  g_object_get (settings, "gtk-timeout-initial", &timeout, NULL);
+
   range->timer = g_new (GtkRangeStepTimer, 1);
 
-  range->timer->timeout_id =
-    g_timeout_add (SCROLL_INITIAL_DELAY,
-                   initial_timeout,
-                   range);
+  range->timer->timeout_id = g_timeout_add (timeout,
+                                            initial_timeout,
+                                            range);
   range->timer->step = step;
 
   gtk_range_scroll (range, range->timer->step);
Index: gtk/gtkspinbutton.c
===================================================================
RCS file: /cvs/gnome/gtk+/gtk/gtkspinbutton.c,v
retrieving revision 1.122
diff -u -p -r1.122 gtkspinbutton.c
--- gtk/gtkspinbutton.c	1 Sep 2005 05:11:42 -0000	1.122
+++ gtk/gtkspinbutton.c	18 Nov 2005 12:03:54 -0000
@@ -43,13 +43,11 @@
 #include "gtkintl.h"
 #include "gtkalias.h"
 
-#define MIN_SPIN_BUTTON_WIDTH              30
-#define SPIN_BUTTON_INITIAL_TIMER_DELAY    200
-#define SPIN_BUTTON_TIMER_DELAY            20
-#define MAX_TIMER_CALLS                    5
-#define EPSILON                            1e-10
-#define	MAX_DIGITS			   20
-#define MIN_ARROW_WIDTH			   6
+#define MIN_SPIN_BUTTON_WIDTH 30
+#define MAX_TIMER_CALLS       5
+#define EPSILON               1e-10
+#define	MAX_DIGITS            20
+#define MIN_ARROW_WIDTH       6
 
 enum {
   PROP_0,
@@ -1050,10 +1048,15 @@ start_spinning (GtkSpinButton *spin,
   
   if (!spin->timer)
     {
+      GtkSettings *settings = gtk_widget_get_settings (GTK_WIDGET (spin));
+      guint        timeout;
+
+      g_object_get (settings, "gtk-timeout-initial", &timeout, NULL);
+
       spin->timer_step = step;
       spin->need_timer = TRUE;
-      spin->timer = g_timeout_add (SPIN_BUTTON_INITIAL_TIMER_DELAY, 
-				   (GSourceFunc) gtk_spin_button_timer, 
+      spin->timer = g_timeout_add (timeout,
+				   (GSourceFunc) gtk_spin_button_timer,
 				   (gpointer) spin);
     }
   gtk_spin_button_real_spin (spin, click_child == GTK_ARROW_UP ? step : -step);
@@ -1203,8 +1206,13 @@ gtk_spin_button_timer (GtkSpinButton *sp
 
       if (spin_button->need_timer)
 	{
+          GtkSettings *settings = gtk_widget_get_settings (GTK_WIDGET (spin_button));
+          guint        timeout;
+
+          g_object_get (settings, "gtk-timeout-repeat", &timeout, NULL);
+
 	  spin_button->need_timer = FALSE;
-	  spin_button->timer = g_timeout_add (SPIN_BUTTON_TIMER_DELAY, 
+	  spin_button->timer = g_timeout_add (timeout,
 					      (GSourceFunc) gtk_spin_button_timer, 
 					      (gpointer) spin_button);
 	}
Index: gtk/gtksettings.c
===================================================================
RCS file: /cvs/gnome/gtk+/gtk/gtksettings.c,v
retrieving revision 1.78
diff -u -p -r1.78 gtksettings.c
--- gtk/gtksettings.c	24 Oct 2005 20:01:57 -0000	1.78
+++ gtk/gtksettings.c	18 Nov 2005 12:03:54 -0000
@@ -32,6 +32,9 @@
 #include "x11/gdkx.h"
 #endif
 
+#define DEFAULT_TIMEOUT_INITIAL 200
+#define DEFAULT_TIMEOUT_REPEAT   20
+
 typedef struct _GtkSettingsValuePrivate GtkSettingsValuePrivate;
 
 typedef enum
@@ -79,7 +82,9 @@ enum {
 #endif
   PROP_ALTERNATIVE_BUTTON_ORDER,
   PROP_SHOW_INPUT_METHOD_MENU,
-  PROP_SHOW_UNICODE_MENU
+  PROP_SHOW_UNICODE_MENU,
+  PROP_TIMEOUT_INITIAL,
+  PROP_TIMEOUT_REPEAT
 };
 
 
@@ -406,6 +411,25 @@ gtk_settings_class_init (GtkSettingsClas
 					     NULL);
   g_assert (result == PROP_SHOW_UNICODE_MENU);
 
+  result = settings_install_property_parser (class,
+					     g_param_spec_int ("gtk-timeout-initial",
+ 							       P_("Start timeout"),
+ 							       P_("Starting value for timeouts, when button is pressed"),
+ 							       0, G_MAXINT, DEFAULT_TIMEOUT_INITIAL,
+ 							       G_PARAM_READWRITE),
+					     NULL);
+
+  g_assert (result == PROP_TIMEOUT_INITIAL);
+
+  result = settings_install_property_parser (class,
+					     g_param_spec_int ("gtk-timeout-repeat",
+ 							       P_("Repeat timeout"),
+ 							       P_("Repeat value for timeouts, when button is pressed"),
+ 							       0, G_MAXINT, DEFAULT_TIMEOUT_REPEAT,
+ 							       G_PARAM_READWRITE),
+					     NULL);
+
+  g_assert (result == PROP_TIMEOUT_REPEAT);
 }
 
 static void
