Skip to content

Commit 8d3dede

Browse files
authored
clutter-event.c: Add fields for unaccelerated delta motion to touchpad events. (#786)
* clutter-event.c: Add fields for unaccelerated delta motion to touchpad events. To be used for native gestures using libinput. ref: linuxmint/wayland#99 * debian/libmuffin0.symbols: Make dpkg-gensymbols happy.
1 parent 68efbd8 commit 8d3dede

File tree

4 files changed

+76
-7
lines changed

4 files changed

+76
-7
lines changed

clutter/clutter/clutter-event.c

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2213,6 +2213,51 @@ clutter_event_get_gesture_motion_delta (const ClutterEvent *event,
22132213
}
22142214
}
22152215

2216+
/**
2217+
* clutter_event_get_gesture_motion_delta_unaccelerated:
2218+
* @event: A clutter touchpad gesture event
2219+
* @dx: (out) (allow-none): the unaccelerated displacement relative to the pointer
2220+
* position in the X axis, or %NULL
2221+
* @dy: (out) (allow-none): the unaccelerated displacement relative to the pointer
2222+
* position in the Y axis, or %NULL
2223+
*
2224+
* Returns the unaccelerated gesture motion deltas relative to the current
2225+
* pointer position. Unlike clutter_event_get_gesture_motion_delta(),
2226+
* pointer acceleration is ignored.
2227+
**/
2228+
void
2229+
clutter_event_get_gesture_motion_delta_unaccelerated (const ClutterEvent *event,
2230+
gdouble *dx,
2231+
gdouble *dy)
2232+
{
2233+
g_return_if_fail (event != NULL);
2234+
g_return_if_fail (event->type == CLUTTER_TOUCHPAD_PINCH ||
2235+
event->type == CLUTTER_TOUCHPAD_SWIPE ||
2236+
event->type == CLUTTER_TOUCHPAD_HOLD);
2237+
2238+
if (event->type == CLUTTER_TOUCHPAD_PINCH)
2239+
{
2240+
if (dx)
2241+
*dx = event->touchpad_pinch.dx_unaccel;
2242+
if (dy)
2243+
*dy = event->touchpad_pinch.dy_unaccel;
2244+
}
2245+
else if (event->type == CLUTTER_TOUCHPAD_SWIPE)
2246+
{
2247+
if (dx)
2248+
*dx = event->touchpad_swipe.dx_unaccel;
2249+
if (dy)
2250+
*dy = event->touchpad_swipe.dy_unaccel;
2251+
}
2252+
else if (event->type == CLUTTER_TOUCHPAD_HOLD)
2253+
{
2254+
if (dx)
2255+
*dx = 0;
2256+
if (dy)
2257+
*dy = 0;
2258+
}
2259+
}
2260+
22162261
/**
22172262
* clutter_event_get_scroll_source:
22182263
* @event: an scroll event

clutter/clutter/clutter-event.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -461,6 +461,8 @@ struct _ClutterTouchpadPinchEvent
461461
gfloat y;
462462
gfloat dx;
463463
gfloat dy;
464+
gfloat dx_unaccel;
465+
gfloat dy_unaccel;
464466
gfloat angle_delta;
465467
gfloat scale;
466468
guint n_fingers;
@@ -499,6 +501,8 @@ struct _ClutterTouchpadSwipeEvent
499501
gfloat y;
500502
gfloat dx;
501503
gfloat dy;
504+
gfloat dx_unaccel;
505+
gfloat dy_unaccel;
502506
};
503507

504508
/**
@@ -840,6 +844,11 @@ void clutter_event_get_gesture_motion_delta (const Clut
840844
gdouble *dx,
841845
gdouble *dy);
842846

847+
CLUTTER_EXPORT
848+
void clutter_event_get_gesture_motion_delta_unaccelerated (const ClutterEvent *event,
849+
gdouble *dx,
850+
gdouble *dy);
851+
843852
CLUTTER_EXPORT
844853
ClutterScrollSource clutter_event_get_scroll_source (const ClutterEvent *event);
845854

debian/libmuffin0.symbols

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -587,6 +587,7 @@ libmuffin-clutter-0.so.0 libmuffin0 #MINVER#
587587
clutter_event_get_event_sequence@Base 5.3.0
588588
clutter_event_get_flags@Base 5.3.0
589589
clutter_event_get_gesture_motion_delta@Base 5.3.0
590+
clutter_event_get_gesture_motion_delta_unaccelerated@Base 6.7.0
590591
clutter_event_get_gesture_phase@Base 5.3.0
591592
clutter_event_get_gesture_pinch_angle_delta@Base 5.3.0
592593
clutter_event_get_gesture_pinch_scale@Base 5.3.0

src/backends/native/meta-seat-native.c

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1006,6 +1006,8 @@ notify_pinch_gesture_event (ClutterInputDevice *input_device,
10061006
uint64_t time_us,
10071007
double dx,
10081008
double dy,
1009+
double dx_unaccel,
1010+
double dy_unaccel,
10091011
double angle_delta,
10101012
double scale,
10111013
uint32_t n_fingers)
@@ -1037,6 +1039,8 @@ notify_pinch_gesture_event (ClutterInputDevice *input_device,
10371039
event->touchpad_pinch.y = pos.y;
10381040
event->touchpad_pinch.dx = dx;
10391041
event->touchpad_pinch.dy = dy;
1042+
event->touchpad_pinch.dx_unaccel = dx_unaccel;
1043+
event->touchpad_pinch.dy_unaccel = dy_unaccel;
10401044
event->touchpad_pinch.angle_delta = angle_delta;
10411045
event->touchpad_pinch.scale = scale;
10421046
event->touchpad_pinch.n_fingers = n_fingers;
@@ -1055,7 +1059,9 @@ notify_swipe_gesture_event (ClutterInputDevice *input_device,
10551059
uint64_t time_us,
10561060
uint32_t n_fingers,
10571061
double dx,
1058-
double dy)
1062+
double dy,
1063+
double dx_unaccel,
1064+
double dy_unaccel)
10591065
{
10601066
MetaInputDeviceNative *device_evdev;
10611067
MetaSeatNative *seat;
@@ -1084,6 +1090,8 @@ notify_swipe_gesture_event (ClutterInputDevice *input_device,
10841090
event->touchpad_swipe.y = pos.y;
10851091
event->touchpad_swipe.dx = dx;
10861092
event->touchpad_swipe.dy = dy;
1093+
event->touchpad_swipe.dx_unaccel = dx_unaccel;
1094+
event->touchpad_swipe.dy_unaccel = dy_unaccel;
10871095
event->touchpad_swipe.n_fingers = n_fingers;
10881096

10891097
meta_xkb_translate_state (event, seat->xkb, seat->button_state);
@@ -2164,14 +2172,14 @@ process_device_event (MetaSeatNative *seat,
21642172
n_fingers = libinput_event_gesture_get_finger_count (gesture_event);
21652173
device = libinput_device_get_user_data (libinput_device);
21662174
time_us = libinput_event_gesture_get_time_usec (gesture_event);
2167-
notify_pinch_gesture_event (device, phase, time_us, 0, 0, 0, 0, n_fingers);
2175+
notify_pinch_gesture_event (device, phase, time_us, 0, 0, 0, 0, 0, 0, n_fingers);
21682176
break;
21692177
}
21702178
case LIBINPUT_EVENT_GESTURE_PINCH_UPDATE:
21712179
{
21722180
struct libinput_event_gesture *gesture_event =
21732181
libinput_event_get_gesture_event (event);
2174-
gdouble angle_delta, scale, dx, dy;
2182+
gdouble angle_delta, scale, dx, dy, dx_unaccel, dy_unaccel;
21752183
uint32_t n_fingers;
21762184
uint64_t time_us;
21772185

@@ -2182,10 +2190,13 @@ process_device_event (MetaSeatNative *seat,
21822190
scale = libinput_event_gesture_get_scale (gesture_event);
21832191
dx = libinput_event_gesture_get_dx (gesture_event);
21842192
dy = libinput_event_gesture_get_dy (gesture_event);
2193+
dx_unaccel = libinput_event_gesture_get_dx_unaccelerated (gesture_event);
2194+
dy_unaccel = libinput_event_gesture_get_dy_unaccelerated (gesture_event);
21852195

21862196
notify_pinch_gesture_event (device,
21872197
CLUTTER_TOUCHPAD_GESTURE_PHASE_UPDATE,
2188-
time_us, dx, dy, angle_delta, scale, n_fingers);
2198+
time_us, dx, dy, dx_unaccel, dy_unaccel,
2199+
angle_delta, scale, n_fingers);
21892200
break;
21902201
}
21912202
case LIBINPUT_EVENT_GESTURE_SWIPE_BEGIN:
@@ -2207,7 +2218,7 @@ process_device_event (MetaSeatNative *seat,
22072218
phase = libinput_event_gesture_get_cancelled (gesture_event) ?
22082219
CLUTTER_TOUCHPAD_GESTURE_PHASE_CANCEL : CLUTTER_TOUCHPAD_GESTURE_PHASE_END;
22092220

2210-
notify_swipe_gesture_event (device, phase, time_us, n_fingers, 0, 0);
2221+
notify_swipe_gesture_event (device, phase, time_us, n_fingers, 0, 0, 0, 0);
22112222
break;
22122223
}
22132224
case LIBINPUT_EVENT_GESTURE_SWIPE_UPDATE:
@@ -2216,17 +2227,20 @@ process_device_event (MetaSeatNative *seat,
22162227
libinput_event_get_gesture_event (event);
22172228
uint32_t n_fingers;
22182229
uint64_t time_us;
2219-
double dx, dy;
2230+
double dx, dy, dx_unaccel, dy_unaccel;
22202231

22212232
device = libinput_device_get_user_data (libinput_device);
22222233
time_us = libinput_event_gesture_get_time_usec (gesture_event);
22232234
n_fingers = libinput_event_gesture_get_finger_count (gesture_event);
22242235
dx = libinput_event_gesture_get_dx (gesture_event);
22252236
dy = libinput_event_gesture_get_dy (gesture_event);
2237+
dx_unaccel = libinput_event_gesture_get_dx_unaccelerated (gesture_event);
2238+
dy_unaccel = libinput_event_gesture_get_dy_unaccelerated (gesture_event);
22262239

22272240
notify_swipe_gesture_event (device,
22282241
CLUTTER_TOUCHPAD_GESTURE_PHASE_UPDATE,
2229-
time_us, n_fingers, dx, dy);
2242+
time_us, n_fingers, dx, dy,
2243+
dx_unaccel, dy_unaccel);
22302244
break;
22312245
}
22322246
case LIBINPUT_EVENT_GESTURE_HOLD_BEGIN:

0 commit comments

Comments
 (0)