summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ivi-input-modules/ivi-input-controller/src/ivi-input-controller.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/ivi-input-modules/ivi-input-controller/src/ivi-input-controller.c b/ivi-input-modules/ivi-input-controller/src/ivi-input-controller.c
index 45f15fd..9ed85d2 100644
--- a/ivi-input-modules/ivi-input-controller/src/ivi-input-controller.c
+++ b/ivi-input-modules/ivi-input-controller/src/ivi-input-controller.c
@@ -443,11 +443,12 @@ static struct weston_pointer_grab_interface pointer_grab_interface = {
static void
touch_grab_down(struct weston_touch_grab *grab, uint32_t time, int touch_id,
- wl_fixed_t sx, wl_fixed_t sy)
+ wl_fixed_t x, wl_fixed_t y)
{
struct seat_ctx *seat = wl_container_of(grab, seat, touch_grab);
struct wl_display *display = grab->touch->seat->compositor->wl_display;
struct surface_ctx *surf_ctx;
+ wl_fixed_t sx, sy;
const struct ivi_controller_interface *interface =
seat->input_ctx->ivi_controller_interface;
@@ -458,6 +459,7 @@ touch_grab_down(struct weston_touch_grab *grab, uint32_t time, int touch_id,
/* For each surface_ctx, check for focus and send */
wl_list_for_each(surf_ctx, &seat->input_ctx->surface_list, link) {
struct weston_surface *surf;
+ struct weston_view *view;
struct wl_resource *resource;
struct wl_client *surface_client;
uint32_t serial;
@@ -487,6 +489,10 @@ touch_grab_down(struct weston_touch_grab *grab, uint32_t time, int touch_id,
if (!(surf_ctx->focus & ILM_INPUT_DEVICE_TOUCH))
continue;
+ /* Assume one view per surface */
+ view = wl_container_of(surf->views.next, view, surface_link);
+ weston_view_from_global_fixed(view, x, y, &sx, &sy);
+
surface_client = wl_resource_get_client(surf->resource);
serial = wl_display_next_serial(display);
wl_resource_for_each(resource, &grab->touch->resource_list) {
@@ -560,16 +566,18 @@ touch_grab_up(struct weston_touch_grab *grab, uint32_t time, int touch_id)
static void
touch_grab_motion(struct weston_touch_grab *grab, uint32_t time, int touch_id,
- wl_fixed_t sx, wl_fixed_t sy)
+ wl_fixed_t x, wl_fixed_t y)
{
struct seat_ctx *seat = wl_container_of(grab, seat, touch_grab);
struct surface_ctx *surf_ctx;
+ wl_fixed_t sx, sy;
const struct ivi_controller_interface *interface =
seat->input_ctx->ivi_controller_interface;
/* For each surface_ctx, check for focus and send */
wl_list_for_each(surf_ctx, &seat->input_ctx->surface_list, link) {
struct weston_surface *surf;
+ struct weston_view *view;
struct wl_resource *resource;
struct wl_client *surface_client;
@@ -579,7 +587,11 @@ touch_grab_motion(struct weston_touch_grab *grab, uint32_t time, int touch_id,
if (get_accepted_seat(surf_ctx, grab->touch->seat->seat_name) < 0)
continue;
+ /* Assume one view per surface */
surf = interface->surface_get_weston_surface(surf_ctx->layout_surface);
+ view = wl_container_of(surf->views.next, view, surface_link);
+ weston_view_from_global_fixed(view, x, y, &sx, &sy);
+
surface_client = wl_resource_get_client(surf->resource);
wl_resource_for_each(resource, &grab->touch->resource_list) {
if (wl_resource_get_client(resource) != surface_client)