We should use wl_*_release when available instead of destroy, and we should update weston's internal input tracking with weston_seat_releases
Signed-off-by: Derek Foreman <der...@osg.samsung.com> --- src/compositor-wayland.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/compositor-wayland.c b/src/compositor-wayland.c index dbbc1ad..b25f4ea 100644 --- a/src/compositor-wayland.c +++ b/src/compositor-wayland.c @@ -72,6 +72,7 @@ struct wayland_backend { int use_pixman; int sprawl_across_outputs; + int seat_version; struct theme *theme; cairo_device_t *frame_device; @@ -1620,6 +1621,7 @@ input_handle_capabilities(void *data, struct wl_seat *seat, enum wl_seat_capability caps) { struct wayland_input *input = data; + struct wayland_backend *backend = input->backend; if ((caps & WL_SEAT_CAPABILITY_POINTER) && !input->parent.pointer) { input->parent.pointer = wl_seat_get_pointer(seat); @@ -1628,8 +1630,12 @@ input_handle_capabilities(void *data, struct wl_seat *seat, &pointer_listener, input); weston_seat_init_pointer(&input->base); } else if (!(caps & WL_SEAT_CAPABILITY_POINTER) && input->parent.pointer) { - wl_pointer_destroy(input->parent.pointer); + if (backend->seat_version >= WL_POINTER_RELEASE_SINCE_VERSION) + wl_pointer_release(input->parent.pointer); + else + wl_pointer_destroy(input->parent.pointer); input->parent.pointer = NULL; + weston_seat_release_pointer(&input->base); } if ((caps & WL_SEAT_CAPABILITY_KEYBOARD) && !input->parent.keyboard) { @@ -1638,8 +1644,12 @@ input_handle_capabilities(void *data, struct wl_seat *seat, wl_keyboard_add_listener(input->parent.keyboard, &keyboard_listener, input); } else if (!(caps & WL_SEAT_CAPABILITY_KEYBOARD) && input->parent.keyboard) { - wl_keyboard_destroy(input->parent.keyboard); + if (backend->seat_version >= WL_KEYBOARD_RELEASE_SINCE_VERSION) + wl_keyboard_release(input->parent.keyboard); + else + wl_keyboard_destroy(input->parent.keyboard); input->parent.keyboard = NULL; + weston_seat_release_keyboard(&input->base); } } @@ -1823,6 +1833,7 @@ registry_handle_global(void *data, struct wl_registry *registry, uint32_t name, &_wl_fullscreen_shell_interface, 1); } else if (strcmp(interface, "wl_seat") == 0) { display_add_seat(b, name, version); + b->seat_version = version; } else if (strcmp(interface, "wl_output") == 0) { wayland_backend_register_output(b, name); } else if (strcmp(interface, "wl_shm") == 0) { -- 2.5.3 _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel