1 From 4ef417938760f98e530c152ee50071da2af31b06 Mon Sep 17 00:00:00 2001
2 From: Kristian Rietveld <kris@lanedo.com>
3 Date: Sun, 2 Sep 2012 14:16:45 +0200
4 Subject: [PATCH 18/68] Introduce phase field in GdkEventScroll
6 Using the phase field it is possible to distinguish between
7 events generated while the user is performing a gesture and
8 momentum events that are generated after the gesture has been
12 gdk/gdkevents.h | 9 +++++++++
14 gdk/quartz/gdkevents-quartz.c | 36 +++++++++++++++++++++++++++++++++---
15 4 files changed, 44 insertions(+), 3 deletions(-)
17 diff --git a/gdk/gdkevents.c b/gdk/gdkevents.c
18 index 0f8bba2..d3d67db 100644
21 @@ -394,6 +394,7 @@ gdk_event_new (GdkEventType type)
22 new_event->scroll.y_root = 0.;
23 new_event->scroll.delta_x = 0.;
24 new_event->scroll.delta_y = 0.;
25 + new_event->scroll.phase = GDK_EVENT_SCROLL_PHASE_NONE;
27 case GDK_ENTER_NOTIFY:
28 case GDK_LEAVE_NOTIFY:
29 diff --git a/gdk/gdkevents.h b/gdk/gdkevents.h
30 index f6b4e04..765b520 100644
33 @@ -263,6 +263,14 @@ typedef enum
34 GDK_OWNER_CHANGE_CLOSE
39 + GDK_EVENT_SCROLL_PHASE_NONE,
40 + GDK_EVENT_SCROLL_PHASE_START,
41 + GDK_EVENT_SCROLL_PHASE_ACTIVE,
42 + GDK_EVENT_SCROLL_PHASE_END
43 +} GdkEventScrollPhase;
48 @@ -340,6 +348,7 @@ struct _GdkEventScroll
52 + GdkEventScrollPhase phase;
56 diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c
57 index d48751e..1843873 100644
60 @@ -10803,6 +10803,7 @@ proxy_button_event (GdkEvent *source_event,
61 event->scroll.has_deltas = source_event->scroll.has_deltas;
62 event->scroll.delta_x = source_event->scroll.delta_x;
63 event->scroll.delta_y = source_event->scroll.delta_y;
64 + event->scroll.phase = source_event->scroll.phase;
68 diff --git a/gdk/quartz/gdkevents-quartz.c b/gdk/quartz/gdkevents-quartz.c
69 index e7d97dc..bb4da70 100644
70 --- a/gdk/quartz/gdkevents-quartz.c
71 +++ b/gdk/quartz/gdkevents-quartz.c
72 @@ -62,6 +62,7 @@ static GdkWindow *find_toplevel_under_pointer (GdkDisplay *display,
73 - (BOOL) hasPreciseScrollingDeltas;
74 - (CGFloat) scrollingDeltaX;
75 - (CGFloat) scrollingDeltaY;
80 @@ -990,6 +991,7 @@ fill_scroll_event (GdkWindow *window,
84 + GdkEventScrollPhase phase,
85 GdkScrollDirection direction)
87 GdkWindowObject *private;
88 @@ -1012,6 +1014,7 @@ fill_scroll_event (GdkWindow *window,
89 event->scroll.has_deltas = has_deltas;
90 event->scroll.delta_x = delta_x;
91 event->scroll.delta_y = delta_y;
92 + event->scroll.phase = phase;
96 @@ -1300,6 +1303,28 @@ test_resize (NSEvent *event, GdkWindow *toplevel, gint x, gint y)
100 +static GdkEventScrollPhase
101 +gdk_event_scroll_phase_from_ns_event_phase (NSUInteger phase)
106 + return GDK_EVENT_SCROLL_PHASE_NONE;
109 + return GDK_EVENT_SCROLL_PHASE_START;
113 + return GDK_EVENT_SCROLL_PHASE_ACTIVE;
116 + return GDK_EVENT_SCROLL_PHASE_END;
119 + return GDK_EVENT_SCROLL_PHASE_NONE;
123 gdk_event_translate (GdkEvent *event,
125 @@ -1491,6 +1516,7 @@ gdk_event_translate (GdkEvent *event,
126 if (gdk_quartz_osx_version() >= GDK_OSX_LION &&
127 [(id <PreciseDeltas>) nsevent hasPreciseScrollingDeltas])
129 + GdkEventScrollPhase phase;
130 dx = [(id <PreciseDeltas>) nsevent scrollingDeltaX];
131 dy = [(id <PreciseDeltas>) nsevent scrollingDeltaY];
133 @@ -1509,8 +1535,10 @@ gdk_event_translate (GdkEvent *event,
134 direction = GDK_SCROLL_LEFT;
137 + phase = gdk_event_scroll_phase_from_ns_event_phase ([(id <PreciseDeltas>) nsevent phase]);
139 fill_scroll_event (window, event, nsevent, x, y, x_root, y_root,
140 - TRUE, -dx, -dy, direction);
141 + TRUE, -dx, -dy, phase, direction);
145 @@ -1525,7 +1553,8 @@ gdk_event_translate (GdkEvent *event,
146 direction = GDK_SCROLL_UP;
148 fill_scroll_event (window, event, nsevent, x, y, x_root, y_root,
149 - FALSE, 0.0, fabs (dy), direction);
150 + FALSE, 0.0, fabs (dy), GDK_EVENT_SCROLL_PHASE_NONE,
155 @@ -1535,7 +1564,8 @@ gdk_event_translate (GdkEvent *event,
156 direction = GDK_SCROLL_LEFT;
158 fill_scroll_event (window, event, nsevent, x, y, x_root, y_root,
159 - FALSE, fabs (dx), 0.0, direction);
160 + FALSE, fabs (dx), 0.0, GDK_EVENT_SCROLL_PHASE_NONE,
166 1.7.10.2 (Apple Git-33)