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>
This commit is contained in:
Jonas Ådahl 2014-10-04 16:28:29 +02:00
parent 22faea11c8
commit 0336ca0cc5
6 changed files with 83 additions and 6 deletions

View File

@ -385,6 +385,12 @@ exposay_button(struct weston_pointer_grab *grab, uint32_t time, uint32_t button,
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
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_motion,
exposay_button,
exposay_axis,
exposay_pointer_grab_cancel,
};

View File

@ -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
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,
move_grab_motion,
move_grab_button,
noop_grab_axis,
move_grab_cancel,
};
@ -1945,6 +1952,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,
};
@ -2109,6 +2117,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,
};
@ -3290,6 +3299,19 @@ popup_grab_button(struct weston_pointer_grab *grab,
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
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_motion,
popup_grab_button,
popup_grab_axis,
popup_grab_cancel,
};
@ -5000,6 +5023,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,
};

View File

@ -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
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_move_grab_motion,
pointer_move_workspace_grab_button,
pointer_default_grab_axis,
pointer_move_workspace_grab_cancel
};

View File

@ -247,6 +247,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);
};
@ -369,6 +371,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);

View File

@ -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
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_motion,
drag_grab_button,
drag_grab_axis,
drag_grab_cancel,
};

View File

@ -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
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_motion,
default_grab_pointer_button,
default_grab_pointer_axis,
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_pointer *pointer = weston_seat_get_pointer(seat);
struct wl_resource *resource;
struct wl_list *resource_list;
weston_compositor_wake(compositor);
@ -1096,10 +1125,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