discomfitor pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=9a8931c3de9690755ee4e943160021d8c3cd7232
commit 9a8931c3de9690755ee4e943160021d8c3cd7232 Author: Mike Blumenkrantz <zm...@osg.samsung.com> Date: Fri Feb 3 15:14:01 2017 -0500 elput: add event for relative motion @feature --- src/lib/elput/Elput.h | 14 ++++++++++++++ src/lib/elput/elput.c | 3 +++ src/lib/elput/elput_evdev.c | 19 +++++++++++++++++++ 3 files changed, 36 insertions(+) diff --git a/src/lib/elput/Elput.h b/src/lib/elput/Elput.h index b48caa1..378912e 100644 --- a/src/lib/elput/Elput.h +++ b/src/lib/elput/Elput.h @@ -98,6 +98,17 @@ typedef struct _Elput_Event_Session_Active Eina_Bool active : 1; } Elput_Event_Session_Active; +/** @since 1.19 */ +typedef struct Elput_Event_Pointer_Motion +{ + uint64_t time_usec; + double dx; + double dy; + double dx_unaccel; + double dy_unaccel; +} Elput_Event_Pointer_Motion; + + EAPI extern int ELPUT_EVENT_SEAT_CAPS; EAPI extern int ELPUT_EVENT_SEAT_FRAME; EAPI extern int ELPUT_EVENT_KEYMAP_SEND; @@ -105,6 +116,9 @@ EAPI extern int ELPUT_EVENT_MODIFIERS_SEND; EAPI extern int ELPUT_EVENT_DEVICE_CHANGE; EAPI extern int ELPUT_EVENT_SESSION_ACTIVE; +/** @since 1.19 */ +EAPI extern int ELPUT_EVENT_POINTER_MOTION; + /** * @file * @brief Ecore functions for dealing with libinput diff --git a/src/lib/elput/elput.c b/src/lib/elput/elput.c index 95d7a1e..561c98a 100644 --- a/src/lib/elput/elput.c +++ b/src/lib/elput/elput.c @@ -12,6 +12,7 @@ EAPI int ELPUT_EVENT_KEYMAP_SEND = -1; EAPI int ELPUT_EVENT_MODIFIERS_SEND = -1; EAPI int ELPUT_EVENT_DEVICE_CHANGE = -1; EAPI int ELPUT_EVENT_SESSION_ACTIVE = -1; +EAPI int ELPUT_EVENT_POINTER_MOTION = -1; EAPI int elput_init(void) @@ -36,6 +37,7 @@ elput_init(void) ELPUT_EVENT_MODIFIERS_SEND = ecore_event_type_new(); ELPUT_EVENT_DEVICE_CHANGE = ecore_event_type_new(); ELPUT_EVENT_SESSION_ACTIVE = ecore_event_type_new(); + ELPUT_EVENT_POINTER_MOTION = ecore_event_type_new(); return _elput_init_count; @@ -63,6 +65,7 @@ elput_shutdown(void) ELPUT_EVENT_MODIFIERS_SEND = -1; ELPUT_EVENT_DEVICE_CHANGE = -1; ELPUT_EVENT_SESSION_ACTIVE = -1; + ELPUT_EVENT_POINTER_MOTION = -1; eina_log_domain_unregister(_elput_log_dom); _elput_log_dom = -1; diff --git a/src/lib/elput/elput_evdev.c b/src/lib/elput/elput_evdev.c index c769853..9580f49 100644 --- a/src/lib/elput/elput_evdev.c +++ b/src/lib/elput/elput_evdev.c @@ -685,6 +685,23 @@ _pointer_motion_send(Elput_Device *edev) ecore_event_add(ECORE_EVENT_MOUSE_MOVE, ev, NULL, NULL); } +static void +_pointer_motion_relative(struct libinput_event_pointer *event) +{ + Elput_Event_Pointer_Motion *ev; + + ev = calloc(1, sizeof(Elput_Event_Pointer_Motion)); + EINA_SAFETY_ON_NULL_RETURN(ev); + + ev->time_usec = libinput_event_pointer_get_time_usec(event); + ev->dx = libinput_event_pointer_get_dx(event); + ev->dy = libinput_event_pointer_get_dy(event); + ev->dx_unaccel = libinput_event_pointer_get_dx_unaccelerated(event); + ev->dy_unaccel = libinput_event_pointer_get_dy_unaccelerated(event); + + ecore_event_add(ELPUT_EVENT_POINTER_MOTION, ev, NULL, NULL); +} + static Eina_Bool _pointer_motion(struct libinput_device *idev, struct libinput_event_pointer *event) { @@ -702,6 +719,7 @@ _pointer_motion(struct libinput_device *idev, struct libinput_event_pointer *eve ptr->timestamp = libinput_event_pointer_get_time(event); _pointer_motion_send(edev); + _pointer_motion_relative(event); return EINA_TRUE; } @@ -725,6 +743,7 @@ _pointer_motion_abs(struct libinput_device *idev, struct libinput_event_pointer /* TODO: these needs to run a matrix transform based on output */ _pointer_motion_send(edev); + _pointer_motion_relative(event); return EINA_TRUE; } --