1 5f084ea0849d5967a3c22821542ecaaa8accb398
2 diff --git a/gtk/gtkrange.c b/gtk/gtkrange.c
3 index bd95351..64e0e59 100644
6 @@ -109,6 +109,8 @@ struct _GtkRangeLayout
7 GtkSensitivityType upper_sensitivity;
11 + guint motion_idle_id;
15 @@ -205,6 +207,8 @@ static gboolean gtk_range_real_change_value (GtkRange *range,
16 static void gtk_range_update_value (GtkRange *range);
17 static gboolean gtk_range_key_press (GtkWidget *range,
19 +static void gtk_range_add_motion_idle (GtkRange *range);
20 +static void gtk_range_remove_motion_idle (GtkRange *range);
23 static guint signals[LAST_SIGNAL];
24 @@ -1167,6 +1171,7 @@ gtk_range_destroy (GtkObject *object)
26 gtk_range_remove_step_timer (range);
27 gtk_range_remove_update_timer (range);
28 + gtk_range_remove_motion_idle (range);
30 if (range->adjustment)
32 @@ -1276,6 +1281,7 @@ gtk_range_unrealize (GtkWidget *widget)
34 gtk_range_remove_step_timer (range);
35 gtk_range_remove_update_timer (range);
36 + gtk_range_remove_motion_idle (range);
38 gdk_window_set_user_data (range->event_window, NULL);
39 gdk_window_destroy (range->event_window);
40 @@ -2165,7 +2171,7 @@ gtk_range_motion_notify (GtkWidget *widget,
41 gtk_widget_queue_draw (widget);
43 if (range->layout->grab_location == MOUSE_SLIDER)
44 - update_slider_position (range, x, y);
45 + gtk_range_add_motion_idle (range);
47 /* We handled the event if the mouse was in the range_rect */
48 return range->layout->mouse_location != MOUSE_OUTSIDE;
49 @@ -3335,9 +3341,10 @@ initial_timeout (gpointer data)
50 g_object_get (settings, "gtk-timeout-repeat", &timeout, NULL);
52 range = GTK_RANGE (data);
53 - range->timer->timeout_id = gdk_threads_add_timeout (timeout * SCROLL_DELAY_FACTOR,
56 + range->timer->timeout_id =
57 + gdk_threads_add_timeout (timeout * SCROLL_DELAY_FACTOR,
63 @@ -3357,9 +3364,8 @@ gtk_range_add_step_timer (GtkRange *range,
65 range->timer = g_new (GtkRangeStepTimer, 1);
67 - range->timer->timeout_id = gdk_threads_add_timeout (timeout,
70 + range->timer->timeout_id =
71 + gdk_threads_add_timeout (timeout, initial_timeout, range);
72 range->timer->step = step;
74 gtk_range_scroll (range, range->timer->step);
75 @@ -3397,9 +3403,8 @@ gtk_range_reset_update_timer (GtkRange *range)
77 gtk_range_remove_update_timer (range);
79 - range->update_timeout_id = gdk_threads_add_timeout (UPDATE_DELAY,
82 + range->update_timeout_id =
83 + gdk_threads_add_timeout (UPDATE_DELAY, update_timeout, range);
87 @@ -3412,5 +3417,40 @@ gtk_range_remove_update_timer (GtkRange *range)
92 +motion_idle (gpointer data)
94 + GtkRange *range = data;
95 + GtkRangeLayout *layout = range->layout;
97 + update_slider_position (range, layout->mouse_x, layout->mouse_y);
99 + layout->motion_idle_id = 0;
105 +gtk_range_add_motion_idle (GtkRange *range)
107 + if (!range->layout->motion_idle_id)
109 + range->layout->motion_idle_id =
110 + gdk_threads_add_idle_full (GDK_PRIORITY_REDRAW,
111 + motion_idle, range,
117 +gtk_range_remove_motion_idle (GtkRange *range)
119 + if (range->layout->motion_idle_id != 0)
121 + g_source_remove (range->layout->motion_idle_id);
122 + range->layout->motion_idle_id = 0;
126 #define __GTK_RANGE_C__
127 #include "gtkaliasdef.c"