Annotation of /trunk/gtk2+/patches/gtk+-2-smoothscroll-r6.patch
Parent Directory | Revision Log
Revision 144 -
(hide annotations)
(download)
Tue May 8 20:06:05 2007 UTC (17 years, 4 months ago) by niro
File size: 18162 byte(s)
Tue May 8 20:06:05 2007 UTC (17 years, 4 months ago) by niro
File size: 18162 byte(s)
-import
1 | niro | 144 | diff -x '*.orig' -uNr gtk+-2.7.1/gdk/gdk.symbols gtk+-2.7.1.patched/gdk/gdk.symbols |
2 | --- gtk+-2.7.1/gdk/gdk.symbols 2005-06-21 06:09:51.000000000 +0200 | ||
3 | +++ gtk+-2.7.1.patched/gdk/gdk.symbols 2005-07-02 13:17:35.000000000 +0200 | ||
4 | @@ -653,6 +653,7 @@ | ||
5 | gdk_window_get_toplevel | ||
6 | gdk_window_get_toplevels | ||
7 | gdk_window_get_update_area | ||
8 | +gdk_window_get_update_serial | ||
9 | gdk_window_get_user_data | ||
10 | gdk_window_get_window_type | ||
11 | gdk_window_invalidate_maybe_recurse | ||
12 | diff -x '*.orig' -uNr gtk+-2.7.1/gdk/gdkwindow.c gtk+-2.7.1.patched/gdk/gdkwindow.c | ||
13 | --- gtk+-2.7.1/gdk/gdkwindow.c 2005-06-16 07:18:33.000000000 +0200 | ||
14 | +++ gtk+-2.7.1.patched/gdk/gdkwindow.c 2005-07-02 13:17:35.000000000 +0200 | ||
15 | @@ -2131,6 +2131,7 @@ | ||
16 | static GSList *update_windows = NULL; | ||
17 | static guint update_idle = 0; | ||
18 | static gboolean debug_updates = FALSE; | ||
19 | +static gint update_serial = 1; | ||
20 | |||
21 | static gboolean | ||
22 | gdk_window_update_idle (gpointer data) | ||
23 | @@ -2177,6 +2178,8 @@ | ||
24 | GdkRegion *window_region; | ||
25 | gint width, height; | ||
26 | |||
27 | + ++update_serial; | ||
28 | + | ||
29 | if (debug_updates) | ||
30 | { | ||
31 | /* Make sure we see the red invalid area before redrawing. */ | ||
32 | @@ -2250,6 +2253,7 @@ | ||
33 | void | ||
34 | gdk_window_process_all_updates (void) | ||
35 | { | ||
36 | + gboolean retval = FALSE; | ||
37 | GSList *old_update_windows = update_windows; | ||
38 | GSList *tmp_list = update_windows; | ||
39 | |||
40 | @@ -2259,6 +2263,9 @@ | ||
41 | update_windows = NULL; | ||
42 | update_idle = 0; | ||
43 | |||
44 | + if (old_update_windows) | ||
45 | + retval = TRUE; | ||
46 | + | ||
47 | g_slist_foreach (old_update_windows, (GFunc)g_object_ref, NULL); | ||
48 | |||
49 | while (tmp_list) | ||
50 | @@ -2495,6 +2502,12 @@ | ||
51 | gdk_region_destroy (visible_region); | ||
52 | } | ||
53 | |||
54 | +gint | ||
55 | +gdk_window_get_update_serial (void) | ||
56 | +{ | ||
57 | + return update_serial; | ||
58 | +} | ||
59 | + | ||
60 | static gboolean | ||
61 | true_predicate (GdkWindow *window, | ||
62 | gpointer user_data) | ||
63 | diff -x '*.orig' -uNr gtk+-2.7.1/gdk/gdkwindow.h gtk+-2.7.1.patched/gdk/gdkwindow.h | ||
64 | --- gtk+-2.7.1/gdk/gdkwindow.h 2005-06-21 06:09:51.000000000 +0200 | ||
65 | +++ gtk+-2.7.1.patched/gdk/gdkwindow.h 2005-07-02 13:17:35.000000000 +0200 | ||
66 | @@ -549,6 +549,7 @@ | ||
67 | void gdk_window_freeze_updates (GdkWindow *window); | ||
68 | void gdk_window_thaw_updates (GdkWindow *window); | ||
69 | |||
70 | +gint gdk_window_get_update_serial (void); | ||
71 | void gdk_window_process_all_updates (void); | ||
72 | void gdk_window_process_updates (GdkWindow *window, | ||
73 | gboolean update_children); | ||
74 | diff -x '*.orig' -uNr gtk+-2.7.1/gtk/gtk.symbols gtk+-2.7.1.patched/gtk/gtk.symbols | ||
75 | --- gtk+-2.7.1/gtk/gtk.symbols 2005-06-20 20:19:33.000000000 +0200 | ||
76 | +++ gtk+-2.7.1.patched/gtk/gtk.symbols 2005-07-02 13:17:35.000000000 +0200 | ||
77 | @@ -186,10 +186,19 @@ | ||
78 | #if IN_FILE(__GTK_ADJUSTMENT_C__) | ||
79 | gtk_adjustment_changed | ||
80 | gtk_adjustment_clamp_page | ||
81 | +gtk_adjustment_end | ||
82 | gtk_adjustment_get_type G_GNUC_CONST | ||
83 | gtk_adjustment_get_value | ||
84 | +gtk_adjustment_goto_value | ||
85 | +gtk_adjustment_home | ||
86 | gtk_adjustment_new | ||
87 | +gtk_adjustment_page_down | ||
88 | +gtk_adjustment_page_up | ||
89 | gtk_adjustment_set_value | ||
90 | +gtk_adjustment_step_down | ||
91 | +gtk_adjustment_step_up | ||
92 | +gtk_adjustment_wheel_down | ||
93 | +gtk_adjustment_wheel_up | ||
94 | gtk_adjustment_value_changed | ||
95 | #endif | ||
96 | #endif | ||
97 | diff -x '*.orig' -uNr gtk+-2.7.1/gtk/gtkadjustment.c gtk+-2.7.1.patched/gtk/gtkadjustment.c | ||
98 | --- gtk+-2.7.1/gtk/gtkadjustment.c 2005-03-26 06:49:14.000000000 +0100 | ||
99 | +++ gtk+-2.7.1.patched/gtk/gtkadjustment.c 2005-07-02 13:17:35.000000000 +0200 | ||
100 | @@ -25,6 +25,7 @@ | ||
101 | */ | ||
102 | |||
103 | #include <config.h> | ||
104 | +#include <math.h> | ||
105 | #include "gtkadjustment.h" | ||
106 | #include "gtkmarshalers.h" | ||
107 | #include "gtkprivate.h" | ||
108 | @@ -49,9 +50,19 @@ | ||
109 | }; | ||
110 | |||
111 | |||
112 | -static void gtk_adjustment_class_init (GtkAdjustmentClass *klass); | ||
113 | -static void gtk_adjustment_init (GtkAdjustment *adjustment); | ||
114 | +typedef struct _GtkAdjustmentPrivate GtkAdjustmentPrivate; | ||
115 | +struct _GtkAdjustmentPrivate | ||
116 | +{ | ||
117 | + GTimer *timer; | ||
118 | + gdouble start_value; | ||
119 | + gdouble goal_value; | ||
120 | + guint idle_id; | ||
121 | +}; | ||
122 | |||
123 | +static void gtk_adjustment_private_finalize (GtkAdjustmentPrivate *private); | ||
124 | +static void gtk_adjustment_class_init (GtkAdjustmentClass *klass); | ||
125 | +static void gtk_adjustment_init (GtkAdjustment *adjustment); | ||
126 | +static GtkAdjustmentPrivate *gtk_adjustment_get_private (GtkAdjustment *adjustment); | ||
127 | static void gtk_adjustment_get_property (GObject *object, | ||
128 | guint prop_id, | ||
129 | GValue *value, | ||
130 | @@ -211,7 +222,6 @@ | ||
131 | 0.0, | ||
132 | GTK_PARAM_READWRITE)); | ||
133 | |||
134 | - | ||
135 | adjustment_signals[CHANGED] = | ||
136 | g_signal_new ("changed", | ||
137 | G_OBJECT_CLASS_TYPE (class), | ||
138 | @@ -241,6 +251,44 @@ | ||
139 | adjustment->page_size = 0.0; | ||
140 | } | ||
141 | |||
142 | +static GtkAdjustmentPrivate * | ||
143 | +gtk_adjustment_get_private (GtkAdjustment *adjustment) | ||
144 | +{ | ||
145 | + GtkAdjustmentPrivate *private; | ||
146 | + static GQuark private_quark = 0; | ||
147 | + | ||
148 | + if (!private_quark) | ||
149 | + private_quark = g_quark_from_static_string ("gtk-adjustment-private"); | ||
150 | + | ||
151 | + private = g_object_get_qdata (G_OBJECT (adjustment), private_quark); | ||
152 | + | ||
153 | + if (!private) | ||
154 | + { | ||
155 | + private = g_new0 (GtkAdjustmentPrivate, 1); | ||
156 | + | ||
157 | + private->timer = g_timer_new (); | ||
158 | + private->start_value = 0.0; | ||
159 | + private->goal_value = 0.0; | ||
160 | + private->idle_id = 0; | ||
161 | + | ||
162 | + g_object_set_qdata_full (G_OBJECT (adjustment), private_quark, | ||
163 | + private, | ||
164 | + (GDestroyNotify) gtk_adjustment_private_finalize); | ||
165 | + } | ||
166 | + | ||
167 | + return private; | ||
168 | +} | ||
169 | + | ||
170 | +static void | ||
171 | +gtk_adjustment_private_finalize (GtkAdjustmentPrivate *private) | ||
172 | +{ | ||
173 | + if (private->idle_id) | ||
174 | + g_source_remove (private->idle_id); | ||
175 | + | ||
176 | + g_timer_destroy (private->timer); | ||
177 | + g_free (private); | ||
178 | +} | ||
179 | + | ||
180 | static void | ||
181 | gtk_adjustment_get_property (GObject *object, guint prop_id, GValue *value, | ||
182 | GParamSpec *pspec) | ||
183 | @@ -385,12 +433,26 @@ | ||
184 | g_signal_emit (adjustment, adjustment_signals[CHANGED], 0); | ||
185 | } | ||
186 | |||
187 | +static void | ||
188 | +gtk_adjustment_value_changed_unchecked (GtkAdjustment *adjustment) | ||
189 | +{ | ||
190 | + g_signal_emit (adjustment, adjustment_signals[VALUE_CHANGED], 0); | ||
191 | +} | ||
192 | + | ||
193 | void | ||
194 | gtk_adjustment_value_changed (GtkAdjustment *adjustment) | ||
195 | { | ||
196 | + GtkAdjustmentPrivate *priv; | ||
197 | + | ||
198 | g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment)); | ||
199 | |||
200 | - g_signal_emit (adjustment, adjustment_signals[VALUE_CHANGED], 0); | ||
201 | + priv = gtk_adjustment_get_private (adjustment); | ||
202 | + if (priv->idle_id) | ||
203 | + { | ||
204 | + g_source_remove (priv->idle_id); | ||
205 | + priv->idle_id = 0; | ||
206 | + } | ||
207 | + gtk_adjustment_value_changed_unchecked (adjustment); | ||
208 | g_object_notify (G_OBJECT (adjustment), "value"); | ||
209 | } | ||
210 | |||
211 | @@ -423,5 +485,173 @@ | ||
212 | gtk_adjustment_value_changed (adjustment); | ||
213 | } | ||
214 | |||
215 | +#define UPDATE_TIME 0.1 | ||
216 | + | ||
217 | +static gboolean | ||
218 | +adjustment_update_idle (gpointer data) | ||
219 | +{ | ||
220 | + GtkAdjustment *adj = data; | ||
221 | + GtkAdjustmentPrivate *priv = gtk_adjustment_get_private (adj); | ||
222 | + | ||
223 | + gdouble new_value; | ||
224 | + gdouble elapsed = g_timer_elapsed (priv->timer, NULL); | ||
225 | + | ||
226 | + GDK_THREADS_ENTER(); | ||
227 | + | ||
228 | + new_value = priv->start_value + | ||
229 | + (elapsed / UPDATE_TIME) * (priv->goal_value - priv->start_value); | ||
230 | + | ||
231 | + /* make sure new_value is betweeen start_value and goal_value */ | ||
232 | + if (!((new_value >= priv->start_value && new_value <= priv->goal_value) || | ||
233 | + (new_value <= priv->start_value && new_value >= priv->goal_value))) | ||
234 | + { | ||
235 | + new_value = priv->goal_value; | ||
236 | + } | ||
237 | + | ||
238 | + if (new_value > adj->upper - adj->page_size) | ||
239 | + new_value = adj->upper - adj->page_size; | ||
240 | + | ||
241 | + if (new_value < adj->lower) | ||
242 | + new_value = adj->lower; | ||
243 | + | ||
244 | + if (new_value != adj->value) | ||
245 | + { | ||
246 | + gint update_serial_before = gdk_window_get_update_serial(); | ||
247 | + | ||
248 | + adj->value = new_value; | ||
249 | + | ||
250 | + gtk_adjustment_value_changed_unchecked (adj); | ||
251 | + | ||
252 | + /* if anything was drawn during the signal emission, synchronize | ||
253 | + * with the X server to avoid swamping it with updates | ||
254 | + */ | ||
255 | + gdk_window_process_all_updates (); | ||
256 | + if (update_serial_before != gdk_window_get_update_serial()) | ||
257 | + gdk_flush (); | ||
258 | + } | ||
259 | + | ||
260 | + if (adj->value == priv->goal_value || | ||
261 | + adj->value == adj->lower || | ||
262 | + adj->value == adj->upper - adj->page_size) | ||
263 | + { | ||
264 | + priv->idle_id = 0; | ||
265 | + | ||
266 | + GDK_THREADS_LEAVE(); | ||
267 | + return FALSE; | ||
268 | + } | ||
269 | + | ||
270 | + GDK_THREADS_LEAVE(); | ||
271 | + return TRUE; | ||
272 | +} | ||
273 | + | ||
274 | +static void | ||
275 | +gtk_adjustment_change_value (GtkAdjustment *adjustment, | ||
276 | + gdouble delta) | ||
277 | +{ | ||
278 | + GtkAdjustmentPrivate *priv; | ||
279 | + | ||
280 | + g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment)); | ||
281 | + | ||
282 | + priv = gtk_adjustment_get_private (adjustment); | ||
283 | + | ||
284 | + if (delta > -1 && delta < 1) | ||
285 | + return; | ||
286 | + | ||
287 | + priv->start_value = adjustment->value; | ||
288 | + g_timer_reset (priv->timer); | ||
289 | + | ||
290 | + if (!priv->idle_id) | ||
291 | + { | ||
292 | + priv->idle_id = g_idle_add_full (GDK_PRIORITY_REDRAW + 3, adjustment_update_idle, adjustment, NULL); | ||
293 | + priv->goal_value = adjustment->value + delta; | ||
294 | + } | ||
295 | + else | ||
296 | + priv->goal_value = priv->goal_value + delta; | ||
297 | +} | ||
298 | + | ||
299 | +void | ||
300 | +gtk_adjustment_step_up (GtkAdjustment *adjustment) | ||
301 | +{ | ||
302 | + g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment)); | ||
303 | + | ||
304 | + gtk_adjustment_change_value (adjustment, -adjustment->step_increment); | ||
305 | +} | ||
306 | + | ||
307 | +void | ||
308 | +gtk_adjustment_step_down (GtkAdjustment *adjustment) | ||
309 | +{ | ||
310 | + g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment)); | ||
311 | + | ||
312 | + gtk_adjustment_change_value (adjustment, adjustment->step_increment); | ||
313 | +} | ||
314 | + | ||
315 | +void | ||
316 | +gtk_adjustment_wheel_up (GtkAdjustment *adjustment) | ||
317 | +{ | ||
318 | + g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment)); | ||
319 | + | ||
320 | + gtk_adjustment_change_value (adjustment, | ||
321 | + -pow (adjustment->page_size, 2.0/3.0)); | ||
322 | +} | ||
323 | + | ||
324 | +void | ||
325 | +gtk_adjustment_wheel_down (GtkAdjustment *adjustment) | ||
326 | +{ | ||
327 | + g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment)); | ||
328 | + | ||
329 | + gtk_adjustment_change_value (adjustment, | ||
330 | + pow (adjustment->page_size, 2.0/3.0)); | ||
331 | +} | ||
332 | + | ||
333 | +void | ||
334 | +gtk_adjustment_page_up (GtkAdjustment *adjustment) | ||
335 | +{ | ||
336 | + g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment)); | ||
337 | + | ||
338 | + gtk_adjustment_change_value (adjustment, -adjustment->page_increment); | ||
339 | +} | ||
340 | + | ||
341 | +void | ||
342 | +gtk_adjustment_page_down (GtkAdjustment *adjustment) | ||
343 | +{ | ||
344 | + g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment)); | ||
345 | + | ||
346 | + gtk_adjustment_change_value (adjustment, adjustment->page_increment); | ||
347 | +} | ||
348 | + | ||
349 | +void | ||
350 | +gtk_adjustment_home (GtkAdjustment *adjustment) | ||
351 | +{ | ||
352 | + g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment)); | ||
353 | + | ||
354 | + gtk_adjustment_goto_value (adjustment, 0.0); | ||
355 | +} | ||
356 | + | ||
357 | +void | ||
358 | +gtk_adjustment_end (GtkAdjustment *adjustment) | ||
359 | +{ | ||
360 | + g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment)); | ||
361 | + | ||
362 | + gtk_adjustment_goto_value (adjustment, adjustment->upper - adjustment->page_size); | ||
363 | +} | ||
364 | + | ||
365 | +void | ||
366 | +gtk_adjustment_goto_value (GtkAdjustment *adjustment, | ||
367 | + gdouble value) | ||
368 | +{ | ||
369 | + GtkAdjustmentPrivate *priv; | ||
370 | + | ||
371 | + g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment)); | ||
372 | + | ||
373 | + priv = gtk_adjustment_get_private (adjustment); | ||
374 | + | ||
375 | + priv->start_value = adjustment->value; | ||
376 | + priv->goal_value = value; | ||
377 | + g_timer_reset (priv->timer); | ||
378 | + | ||
379 | + if (!priv->idle_id) | ||
380 | + priv->idle_id = g_idle_add_full (GDK_PRIORITY_REDRAW + 3, adjustment_update_idle, adjustment, NULL); | ||
381 | +} | ||
382 | + | ||
383 | #define __GTK_ADJUSTMENT_C__ | ||
384 | #include "gtkaliasdef.c" | ||
385 | diff -x '*.orig' -uNr gtk+-2.7.1/gtk/gtkadjustment.h gtk+-2.7.1.patched/gtk/gtkadjustment.h | ||
386 | --- gtk+-2.7.1/gtk/gtkadjustment.h 2005-06-21 07:35:43.000000000 +0200 | ||
387 | +++ gtk+-2.7.1.patched/gtk/gtkadjustment.h 2005-07-02 13:17:35.000000000 +0200 | ||
388 | @@ -71,21 +71,32 @@ | ||
389 | }; | ||
390 | |||
391 | |||
392 | -GType gtk_adjustment_get_type (void) G_GNUC_CONST; | ||
393 | -GtkObject* gtk_adjustment_new (gdouble value, | ||
394 | - gdouble lower, | ||
395 | - gdouble upper, | ||
396 | - gdouble step_increment, | ||
397 | - gdouble page_increment, | ||
398 | - gdouble page_size); | ||
399 | -void gtk_adjustment_changed (GtkAdjustment *adjustment); | ||
400 | -void gtk_adjustment_value_changed (GtkAdjustment *adjustment); | ||
401 | -void gtk_adjustment_clamp_page (GtkAdjustment *adjustment, | ||
402 | - gdouble lower, | ||
403 | - gdouble upper); | ||
404 | -gdouble gtk_adjustment_get_value (GtkAdjustment *adjustment); | ||
405 | -void gtk_adjustment_set_value (GtkAdjustment *adjustment, | ||
406 | - gdouble value); | ||
407 | +GType gtk_adjustment_get_type (void) G_GNUC_CONST; | ||
408 | +GtkObject* gtk_adjustment_new (gdouble value, | ||
409 | + gdouble lower, | ||
410 | + gdouble upper, | ||
411 | + gdouble step_increment, | ||
412 | + gdouble page_increment, | ||
413 | + gdouble page_size); | ||
414 | +void gtk_adjustment_changed (GtkAdjustment *adjustment); | ||
415 | +void gtk_adjustment_value_changed (GtkAdjustment *adjustment); | ||
416 | +void gtk_adjustment_clamp_page (GtkAdjustment *adjustment, | ||
417 | + gdouble lower, | ||
418 | + gdouble upper); | ||
419 | +gdouble gtk_adjustment_get_value (GtkAdjustment *adjustment); | ||
420 | +void gtk_adjustment_set_value (GtkAdjustment *adjustment, | ||
421 | + gdouble value); | ||
422 | + | ||
423 | +void gtk_adjustment_goto_value (GtkAdjustment *adjustment, | ||
424 | + gdouble value); | ||
425 | +void gtk_adjustment_home (GtkAdjustment *adjustment); | ||
426 | +void gtk_adjustment_end (GtkAdjustment *adjustment); | ||
427 | +void gtk_adjustment_step_up (GtkAdjustment *adjustment); | ||
428 | +void gtk_adjustment_step_down (GtkAdjustment *adjustment); | ||
429 | +void gtk_adjustment_wheel_up (GtkAdjustment *adjustment); | ||
430 | +void gtk_adjustment_wheel_down (GtkAdjustment *adjustment); | ||
431 | +void gtk_adjustment_page_up (GtkAdjustment *adjustment); | ||
432 | +void gtk_adjustment_page_down (GtkAdjustment *adjustment); | ||
433 | |||
434 | G_END_DECLS | ||
435 | |||
436 | diff -x '*.orig' -uNr gtk+-2.7.1/gtk/gtkrange.h gtk+-2.7.1.patched/gtk/gtkrange.h | ||
437 | --- gtk+-2.7.1/gtk/gtkrange.h 2005-06-21 07:35:43.000000000 +0200 | ||
438 | +++ gtk+-2.7.1.patched/gtk/gtkrange.h 2005-07-02 13:19:35.000000000 +0200 | ||
439 | @@ -150,10 +150,6 @@ | ||
440 | gdouble value); | ||
441 | gdouble gtk_range_get_value (GtkRange *range); | ||
442 | |||
443 | -gdouble _gtk_range_get_wheel_delta (GtkRange *range, | ||
444 | - GdkScrollDirection direction); | ||
445 | - | ||
446 | - | ||
447 | G_END_DECLS | ||
448 | |||
449 | |||
450 | diff -x '*.orig' -uNr gtk+-2.7.1/gtk/gtkscrolledwindow.c gtk+-2.7.1.patched/gtk/gtkscrolledwindow.c | ||
451 | --- gtk+-2.7.1/gtk/gtkscrolledwindow.c 2005-05-08 05:37:43.000000000 +0200 | ||
452 | +++ gtk+-2.7.1.patched/gtk/gtkscrolledwindow.c 2005-07-02 13:17:35.000000000 +0200 | ||
453 | @@ -835,98 +835,65 @@ | ||
454 | GtkScrollType scroll, | ||
455 | gboolean horizontal) | ||
456 | { | ||
457 | - GtkAdjustment *adjustment = NULL; | ||
458 | + GtkAdjustment *hadj = NULL; | ||
459 | + GtkAdjustment *vadj = NULL; | ||
460 | + | ||
461 | + if (scrolled_window->hscrollbar) | ||
462 | + hadj = gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar)); | ||
463 | + | ||
464 | + if (scrolled_window->vscrollbar) | ||
465 | + vadj = gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar)); | ||
466 | |||
467 | switch (scroll) | ||
468 | { | ||
469 | case GTK_SCROLL_STEP_UP: | ||
470 | - scroll = GTK_SCROLL_STEP_BACKWARD; | ||
471 | - horizontal = FALSE; | ||
472 | + case GTK_SCROLL_STEP_BACKWARD: | ||
473 | + if (vadj) | ||
474 | + gtk_adjustment_step_up (vadj); | ||
475 | break; | ||
476 | case GTK_SCROLL_STEP_DOWN: | ||
477 | - scroll = GTK_SCROLL_STEP_FORWARD; | ||
478 | - horizontal = FALSE; | ||
479 | + case GTK_SCROLL_STEP_FORWARD: | ||
480 | + if (vadj) | ||
481 | + gtk_adjustment_step_down (vadj); | ||
482 | break; | ||
483 | case GTK_SCROLL_STEP_LEFT: | ||
484 | - scroll = GTK_SCROLL_STEP_BACKWARD; | ||
485 | - horizontal = TRUE; | ||
486 | + if (hadj) | ||
487 | + gtk_adjustment_step_up (hadj); | ||
488 | break; | ||
489 | case GTK_SCROLL_STEP_RIGHT: | ||
490 | - scroll = GTK_SCROLL_STEP_FORWARD; | ||
491 | - horizontal = TRUE; | ||
492 | + if (hadj) | ||
493 | + gtk_adjustment_step_down (hadj); | ||
494 | break; | ||
495 | case GTK_SCROLL_PAGE_UP: | ||
496 | - scroll = GTK_SCROLL_PAGE_BACKWARD; | ||
497 | - horizontal = FALSE; | ||
498 | + case GTK_SCROLL_PAGE_BACKWARD: | ||
499 | + if (vadj) | ||
500 | + gtk_adjustment_page_up (vadj); | ||
501 | break; | ||
502 | case GTK_SCROLL_PAGE_DOWN: | ||
503 | - scroll = GTK_SCROLL_PAGE_FORWARD; | ||
504 | - horizontal = FALSE; | ||
505 | + case GTK_SCROLL_PAGE_FORWARD: | ||
506 | + if (vadj) | ||
507 | + gtk_adjustment_page_down (vadj); | ||
508 | break; | ||
509 | case GTK_SCROLL_PAGE_LEFT: | ||
510 | - scroll = GTK_SCROLL_STEP_BACKWARD; | ||
511 | - horizontal = TRUE; | ||
512 | + if (hadj) | ||
513 | + gtk_adjustment_page_up (hadj); | ||
514 | break; | ||
515 | case GTK_SCROLL_PAGE_RIGHT: | ||
516 | - scroll = GTK_SCROLL_STEP_FORWARD; | ||
517 | - horizontal = TRUE; | ||
518 | + if (hadj) | ||
519 | + gtk_adjustment_page_down (hadj); | ||
520 | break; | ||
521 | - case GTK_SCROLL_STEP_BACKWARD: | ||
522 | - case GTK_SCROLL_STEP_FORWARD: | ||
523 | - case GTK_SCROLL_PAGE_BACKWARD: | ||
524 | - case GTK_SCROLL_PAGE_FORWARD: | ||
525 | case GTK_SCROLL_START: | ||
526 | + if (vadj) | ||
527 | + gtk_adjustment_home (vadj); | ||
528 | + break; | ||
529 | case GTK_SCROLL_END: | ||
530 | + if (vadj) | ||
531 | + gtk_adjustment_end (vadj); | ||
532 | break; | ||
533 | default: | ||
534 | g_warning ("Invalid scroll type %d for GtkSpinButton::change-value", scroll); | ||
535 | return; | ||
536 | } | ||
537 | - | ||
538 | - if (horizontal) | ||
539 | - { | ||
540 | - if (scrolled_window->hscrollbar) | ||
541 | - adjustment = gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar)); | ||
542 | - } | ||
543 | - else | ||
544 | - { | ||
545 | - if (scrolled_window->vscrollbar) | ||
546 | - adjustment = gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar)); | ||
547 | - } | ||
548 | - | ||
549 | - if (adjustment) | ||
550 | - { | ||
551 | - gdouble value = adjustment->value; | ||
552 | - | ||
553 | - switch (scroll) | ||
554 | - { | ||
555 | - case GTK_SCROLL_STEP_FORWARD: | ||
556 | - value += adjustment->step_increment; | ||
557 | - break; | ||
558 | - case GTK_SCROLL_STEP_BACKWARD: | ||
559 | - value -= adjustment->step_increment; | ||
560 | - break; | ||
561 | - case GTK_SCROLL_PAGE_FORWARD: | ||
562 | - value += adjustment->page_increment; | ||
563 | - break; | ||
564 | - case GTK_SCROLL_PAGE_BACKWARD: | ||
565 | - value -= adjustment->page_increment; | ||
566 | - break; | ||
567 | - case GTK_SCROLL_START: | ||
568 | - value = adjustment->lower; | ||
569 | - break; | ||
570 | - case GTK_SCROLL_END: | ||
571 | - value = adjustment->upper; | ||
572 | - break; | ||
573 | - default: | ||
574 | - g_assert_not_reached (); | ||
575 | - break; | ||
576 | - } | ||
577 | - | ||
578 | - value = CLAMP (value, adjustment->lower, adjustment->upper - adjustment->page_size); | ||
579 | - | ||
580 | - gtk_adjustment_set_value (adjustment, value); | ||
581 | - } | ||
582 | } | ||
583 | |||
584 | static void | ||
585 | @@ -1267,15 +1234,18 @@ | ||
586 | |||
587 | if (range && GTK_WIDGET_VISIBLE (range)) | ||
588 | { | ||
589 | - GtkAdjustment *adj = GTK_RANGE (range)->adjustment; | ||
590 | - gdouble delta, new_value; | ||
591 | - | ||
592 | - delta = _gtk_range_get_wheel_delta (GTK_RANGE (range), event->direction); | ||
593 | - | ||
594 | - new_value = CLAMP (adj->value + delta, adj->lower, adj->upper - adj->page_size); | ||
595 | + GtkAdjustment *adjustment = GTK_RANGE (range)->adjustment; | ||
596 | + | ||
597 | + if (event->direction == GDK_SCROLL_UP || | ||
598 | + event->direction == GDK_SCROLL_LEFT) | ||
599 | + { | ||
600 | + gtk_adjustment_wheel_up (adjustment); | ||
601 | + } | ||
602 | + else | ||
603 | + { | ||
604 | + gtk_adjustment_wheel_down (adjustment); | ||
605 | + } | ||
606 | |||
607 | - gtk_adjustment_set_value (adj, new_value); | ||
608 | - | ||
609 | return TRUE; | ||
610 | } | ||
611 |