[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