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
