diff --git a/types/data_device/wlr_drag.c b/types/data_device/wlr_drag.c index 8c17eeb68..df0ce3b83 100644 --- a/types/data_device/wlr_drag.c +++ b/types/data_device/wlr_drag.c @@ -292,6 +292,10 @@ static uint32_t drag_handle_touch_up(struct wlr_seat_touch_grab *grab, if (drag->focus_client) { drag_drop(drag, time); + } else if (drag->source->impl->dnd_finish) { + // This will end the grab and free `drag` + wlr_data_source_destroy(drag->source); + return 0; } drag_destroy(drag);