diff options
author | Jonas Ådahl <jadahl@gmail.com> | 2015-12-02 16:13:36 +0800 |
---|---|---|
committer | Jonas Ådahl <jadahl@gmail.com> | 2016-02-16 18:24:23 +0800 |
commit | 52e38d1ab7c0e13aee8bdd7695741faf2dbb12ef (patch) | |
tree | 3dcdfd4052c765996087f95ea25b93b10064c223 | |
parent | 9214d5029c630e6ed8fd9793f6bcb0a0ae451576 (diff) | |
download | clutter-52e38d1ab7c0e13aee8bdd7695741faf2dbb12ef.tar.gz |
evdev: Expose microsecond timestamps via the clutter evdev API
This is needed by Wayland compositors for certain types of events.
https://bugzilla.gnome.org/show_bug.cgi?id=752752
-rw-r--r-- | clutter/evdev/clutter-device-manager-evdev.c | 7 | ||||
-rw-r--r-- | clutter/evdev/clutter-evdev.h | 3 | ||||
-rw-r--r-- | clutter/evdev/clutter-event-evdev.c | 31 | ||||
-rw-r--r-- | clutter/evdev/clutter-input-device-evdev.h | 3 |
4 files changed, 44 insertions, 0 deletions
diff --git a/clutter/evdev/clutter-device-manager-evdev.c b/clutter/evdev/clutter-device-manager-evdev.c index 1427dbbcc..53aa8480d 100644 --- a/clutter/evdev/clutter-device-manager-evdev.c +++ b/clutter/evdev/clutter-device-manager-evdev.c @@ -461,6 +461,7 @@ new_absolute_motion_event (ClutterInputDevice *input_device, y = CLAMP (y, 0.f, stage_height - 1); } + _clutter_evdev_event_set_time_usec (event, time_us); event->motion.time = us2ms (time_us); event->motion.stage = stage; event->motion.device = seat->core_pointer; @@ -572,6 +573,7 @@ notify_discrete_scroll (ClutterInputDevice *input_device, event = clutter_event_new (CLUTTER_SCROLL); + _clutter_evdev_event_set_time_usec (event, time_us); event->scroll.time = us2ms (time_us); event->scroll.stage = CLUTTER_STAGE (stage); event->scroll.device = seat->core_pointer; @@ -616,6 +618,7 @@ notify_scroll (ClutterInputDevice *input_device, event = clutter_event_new (CLUTTER_SCROLL); + _clutter_evdev_event_set_time_usec (event, time_us); event->scroll.time = us2ms (time_us); event->scroll.stage = CLUTTER_STAGE (stage); event->scroll.device = seat->core_pointer; @@ -708,6 +711,7 @@ notify_button (ClutterInputDevice *input_device, else seat->button_state &= ~maskmap[button - BTN_LEFT]; + _clutter_evdev_event_set_time_usec (event, time_us); event->button.time = us2ms (time_us); event->button.stage = CLUTTER_STAGE (stage); event->button.device = seat->core_pointer; @@ -749,6 +753,7 @@ notify_touch_event (ClutterInputDevice *input_device, event = clutter_event_new (evtype); + _clutter_evdev_event_set_time_usec (event, time_us); event->touch.time = us2ms (time_us); event->touch.stage = CLUTTER_STAGE (stage); event->touch.device = seat->core_pointer; @@ -796,6 +801,7 @@ notify_pinch_gesture_event (ClutterInputDevice *input_device, clutter_input_device_get_coords (seat->core_pointer, NULL, &pos); + _clutter_evdev_event_set_time_usec (event, time_us); event->touchpad_pinch.phase = phase; event->touchpad_pinch.time = us2ms (time_us); event->touchpad_pinch.stage = CLUTTER_STAGE (stage); @@ -839,6 +845,7 @@ notify_swipe_gesture_event (ClutterInputDevice *input_device, event = clutter_event_new (CLUTTER_TOUCHPAD_SWIPE); + _clutter_evdev_event_set_time_usec (event, time_us); event->touchpad_swipe.phase = phase; event->touchpad_swipe.time = us2ms (time_us); event->touchpad_swipe.stage = CLUTTER_STAGE (stage); diff --git a/clutter/evdev/clutter-evdev.h b/clutter/evdev/clutter-evdev.h index 8278df82b..dca093d5a 100644 --- a/clutter/evdev/clutter-evdev.h +++ b/clutter/evdev/clutter-evdev.h @@ -135,6 +135,9 @@ CLUTTER_AVAILABLE_IN_1_26 guint32 clutter_evdev_event_get_event_code (const ClutterEvent *event); CLUTTER_AVAILABLE_IN_1_26 +guint64 clutter_evdev_event_get_time_usec (const ClutterEvent *event); + +CLUTTER_AVAILABLE_IN_1_26 gboolean clutter_evdev_event_get_relative_motion (const ClutterEvent *event, double *dx, double *dy, diff --git a/clutter/evdev/clutter-event-evdev.c b/clutter/evdev/clutter-event-evdev.c index a0d66c928..c80a642f3 100644 --- a/clutter/evdev/clutter-event-evdev.c +++ b/clutter/evdev/clutter-event-evdev.c @@ -33,6 +33,8 @@ struct _ClutterEventEvdev { guint32 evcode; + guint64 time_usec; + gboolean has_relative_motion; double dx; double dy; @@ -87,6 +89,16 @@ _clutter_evdev_event_set_event_code (ClutterEvent *event, } void +_clutter_evdev_event_set_time_usec (ClutterEvent *event, + guint64 time_usec) +{ + ClutterEventEvdev *event_evdev; + + event_evdev = clutter_evdev_event_ensure_platform_data (event); + event_evdev->time_usec = time_usec; +} + +void _clutter_evdev_event_set_relative_motion (ClutterEvent *event, double dx, double dy, @@ -124,6 +136,25 @@ clutter_evdev_event_get_event_code (const ClutterEvent *event) } /** + * clutter_evdev_event_get_time_usec: + * @event: a #ClutterEvent + * + * Returns the time in microsecond granularity, or 0 if unavailable. + * + * Returns: The time in microsecond granularity, or 0 if unavailable. + */ +guint64 +clutter_evdev_event_get_time_usec (const ClutterEvent *event) +{ + ClutterEventEvdev *event_evdev = _clutter_event_get_platform_data (event); + + if (event_evdev) + return event_evdev->time_usec; + + return 0; +} + +/** * clutter_evdev_event_get_pointer_motion * @event: a #ClutterEvent * diff --git a/clutter/evdev/clutter-input-device-evdev.h b/clutter/evdev/clutter-input-device-evdev.h index dec373915..c5c3eff5f 100644 --- a/clutter/evdev/clutter-input-device-evdev.h +++ b/clutter/evdev/clutter-input-device-evdev.h @@ -91,6 +91,9 @@ void _clutter_event_evdev_free (ClutterEv void _clutter_evdev_event_set_event_code (ClutterEvent *event, guint32 evcode); +void _clutter_evdev_event_set_time_usec (ClutterEvent *event, + guint64 time_usec); + void _clutter_evdev_event_set_relative_motion (ClutterEvent *event, double dx, double dy, |