[PATCH libinput 01/24] Add LIBINPUT_EVENT_POINTER_AXIS_FRAME event
Peter Hutterer
peter.hutterer at who-t.net
Sun Apr 27 22:01:32 PDT 2014
On Mon, Apr 21, 2014 at 07:11:10PM +0200, Carlos Garnacho wrote:
> This event marks the end of 1..N simultaneous axis changes. Will be
> useful to have users compress vscroll/hscroll processing in a single
> point, and will prove even more useful on devices with a higher number
> of axes, like tablets.
do we get any particular benefit from having this AXIS_FRAME instead of just
POINTER_FRAME? The devices we're targeting here send x/y coordinate
information as well so making it a full pointer frame event is useful.
when I look at 02/24, that's one good example for POINTER_FRAME. You may get
x, y, wheel, hwheel in one EV_SYN, but then you forward it as
POINTER_MOTION
POINTER_AXIS
POINTER_AXIS_FRAME
POINTER_AXIS
POINTER_AXIS_FRAME
which is unbalanced. see my comment in 0/24 though, there is an argument for
just making these events separate events altogether.
Cheers,
Peter
> Signed-off-by: Carlos Garnacho <carlosg at gnome.org>
> ---
> src/libinput-private.h | 4 ++++
> src/libinput.c | 23 +++++++++++++++++++++++
> src/libinput.h | 5 +++++
> 3 files changed, 32 insertions(+)
>
> diff --git a/src/libinput-private.h b/src/libinput-private.h
> index 21627b0..4eac89d 100644
> --- a/src/libinput-private.h
> +++ b/src/libinput-private.h
> @@ -155,6 +155,10 @@ pointer_notify_axis(struct libinput_device *device,
> li_fixed_t value);
>
> void
> +pointer_notify_axis_frame(struct libinput_device *device,
> + uint32_t time);
> +
> +void
> touch_notify_touch_down(struct libinput_device *device,
> uint32_t time,
> int32_t slot,
> diff --git a/src/libinput.c b/src/libinput.c
> index 1e31be3..4ecd068 100644
> --- a/src/libinput.c
> +++ b/src/libinput.c
> @@ -175,6 +175,7 @@ libinput_event_get_pointer_event(struct libinput_event *event)
> case LIBINPUT_EVENT_POINTER_MOTION_ABSOLUTE:
> case LIBINPUT_EVENT_POINTER_BUTTON:
> case LIBINPUT_EVENT_POINTER_AXIS:
> + case LIBINPUT_EVENT_POINTER_AXIS_FRAME:
> return (struct libinput_event_pointer *) event;
> case LIBINPUT_EVENT_TOUCH_DOWN:
> case LIBINPUT_EVENT_TOUCH_UP:
> @@ -202,6 +203,7 @@ libinput_event_get_keyboard_event(struct libinput_event *event)
> case LIBINPUT_EVENT_POINTER_MOTION_ABSOLUTE:
> case LIBINPUT_EVENT_POINTER_BUTTON:
> case LIBINPUT_EVENT_POINTER_AXIS:
> + case LIBINPUT_EVENT_POINTER_AXIS_FRAME:
> case LIBINPUT_EVENT_TOUCH_DOWN:
> case LIBINPUT_EVENT_TOUCH_UP:
> case LIBINPUT_EVENT_TOUCH_MOTION:
> @@ -226,6 +228,7 @@ libinput_event_get_touch_event(struct libinput_event *event)
> case LIBINPUT_EVENT_POINTER_MOTION_ABSOLUTE:
> case LIBINPUT_EVENT_POINTER_BUTTON:
> case LIBINPUT_EVENT_POINTER_AXIS:
> + case LIBINPUT_EVENT_POINTER_AXIS_FRAME:
> break;
> case LIBINPUT_EVENT_TOUCH_DOWN:
> case LIBINPUT_EVENT_TOUCH_UP:
> @@ -252,6 +255,7 @@ libinput_event_get_device_notify_event(struct libinput_event *event)
> case LIBINPUT_EVENT_POINTER_MOTION_ABSOLUTE:
> case LIBINPUT_EVENT_POINTER_BUTTON:
> case LIBINPUT_EVENT_POINTER_AXIS:
> + case LIBINPUT_EVENT_POINTER_AXIS_FRAME:
> case LIBINPUT_EVENT_TOUCH_DOWN:
> case LIBINPUT_EVENT_TOUCH_UP:
> case LIBINPUT_EVENT_TOUCH_MOTION:
> @@ -844,6 +848,25 @@ pointer_notify_axis(struct libinput_device *device,
> }
>
> void
> +pointer_notify_axis_frame(struct libinput_device *device,
> + uint32_t time)
> +{
> + struct libinput_event_pointer *axis_frame_event;
> +
> + axis_frame_event = zalloc(sizeof *axis_frame_event);
> + if (!axis_frame_event)
> + return;
> +
> + *axis_frame_event = (struct libinput_event_pointer) {
> + .time = time,
> + };
> +
> + post_device_event(device,
> + LIBINPUT_EVENT_POINTER_AXIS_FRAME,
> + &axis_frame_event->base);
> +}
> +
> +void
> touch_notify_touch_down(struct libinput_device *device,
> uint32_t time,
> int32_t slot,
> diff --git a/src/libinput.h b/src/libinput.h
> index 810a66c..5b3d79e 100644
> --- a/src/libinput.h
> +++ b/src/libinput.h
> @@ -146,6 +146,11 @@ enum libinput_event_type {
> LIBINPUT_EVENT_POINTER_MOTION_ABSOLUTE,
> LIBINPUT_EVENT_POINTER_BUTTON,
> LIBINPUT_EVENT_POINTER_AXIS,
> + /**
> + * Signals the end of a set of axis changes on the pointer. This
> + * event has no coordinate information attached.
> + */
> + LIBINPUT_EVENT_POINTER_AXIS_FRAME,
>
> LIBINPUT_EVENT_TOUCH_DOWN = 500,
> LIBINPUT_EVENT_TOUCH_UP,
> --
> 1.9.0
More information about the wayland-devel
mailing list