From f9d578700e6f28d2d4dc1db3c81469640484473e Mon Sep 17 00:00:00 2001 From: Tony Crisci Date: Mon, 16 Oct 2017 09:14:16 -0400 Subject: [PATCH] bug: fix seat handle destroy handler --- types/wlr_data_device.c | 1 + types/wlr_seat.c | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/types/wlr_data_device.c b/types/wlr_data_device.c index 3fcd5873..8902c894 100644 --- a/types/wlr_data_device.c +++ b/types/wlr_data_device.c @@ -353,6 +353,7 @@ static void drag_handle_seat_unbound(struct wl_listener *listener, void *data) { if (drag->focus_handle == unbound_handle) { drag->focus_handle = NULL; + wl_list_remove(&drag->handle_unbound.link); } } diff --git a/types/wlr_seat.c b/types/wlr_seat.c index a4721e22..60db8d2e 100644 --- a/types/wlr_seat.c +++ b/types/wlr_seat.c @@ -142,6 +142,8 @@ static void wl_seat_get_touch(struct wl_client *client, static void wlr_seat_handle_resource_destroy(struct wl_resource *resource) { struct wlr_seat_handle *handle = wl_resource_get_user_data(resource); + wl_signal_emit(&handle->wlr_seat->events.client_unbound, handle); + if (handle == handle->wlr_seat->pointer_state.focused_handle) { handle->wlr_seat->pointer_state.focused_handle = NULL; } @@ -161,7 +163,6 @@ static void wlr_seat_handle_resource_destroy(struct wl_resource *resource) { if (handle->data_device) { wl_resource_destroy(handle->data_device); } - wl_signal_emit(&handle->wlr_seat->events.client_unbound, handle); wl_list_remove(&handle->link); free(handle); }