input: Pass axis events through pointer grab interfaces

Don't only send motions and buttons but also axis events through the
pointer grab interface.

Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
Reviewed-By: Derek Foreman <derekf@osg.samsung.com>
dev
Jonas Ådahl 10 years ago
parent 22faea11c8
commit 0336ca0cc5
  1. 7
      desktop-shell/exposay.c
  2. 24
      desktop-shell/shell.c
  3. 8
      ivi-shell/hmi-controller.c
  4. 5
      src/compositor.h
  5. 7
      src/data-device.c
  6. 38
      src/input.c

@ -385,6 +385,12 @@ exposay_button(struct weston_pointer_grab *grab, uint32_t time, uint32_t button,
shell->exposay.clicked = NULL; shell->exposay.clicked = NULL;
} }
static void
exposay_axis(struct weston_pointer_grab *grab,
uint32_t time, uint32_t axis, wl_fixed_t value)
{
}
static void static void
exposay_pointer_grab_cancel(struct weston_pointer_grab *grab) exposay_pointer_grab_cancel(struct weston_pointer_grab *grab)
{ {
@ -398,6 +404,7 @@ static const struct weston_pointer_grab_interface exposay_ptr_grab = {
exposay_focus, exposay_focus,
exposay_motion, exposay_motion,
exposay_button, exposay_button,
exposay_axis,
exposay_pointer_grab_cancel, exposay_pointer_grab_cancel,
}; };

@ -1700,6 +1700,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 static void
constrain_position(struct weston_move_grab *move, int *cx, int *cy) constrain_position(struct weston_move_grab *move, int *cx, int *cy)
{ {
@ -1782,6 +1788,7 @@ static const struct weston_pointer_grab_interface move_grab_interface = {
noop_grab_focus, noop_grab_focus,
move_grab_motion, move_grab_motion,
move_grab_button, move_grab_button,
noop_grab_axis,
move_grab_cancel, move_grab_cancel,
}; };
@ -1945,6 +1952,7 @@ static const struct weston_pointer_grab_interface resize_grab_interface = {
noop_grab_focus, noop_grab_focus,
resize_grab_motion, resize_grab_motion,
resize_grab_button, resize_grab_button,
noop_grab_axis,
resize_grab_cancel, resize_grab_cancel,
}; };
@ -2109,6 +2117,7 @@ static const struct weston_pointer_grab_interface busy_cursor_grab_interface = {
busy_cursor_grab_focus, busy_cursor_grab_focus,
busy_cursor_grab_motion, busy_cursor_grab_motion,
busy_cursor_grab_button, busy_cursor_grab_button,
noop_grab_axis,
busy_cursor_grab_cancel, busy_cursor_grab_cancel,
}; };
@ -3290,6 +3299,19 @@ popup_grab_button(struct weston_pointer_grab *grab,
shseat->popup_grab.initial_up = 1; shseat->popup_grab.initial_up = 1;
} }
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 static void
popup_grab_cancel(struct weston_pointer_grab *grab) popup_grab_cancel(struct weston_pointer_grab *grab)
{ {
@ -3300,6 +3322,7 @@ static const struct weston_pointer_grab_interface popup_grab_interface = {
popup_grab_focus, popup_grab_focus,
popup_grab_motion, popup_grab_motion,
popup_grab_button, popup_grab_button,
popup_grab_axis,
popup_grab_cancel, popup_grab_cancel,
}; };
@ -5000,6 +5023,7 @@ static const struct weston_pointer_grab_interface rotate_grab_interface = {
noop_grab_focus, noop_grab_focus,
rotate_grab_motion, rotate_grab_motion,
rotate_grab_button, rotate_grab_button,
noop_grab_axis,
rotate_grab_cancel, rotate_grab_cancel,
}; };

@ -1322,6 +1322,13 @@ 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 static void
move_grab_update(struct move_grab *move, wl_fixed_t pointer[2]) move_grab_update(struct move_grab *move, wl_fixed_t pointer[2])
{ {
@ -1466,6 +1473,7 @@ static const struct weston_pointer_grab_interface pointer_move_grab_workspace_in
pointer_noop_grab_focus, pointer_noop_grab_focus,
pointer_move_grab_motion, pointer_move_grab_motion,
pointer_move_workspace_grab_button, pointer_move_workspace_grab_button,
pointer_default_grab_axis,
pointer_move_workspace_grab_cancel pointer_move_workspace_grab_cancel
}; };

@ -247,6 +247,8 @@ struct weston_pointer_grab_interface {
wl_fixed_t x, wl_fixed_t y); wl_fixed_t x, wl_fixed_t y);
void (*button)(struct weston_pointer_grab *grab, void (*button)(struct weston_pointer_grab *grab,
uint32_t time, uint32_t button, uint32_t state); 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); void (*cancel)(struct weston_pointer_grab *grab);
}; };
@ -369,6 +371,9 @@ weston_pointer_create(struct weston_seat *seat);
void void
weston_pointer_destroy(struct weston_pointer *pointer); weston_pointer_destroy(struct weston_pointer *pointer);
void 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, weston_pointer_set_focus(struct weston_pointer *pointer,
struct weston_view *view, struct weston_view *view,
wl_fixed_t sx, wl_fixed_t sy); wl_fixed_t sx, wl_fixed_t sy);

@ -410,6 +410,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 static void
drag_grab_cancel(struct weston_pointer_grab *grab) drag_grab_cancel(struct weston_pointer_grab *grab)
{ {
@ -426,6 +432,7 @@ static const struct weston_pointer_grab_interface pointer_drag_grab_interface =
drag_grab_focus, drag_grab_focus,
drag_grab_motion, drag_grab_motion,
drag_grab_button, drag_grab_button,
drag_grab_axis,
drag_grab_cancel, drag_grab_cancel,
}; };

@ -221,6 +221,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 static void
default_grab_pointer_cancel(struct weston_pointer_grab *grab) default_grab_pointer_cancel(struct weston_pointer_grab *grab)
{ {
@ -231,6 +261,7 @@ static const struct weston_pointer_grab_interface
default_grab_pointer_focus, default_grab_pointer_focus,
default_grab_pointer_motion, default_grab_pointer_motion,
default_grab_pointer_button, default_grab_pointer_button,
default_grab_pointer_axis,
default_grab_pointer_cancel, default_grab_pointer_cancel,
}; };
@ -1084,8 +1115,6 @@ notify_axis(struct weston_seat *seat, uint32_t time, uint32_t axis,
{ {
struct weston_compositor *compositor = seat->compositor; struct weston_compositor *compositor = seat->compositor;
struct weston_pointer *pointer = weston_seat_get_pointer(seat); struct weston_pointer *pointer = weston_seat_get_pointer(seat);
struct wl_resource *resource;
struct wl_list *resource_list;
weston_compositor_wake(compositor); weston_compositor_wake(compositor);
@ -1096,10 +1125,7 @@ notify_axis(struct weston_seat *seat, uint32_t time, uint32_t axis,
time, axis, value)) time, axis, value))
return; return;
resource_list = &pointer->focus_resource_list; pointer->grab->interface->axis(pointer->grab, time, axis, value);
wl_resource_for_each(resource, resource_list)
wl_pointer_send_axis(resource, time, axis,
value);
} }
WL_EXPORT int WL_EXPORT int

Loading…
Cancel
Save