Index: gtk/gtkrange.c
===================================================================
RCS file: /cvs/gnome/gtk+/gtk/gtkrange.c,v
retrieving revision 1.95
diff -u -r1.95 gtkrange.c
--- gtk/gtkrange.c	16 Jan 2004 23:09:33 -0000	1.95
+++ gtk/gtkrange.c	3 Feb 2004 00:11:18 -0000
@@ -47,6 +47,7 @@
   VALUE_CHANGED,
   ADJUST_BOUNDS,
   MOVE_SLIDER,
+  SLIDER_MOVED,
   LAST_SIGNAL
 };
 
@@ -170,7 +171,8 @@
 static GdkRectangle* get_area                           (GtkRange      *range,
                                                          MouseLocation  location);
 static void          gtk_range_internal_set_value       (GtkRange      *range,
-                                                         gdouble        value);
+                                                         gdouble        value,
+                                                         GtkScrollType  step);
 static void          gtk_range_update_value             (GtkRange      *range);
 
 
@@ -275,6 +277,16 @@
                   G_TYPE_NONE, 1,
                   GTK_TYPE_SCROLL_TYPE);
   
+  signals[SLIDER_MOVED] =
+    g_signal_new ("slider_moved",
+                  G_TYPE_FROM_CLASS (gobject_class),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (GtkRangeClass, slider_moved),
+                  NULL, NULL,
+                  _gtk_marshal_VOID__ENUM,
+                  G_TYPE_NONE, 1,
+                  GTK_TYPE_SCROLL_TYPE);
+
   g_object_class_install_property (gobject_class,
                                    PROP_UPDATE_POLICY,
                                    g_param_spec_enum ("update_policy",
@@ -1316,7 +1328,7 @@
 
   new_value = coord_to_value (range, c);
   
-  gtk_range_internal_set_value (range, new_value);
+  gtk_range_internal_set_value (range, new_value, GTK_SCROLL_JUMP);
 }
 
 static void stop_scrolling (GtkRange *range)
@@ -1381,7 +1393,7 @@
       if (range->inverted)
 	increment = -increment;
 	  
-      gtk_range_internal_set_value (range, adj->value + increment);
+      gtk_range_internal_set_value (range, adj->value + increment, GTK_SCROLL_JUMP);
 
       /* Policy DELAYED makes sense with scroll events,
        * but DISCONTINUOUS doesn't, so we update immediately
@@ -1523,7 +1535,7 @@
   gdouble newval;
   
   newval = range->adjustment->value - range->adjustment->step_increment;
-  gtk_range_internal_set_value (range, newval);
+  gtk_range_internal_set_value (range, newval, GTK_SCROLL_STEP_BACKWARD);
 }
 
 static void
@@ -1532,7 +1544,7 @@
   gdouble newval;
 
   newval = range->adjustment->value + range->adjustment->step_increment;
-  gtk_range_internal_set_value (range, newval);
+  gtk_range_internal_set_value (range, newval, GTK_SCROLL_STEP_FORWARD);
 }
 
 
@@ -1542,7 +1554,7 @@
   gdouble newval;
 
   newval = range->adjustment->value - range->adjustment->page_increment;
-  gtk_range_internal_set_value (range, newval);
+  gtk_range_internal_set_value (range, newval, GTK_SCROLL_PAGE_BACKWARD);
 }
 
 static void
@@ -1551,13 +1563,13 @@
   gdouble newval;
 
   newval = range->adjustment->value + range->adjustment->page_increment;
-  gtk_range_internal_set_value (range, newval);
+  gtk_range_internal_set_value (range, newval, GTK_SCROLL_PAGE_FORWARD);
 }
 
 static void
 scroll_begin (GtkRange *range)
 {
-  gtk_range_internal_set_value (range, range->adjustment->lower);
+  gtk_range_internal_set_value (range, range->adjustment->lower, GTK_SCROLL_START);
 }
 
 static void
@@ -1566,7 +1578,7 @@
   gdouble newval;
 
   newval = range->adjustment->upper - range->adjustment->page_size;
-  gtk_range_internal_set_value (range, newval);
+  gtk_range_internal_set_value (range, newval, GTK_SCROLL_END);
 }
 
 static void
@@ -2291,8 +2303,9 @@
 }
 
 static void
-gtk_range_internal_set_value (GtkRange *range,
-                              gdouble   value)
+gtk_range_internal_set_value (GtkRange     *range,
+                              gdouble       value,
+                              GtkScrollType step)
 {
   /* potentially adjust the bounds _before we clamp */
   g_signal_emit (range, signals[ADJUST_BOUNDS], 0, value);
@@ -2334,6 +2347,7 @@
           range->update_pending = TRUE;
           break;
         }
+      g_signal_emit (range, signals[SLIDER_MOVED], 0, step);
     }
 }
 
Index: gtk/gtkrange.h
===================================================================
RCS file: /cvs/gnome/gtk+/gtk/gtkrange.h,v
retrieving revision 1.27
diff -u -r1.27 gtkrange.h
--- gtk/gtkrange.h	8 Nov 2002 19:41:43 -0000	1.27
+++ gtk/gtkrange.h	3 Feb 2004 00:11:18 -0000
@@ -120,8 +120,10 @@
   void (* get_range_border) (GtkRange     *range,
                              GtkBorder    *border_);
 
+  void (* slider_moved)     (GtkRange     *range,
+                             GtkScrollType scroll);
+
   /* Padding for future expansion */
-  void (*_gtk_reserved1) (void);
   void (*_gtk_reserved2) (void);
   void (*_gtk_reserved3) (void);
   void (*_gtk_reserved4) (void);
