diff --git a/types/data_device/wlr_data_device.c b/types/data_device/wlr_data_device.c index f868ea37..cda755b1 100644 --- a/types/data_device/wlr_data_device.c +++ b/types/data_device/wlr_data_device.c @@ -122,6 +122,9 @@ static void seat_client_selection_source_destroy( wl_container_of(listener, seat, selection_source_destroy); struct wlr_seat_client *seat_client = seat->keyboard_state.focused_client; + wl_list_remove(&seat->selection_source_destroy.link); + seat->selection_source = NULL; + if (seat_client && seat->keyboard_state.focused_surface) { struct wl_resource *resource; wl_resource_for_each(resource, &seat_client->data_devices) { @@ -129,8 +132,6 @@ static void seat_client_selection_source_destroy( } } - seat->selection_source = NULL; - wlr_signal_emit_safe(&seat->events.selection, seat); }