Added touch support for wayland-backend
authorImran Zaman <imran.zaman@intel.com>
Tue, 16 Dec 2014 16:45:36 +0000 (18:45 +0200)
committerBoram Park <boram1288.park@samsung.com>
Fri, 6 Nov 2015 05:10:04 +0000 (14:10 +0900)
Change-Id: I5b6b2f63afa84fc8968937c7554da9be1e568376
Signed-off-by: Imran Zaman <imran.zaman@intel.com>
src/compositor-wayland.c

index 04eb045d068fdadc17c2807aa6fe465f065c2195..2bb10827ab176f4981d849329b7216b01efe273f 100644 (file)
@@ -1606,6 +1606,53 @@ static const struct wl_keyboard_listener keyboard_listener = {
        input_handle_repeat_info,
 };
 
+static void
+input_handle_touch_down(void *data, struct wl_touch *wl_touch,
+                      uint32_t serial, uint32_t time,
+                      struct wl_surface *surface, int32_t id, wl_fixed_t x_w,
+                      wl_fixed_t y_w)
+{
+       struct wayland_input *input = data;
+       notify_touch(&input->base, time, id, x_w, y_w, WL_TOUCH_DOWN);
+}
+
+static void
+input_handle_touch_up(void *data, struct wl_touch *wl_touch,
+               uint32_t serial, uint32_t time, int32_t id)
+{
+       struct wayland_input *input = data;
+       notify_touch(&input->base, time, id, 0, 0, WL_TOUCH_UP);
+}
+
+static void
+input_handle_touch_motion(void *data, struct wl_touch *wl_touch,
+                        uint32_t time, int32_t id, wl_fixed_t x_w,
+                        wl_fixed_t y_w)
+{
+       struct wayland_input *input = data;
+       notify_touch(&input->base, time, id, x_w, y_w, WL_TOUCH_MOTION);
+}
+
+static void
+input_handle_touch_frame(void *data, struct wl_touch *wl_touch)
+{
+       struct wayland_input *input = data;
+       notify_touch_frame(&input->base);
+}
+
+static void
+input_handle_touch_cancel(void *data, struct wl_touch *wl_touch)
+{
+}
+
+static const struct wl_touch_listener touch_listener = {
+               input_handle_touch_down,
+               input_handle_touch_up,
+               input_handle_touch_motion,
+               input_handle_touch_frame,
+               input_handle_touch_cancel,
+};
+
 static void
 input_handle_capabilities(void *data, struct wl_seat *seat,
                          enum wl_seat_capability caps)
@@ -1632,6 +1679,17 @@ input_handle_capabilities(void *data, struct wl_seat *seat,
                wl_keyboard_destroy(input->parent.keyboard);
                input->parent.keyboard = NULL;
        }
+
+       if ((caps & WL_SEAT_CAPABILITY_TOUCH) && !input->parent.touch) {
+               input->parent.touch = wl_seat_get_touch(seat);
+               weston_seat_init_touch (&input->base);
+               wl_touch_set_user_data(input->parent.touch, input);
+               wl_touch_add_listener(input->parent.touch, &touch_listener, input);
+       } else if (!(caps & WL_SEAT_CAPABILITY_TOUCH) && input->parent.touch) {
+               weston_seat_release_touch (&input->base);
+               wl_touch_destroy(input->parent.touch);
+               input->parent.touch = NULL;
+       }
 }
 
 static void