Reviewed-By: Derek Foreman <[email protected]> On 25/06/15 11:37 PM, Jonas Ådahl wrote: > Don't only send motions and buttons but also axis events through the > pointer grab interface. > > Signed-off-by: Jonas Ådahl <[email protected]> > --- > > Changes since v2: > > * Added WL_EXPORT (since it is called from plugins). > * Added doxygen (since its WL_EXPORT:ed) > > > desktop-shell/exposay.c | 7 +++++++ > desktop-shell/shell.c | 24 ++++++++++++++++++++++++ > ivi-shell/hmi-controller.c | 9 +++++++++ > src/compositor.h | 5 +++++ > src/data-device.c | 7 +++++++ > src/input.c | 38 ++++++++++++++++++++++++++++++++------ > 6 files changed, 84 insertions(+), 6 deletions(-) > > diff --git a/desktop-shell/exposay.c b/desktop-shell/exposay.c > index 4b65cbd..dc3fee0 100644 > --- a/desktop-shell/exposay.c > +++ b/desktop-shell/exposay.c > @@ -378,6 +378,12 @@ exposay_button(struct weston_pointer_grab *grab, > uint32_t time, uint32_t button, > } > > static void > +exposay_axis(struct weston_pointer_grab *grab, > + uint32_t time, uint32_t axis, wl_fixed_t value) > +{ > +} > + > +static void > exposay_pointer_grab_cancel(struct weston_pointer_grab *grab) > { > struct desktop_shell *shell = > @@ -390,6 +396,7 @@ static const struct weston_pointer_grab_interface > exposay_ptr_grab = { > exposay_focus, > exposay_motion, > exposay_button, > + exposay_axis, > exposay_pointer_grab_cancel, > }; > > diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c > index c05a5c7..aa26b58 100644 > --- a/desktop-shell/shell.c > +++ b/desktop-shell/shell.c > @@ -1658,6 +1658,12 @@ noop_grab_focus(struct weston_pointer_grab *grab) > } > > static void > +noop_grab_axis(struct weston_pointer_grab *grab, > + uint32_t time, uint32_t axis, wl_fixed_t value) > +{ > +} > + > +static void > constrain_position(struct weston_move_grab *move, int *cx, int *cy) > { > struct shell_surface *shsurf = move->base.shsurf; > @@ -1736,6 +1742,7 @@ static const struct weston_pointer_grab_interface > move_grab_interface = { > noop_grab_focus, > move_grab_motion, > move_grab_button, > + noop_grab_axis, > move_grab_cancel, > }; > > @@ -1895,6 +1902,7 @@ static const struct weston_pointer_grab_interface > resize_grab_interface = { > noop_grab_focus, > resize_grab_motion, > resize_grab_button, > + noop_grab_axis, > resize_grab_cancel, > }; > > @@ -2057,6 +2065,7 @@ static const struct weston_pointer_grab_interface > busy_cursor_grab_interface = { > busy_cursor_grab_focus, > busy_cursor_grab_motion, > busy_cursor_grab_button, > + noop_grab_axis, > busy_cursor_grab_cancel, > }; > > @@ -3224,6 +3233,19 @@ popup_grab_button(struct weston_pointer_grab *grab, > } > > static void > +popup_grab_axis(struct weston_pointer_grab *grab, > + uint32_t time, uint32_t axis, wl_fixed_t value) > +{ > + struct weston_pointer *pointer = grab->pointer; > + struct wl_resource *resource; > + struct wl_list *resource_list; > + > + resource_list = &pointer->focus_resource_list; > + wl_resource_for_each(resource, resource_list) > + wl_pointer_send_axis(resource, time, axis, value); > +} > + > +static void > popup_grab_cancel(struct weston_pointer_grab *grab) > { > popup_grab_end(grab->pointer); > @@ -3233,6 +3255,7 @@ static const struct weston_pointer_grab_interface > popup_grab_interface = { > popup_grab_focus, > popup_grab_motion, > popup_grab_button, > + popup_grab_axis, > popup_grab_cancel, > }; > > @@ -4960,6 +4983,7 @@ static const struct weston_pointer_grab_interface > rotate_grab_interface = { > noop_grab_focus, > rotate_grab_motion, > rotate_grab_button, > + noop_grab_axis, > rotate_grab_cancel, > }; > > diff --git a/ivi-shell/hmi-controller.c b/ivi-shell/hmi-controller.c > index cd79c38..bad2418 100644 > --- a/ivi-shell/hmi-controller.c > +++ b/ivi-shell/hmi-controller.c > @@ -1302,6 +1302,14 @@ pointer_noop_grab_focus(struct weston_pointer_grab > *grab) > } > > static void > +pointer_default_grab_axis(struct weston_pointer_grab *grab, > + uint32_t time, uint32_t axis, wl_fixed_t value) > +{ > + weston_pointer_send_axis(grab->pointer, time, axis, value); > +} > + > + > +static void > move_grab_update(struct move_grab *move, wl_fixed_t pointer[2]) > { > struct timespec timestamp = {0}; > @@ -1445,6 +1453,7 @@ static const struct weston_pointer_grab_interface > pointer_move_grab_workspace_in > pointer_noop_grab_focus, > pointer_move_grab_motion, > pointer_move_workspace_grab_button, > + pointer_default_grab_axis, > pointer_move_workspace_grab_cancel > }; > > diff --git a/src/compositor.h b/src/compositor.h > index 867f8c4..fc80eb0 100644 > --- a/src/compositor.h > +++ b/src/compositor.h > @@ -253,6 +253,8 @@ struct weston_pointer_grab_interface { > wl_fixed_t x, wl_fixed_t y); > void (*button)(struct weston_pointer_grab *grab, > uint32_t time, uint32_t button, uint32_t state); > + void (*axis)(struct weston_pointer_grab *grab, > + uint32_t time, uint32_t axis, wl_fixed_t value); > void (*cancel)(struct weston_pointer_grab *grab); > }; > > @@ -375,6 +377,9 @@ weston_pointer_create(struct weston_seat *seat); > void > weston_pointer_destroy(struct weston_pointer *pointer); > void > +weston_pointer_send_axis(struct weston_pointer *pointer, > + uint32_t time, uint32_t axis, wl_fixed_t value); > +void > weston_pointer_set_focus(struct weston_pointer *pointer, > struct weston_view *view, > wl_fixed_t sx, wl_fixed_t sy); > diff --git a/src/data-device.c b/src/data-device.c > index 3e7baf9..fc93435 100644 > --- a/src/data-device.c > +++ b/src/data-device.c > @@ -407,6 +407,12 @@ drag_grab_button(struct weston_pointer_grab *grab, > } > > static void > +drag_grab_axis(struct weston_pointer_grab *grab, > + uint32_t time, uint32_t axis, wl_fixed_t value) > +{ > +} > + > +static void > drag_grab_cancel(struct weston_pointer_grab *grab) > { > struct weston_pointer_drag *drag = > @@ -422,6 +428,7 @@ static const struct weston_pointer_grab_interface > pointer_drag_grab_interface = > drag_grab_focus, > drag_grab_motion, > drag_grab_button, > + drag_grab_axis, > drag_grab_cancel, > }; > > diff --git a/src/input.c b/src/input.c > index 6604c5d..0fb8836 100644 > --- a/src/input.c > +++ b/src/input.c > @@ -217,6 +217,36 @@ default_grab_pointer_button(struct weston_pointer_grab > *grab, > } > } > > +/** Send wl_pointer.axis events to focused resources. > + * > + * \param pointer The pointer where the axis events originates from. > + * \param time The timestamp of the event > + * \param axis The axis enum value of the event > + * \param value The axis value of the event > + * > + * For every resource that is currently in focus, send a wl_pointer.axis > event > + * with the passed parameters. The focused resources are the wl_pointer > + * resources of the client which currently has the surface with pointer > focus. > + */ > +WL_EXPORT void > +weston_pointer_send_axis(struct weston_pointer *pointer, > + uint32_t time, uint32_t axis, wl_fixed_t value) > +{ > + struct wl_resource *resource; > + struct wl_list *resource_list; > + > + resource_list = &pointer->focus_resource_list; > + wl_resource_for_each(resource, resource_list) > + wl_pointer_send_axis(resource, time, axis, value); > +} > + > +static void > +default_grab_pointer_axis(struct weston_pointer_grab *grab, > + uint32_t time, uint32_t axis, wl_fixed_t value) > +{ > + weston_pointer_send_axis(grab->pointer, time, axis, value); > +} > + > static void > default_grab_pointer_cancel(struct weston_pointer_grab *grab) > { > @@ -227,6 +257,7 @@ static const struct weston_pointer_grab_interface > default_grab_pointer_focus, > default_grab_pointer_motion, > default_grab_pointer_button, > + default_grab_pointer_axis, > default_grab_pointer_cancel, > }; > > @@ -1046,8 +1077,6 @@ notify_axis(struct weston_seat *seat, uint32_t time, > uint32_t axis, > { > struct weston_compositor *compositor = seat->compositor; > struct weston_pointer *pointer = seat->pointer; > - struct wl_resource *resource; > - struct wl_list *resource_list; > > weston_compositor_wake(compositor); > > @@ -1058,10 +1087,7 @@ notify_axis(struct weston_seat *seat, uint32_t time, > uint32_t axis, > time, axis, value)) > return; > > - resource_list = &pointer->focus_resource_list; > - wl_resource_for_each(resource, resource_list) > - wl_pointer_send_axis(resource, time, axis, > - value); > + pointer->grab->interface->axis(pointer->grab, time, axis, value); > } > > WL_EXPORT int >
_______________________________________________ wayland-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/wayland-devel
