Transfer the Mac SDK bockbuild profiles & resources inside the Mono repository.
[mono.git] / bockbuild / mac-sdk / patches / gtk / 0018-Introduce-phase-field-in-GdkEventScroll.patch
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
5
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
9 finished.
10 ---
11  gdk/gdkevents.c               |    1 +
12  gdk/gdkevents.h               |    9 +++++++++
13  gdk/gdkwindow.c               |    1 +
14  gdk/quartz/gdkevents-quartz.c |   36 +++++++++++++++++++++++++++++++++---
15  4 files changed, 44 insertions(+), 3 deletions(-)
16
17 diff --git a/gdk/gdkevents.c b/gdk/gdkevents.c
18 index 0f8bba2..d3d67db 100644
19 --- a/gdk/gdkevents.c
20 +++ b/gdk/gdkevents.c
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;
26        break;
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
31 --- a/gdk/gdkevents.h
32 +++ b/gdk/gdkevents.h
33 @@ -263,6 +263,14 @@ typedef enum
34    GDK_OWNER_CHANGE_CLOSE
35  } GdkOwnerChange;
36
37 +typedef enum
38 +{
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;
44 +
45  struct _GdkEventAny
46  {
47    GdkEventType type;
48 @@ -340,6 +348,7 @@ struct _GdkEventScroll
49    gboolean has_deltas;
50    gdouble delta_x;
51    gdouble delta_y;
52 +  GdkEventScrollPhase phase;
53  };
54
55  struct _GdkEventKey
56 diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c
57 index d48751e..1843873 100644
58 --- a/gdk/gdkwindow.c
59 +++ b/gdk/gdkwindow.c
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;
65        return TRUE;
66
67      default:
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;
76 +- (int) phase;
77  @end
78
79
80 @@ -990,6 +991,7 @@ fill_scroll_event (GdkWindow          *window,
81                     gboolean            has_deltas,
82                     gdouble             delta_x,
83                     gdouble             delta_y,
84 +                   GdkEventScrollPhase phase,
85                     GdkScrollDirection  direction)
86  {
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;
93  }
94
95  static void
96 @@ -1300,6 +1303,28 @@ test_resize (NSEvent *event, GdkWindow *toplevel, gint x, gint y)
97    return FALSE;
98  }
99
100 +static GdkEventScrollPhase
101 +gdk_event_scroll_phase_from_ns_event_phase (NSUInteger phase)
102 +{
103 +  switch (phase)
104 +    {
105 +      case 0:
106 +        return GDK_EVENT_SCROLL_PHASE_NONE;
107 +
108 +      case 1 << 0:
109 +        return GDK_EVENT_SCROLL_PHASE_START;
110 +
111 +      case 1 << 1:
112 +      case 1 << 2:
113 +        return GDK_EVENT_SCROLL_PHASE_ACTIVE;
114 +
115 +      case 1 << 3:
116 +        return GDK_EVENT_SCROLL_PHASE_END;
117 +    }
118 +
119 +  return GDK_EVENT_SCROLL_PHASE_NONE;
120 +}
121 +
122  static gboolean
123  gdk_event_translate (GdkEvent *event,
124                       NSEvent  *nsevent)
125 @@ -1491,6 +1516,7 @@ gdk_event_translate (GdkEvent *event,
126         if (gdk_quartz_osx_version() >= GDK_OSX_LION &&
127             [(id <PreciseDeltas>) nsevent hasPreciseScrollingDeltas])
128           {
129 +            GdkEventScrollPhase phase;
130             dx = [(id <PreciseDeltas>) nsevent scrollingDeltaX];
131             dy = [(id <PreciseDeltas>) nsevent scrollingDeltaY];
132
133 @@ -1509,8 +1535,10 @@ gdk_event_translate (GdkEvent *event,
134                    direction = GDK_SCROLL_LEFT;
135                }
136
137 +            phase = gdk_event_scroll_phase_from_ns_event_phase ([(id <PreciseDeltas>) nsevent phase]);
138 +
139              fill_scroll_event (window, event, nsevent, x, y, x_root, y_root,
140 -                               TRUE, -dx, -dy, direction);
141 +                               TRUE, -dx, -dy, phase, direction);
142           }
143         else
144           {
145 @@ -1525,7 +1553,8 @@ gdk_event_translate (GdkEvent *event,
146                    direction = GDK_SCROLL_UP;
147
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,
151 +                                   direction);
152                }
153              else if (dx != 0.0)
154                {
155 @@ -1535,7 +1564,8 @@ gdk_event_translate (GdkEvent *event,
156                    direction = GDK_SCROLL_LEFT;
157
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,
161 +                                   direction);
162                }
163            }
164        }
165 --
166 1.7.10.2 (Apple Git-33)