Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/bockbuild.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/gtk+.py3
-rw-r--r--packages/patches/gtk/gtk-smooth-scrolling.patch210
2 files changed, 213 insertions, 0 deletions
diff --git a/packages/gtk+.py b/packages/gtk+.py
index 7b5061d..af4af52 100644
--- a/packages/gtk+.py
+++ b/packages/gtk+.py
@@ -21,6 +21,9 @@ class GtkPackage (GnomePackage):
# add some missing keybindings
# 'patches/gtk/gtkmackeys.patch',
+ # https://bugzilla.gnome.org/show_bug.cgi?id=516725
+ # http://bugzilla-attachments.gnome.org/attachment.cgi?id=197616
+ 'patches/gtk/gtk-smooth-scrolling.patch',
])
def prep (self):
diff --git a/packages/patches/gtk/gtk-smooth-scrolling.patch b/packages/patches/gtk/gtk-smooth-scrolling.patch
new file mode 100644
index 0000000..af7f88d
--- /dev/null
+++ b/packages/patches/gtk/gtk-smooth-scrolling.patch
@@ -0,0 +1,210 @@
+diff --git a/docs/reference/gdk/tmpl/event_structs.sgml b/docs/reference/gdk/tmpl/event_structs.sgml
+index 42c54b0..4de4820 100644
+--- a/docs/reference/gdk/tmpl/event_structs.sgml
++++ b/docs/reference/gdk/tmpl/event_structs.sgml
+@@ -195,6 +195,8 @@ Shift and Alt) and the pointer buttons. See #GdkModifierType.
+ @device: the device where the event originated.
+ @x_root: the x coordinate of the pointer relative to the root of the screen.
+ @y_root: the y coordinate of the pointer relative to the root of the screen.
++@delta: the distance scrolled by the wheel (1.0 by default and on backends
++ that don't report scrolling speeds).
+
+ <!-- ##### STRUCT GdkEventMotion ##### -->
+ <para>
+diff --git a/gdk/gdkevents.c b/gdk/gdkevents.c
+index 53833a0..9205c2c 100644
+--- a/gdk/gdkevents.c
++++ b/gdk/gdkevents.c
+@@ -392,6 +392,7 @@ gdk_event_new (GdkEventType type)
+ new_event->scroll.y = 0.;
+ new_event->scroll.x_root = 0.;
+ new_event->scroll.y_root = 0.;
++ new_event->scroll.delta = 1.;
+ break;
+ case GDK_ENTER_NOTIFY:
+ case GDK_LEAVE_NOTIFY:
+diff --git a/gdk/gdkevents.h b/gdk/gdkevents.h
+index e6c516c..cfd5035 100644
+--- a/gdk/gdkevents.h
++++ b/gdk/gdkevents.h
+@@ -337,6 +337,7 @@ struct _GdkEventScroll
+ GdkScrollDirection direction;
+ GdkDevice *device;
+ gdouble x_root, y_root;
++ gdouble delta;
+ };
+
+ struct _GdkEventKey
+diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c
+index f058570..1c9a6bc 100644
+--- a/gdk/gdkwindow.c
++++ b/gdk/gdkwindow.c
+@@ -10794,6 +10794,7 @@ proxy_button_event (GdkEvent *source_event,
+ event->scroll.y_root = source_event->scroll.y_root;
+ event->scroll.state = state;
+ event->scroll.device = source_event->scroll.device;
++ event->scroll.delta = source_event->scroll.delta;
+ return TRUE;
+
+ default:
+diff --git a/gdk/quartz/gdkevents-quartz.c b/gdk/quartz/gdkevents-quartz.c
+index 4625070..816ba12 100644
+--- a/gdk/quartz/gdkevents-quartz.c
++++ b/gdk/quartz/gdkevents-quartz.c
+@@ -42,6 +42,11 @@
+ GDK_WINDOW_TYPE (window) != GDK_WINDOW_FOREIGN && \
+ GDK_WINDOW_TYPE (window) != GDK_WINDOW_OFFSCREEN)
+
++@protocol ProvidesScrollingDeltas
++- (CGFloat)scrollingDeltaX;
++- (CGFloat)scrollingDeltaY;
++@end
++
+ /* This is the window corresponding to the key window */
+ static GdkWindow *current_keyboard_window;
+
+@@ -847,6 +852,7 @@ fill_scroll_event (GdkWindow *window,
+ gint y,
+ gint x_root,
+ gint y_root,
++ gdouble delta,
+ GdkScrollDirection direction)
+ {
+ GdkWindowObject *private;
+@@ -866,6 +872,7 @@ fill_scroll_event (GdkWindow *window,
+ event->scroll.state = get_keyboard_modifiers_from_ns_event (nsevent);
+ event->scroll.direction = direction;
+ event->scroll.device = _gdk_display->core_pointer;
++ event->scroll.delta = delta;
+ }
+
+ static void
+@@ -1261,28 +1268,40 @@ gdk_event_translate (GdkEvent *event,
+
+ case NSScrollWheel:
+ {
+- float dx = [nsevent deltaX];
+- float dy = [nsevent deltaY];
+ GdkScrollDirection direction;
++ float dx;
++ float dy;
++
++ if (gdk_quartz_osx_version() >= GDK_OSX_LION &&
++ [nsevent hasPreciseScrollingDeltas])
++ {
++ dx = [(id<ProvidesScrollingDeltas>)nsevent scrollingDeltaX] / 40.0;
++ dy = [(id<ProvidesScrollingDeltas>)nsevent scrollingDeltaY] / 40.0;
++ }
++ else
++ {
++ dx = [nsevent deltaX];
++ dy = [nsevent deltaY];
++ }
+
+- if (dy != 0)
++ if (dy != 0.0)
+ {
+ if (dy < 0.0)
+ direction = GDK_SCROLL_DOWN;
+ else
+ direction = GDK_SCROLL_UP;
+
+- fill_scroll_event (window, event, nsevent, x, y, x_root, y_root, direction);
++ fill_scroll_event (window, event, nsevent, x, y, x_root, y_root, fabs (dy), direction);
+ }
+
+- if (dx != 0)
++ if (dx != 0.0)
+ {
+ if (dx < 0.0)
+ direction = GDK_SCROLL_RIGHT;
+ else
+ direction = GDK_SCROLL_LEFT;
+
+- fill_scroll_event (window, event, nsevent, x, y, x_root, y_root, direction);
++ fill_scroll_event (window, event, nsevent, x, y, x_root, y_root, fabs (dx), direction);
+ }
+ }
+ break;
+diff --git a/gtk/gtkrange.c b/gtk/gtkrange.c
+index 3932976..bbd4971 100644
+--- a/gtk/gtkrange.c
++++ b/gtk/gtkrange.c
+@@ -2546,7 +2546,7 @@ gtk_range_button_release (GtkWidget *widget,
+ /**
+ * _gtk_range_get_wheel_delta:
+ * @range: a #GtkRange
+- * @direction: A #GdkScrollDirection
++ * @event: A #GdkEventScroll
+ *
+ * Returns a good step value for the mouse wheel.
+ *
+@@ -2555,8 +2555,8 @@ gtk_range_button_release (GtkWidget *widget,
+ * Since: 2.4
+ **/
+ gdouble
+-_gtk_range_get_wheel_delta (GtkRange *range,
+- GdkScrollDirection direction)
++_gtk_range_get_wheel_delta (GtkRange *range,
++ GdkEventScroll *event)
+ {
+ GtkAdjustment *adj = range->adjustment;
+ gdouble delta;
+@@ -2566,13 +2566,18 @@ _gtk_range_get_wheel_delta (GtkRange *range,
+ else
+ delta = adj->step_increment * 2;
+
+- if (direction == GDK_SCROLL_UP ||
+- direction == GDK_SCROLL_LEFT)
++ if (event->direction == GDK_SCROLL_UP ||
++ event->direction == GDK_SCROLL_LEFT)
+ delta = - delta;
+
+ if (range->inverted)
+ delta = - delta;
+
++ if (event->delta != 1.0)
++ delta *= event->delta;
++
++ g_printerr ("%s: event->delta = %f delta = %f\n", G_STRFUNC, event->delta, delta);
++
+ return delta;
+ }
+
+@@ -2588,7 +2593,7 @@ gtk_range_scroll_event (GtkWidget *widget,
+ gdouble delta;
+ gboolean handled;
+
+- delta = _gtk_range_get_wheel_delta (range, event->direction);
++ delta = _gtk_range_get_wheel_delta (range, event);
+
+ g_signal_emit (range, signals[CHANGE_VALUE], 0,
+ GTK_SCROLL_JUMP, adj->value + delta,
+diff --git a/gtk/gtkrange.h b/gtk/gtkrange.h
+index a708879..3131fbe 100644
+--- a/gtk/gtkrange.h
++++ b/gtk/gtkrange.h
+@@ -199,8 +199,8 @@ gint gtk_range_get_round_digits (GtkRange *range
+
+
+ /* internal API */
+-gdouble _gtk_range_get_wheel_delta (GtkRange *range,
+- GdkScrollDirection direction);
++gdouble _gtk_range_get_wheel_delta (GtkRange *range,
++ GdkEventScroll *event);
+
+ void _gtk_range_set_stop_values (GtkRange *range,
+ gdouble *values,
+diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c
+index 05389fa..245d679 100644
+--- a/gtk/gtkscrolledwindow.c
++++ b/gtk/gtkscrolledwindow.c
+@@ -1583,7 +1583,7 @@ gtk_scrolled_window_scroll_event (GtkWidget *widget,
+ GtkAdjustment *adj = GTK_RANGE (range)->adjustment;
+ gdouble delta, new_value;
+
+- delta = _gtk_range_get_wheel_delta (GTK_RANGE (range), event->direction);
++ delta = _gtk_range_get_wheel_delta (GTK_RANGE (range), event);
+
+ new_value = CLAMP (adj->value + delta, adj->lower, adj->upper - adj->page_size);
+