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 <[email protected]>
> ---
>  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
_______________________________________________
wayland-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to