Contents of /trunk/gtk2+/patches/gtk+-2-smoothscroll-r6.patch
Parent Directory | Revision Log
Revision 144 -
(show 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 | 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 |