diff options
author | Imran Zaman <imran.zaman@intel.com> | 2014-12-16 18:45:36 +0200 |
---|---|---|
committer | Boram Park <boram1288.park@samsung.com> | 2015-11-06 14:10:04 +0900 |
commit | b8656725e53d2e0b0666c6c59b7e137591fe5990 (patch) | |
tree | 32757be4ccc9db4c76886031bf801406787ab242 | |
parent | ee625ba7b2f38473f362a489ad88345255570208 (diff) | |
download | weston-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.c | 58 |
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 |