summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorImran Zaman <imran.zaman@intel.com>2014-12-16 18:45:36 +0200
committerBoram Park <boram1288.park@samsung.com>2015-11-06 14:10:04 +0900
commitb8656725e53d2e0b0666c6c59b7e137591fe5990 (patch)
tree32757be4ccc9db4c76886031bf801406787ab242
parentee625ba7b2f38473f362a489ad88345255570208 (diff)
downloadweston-b8656725e53d2e0b0666c6c59b7e137591fe5990.tar.gz
weston-b8656725e53d2e0b0666c6c59b7e137591fe5990.tar.bz2
weston-b8656725e53d2e0b0666c6c59b7e137591fe5990.zip
Added touch support for wayland-backend
Change-Id: I5b6b2f63afa84fc8968937c7554da9be1e568376 Signed-off-by: Imran Zaman <imran.zaman@intel.com>
-rw-r--r--src/compositor-wayland.c58
1 files changed, 58 insertions, 0 deletions
diff --git a/src/compositor-wayland.c b/src/compositor-wayland.c
index 04eb045d..2bb10827 100644
--- a/src/compositor-wayland.c
+++ b/src/compositor-wayland.c
@@ -1607,6 +1607,53 @@ static const struct wl_keyboard_listener keyboard_listener = {
};
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