diff --git a/src/wayland/datadevice_interface.cpp b/src/wayland/datadevice_interface.cpp index 487f315367..5bb4922aaa 100644 --- a/src/wayland/datadevice_interface.cpp +++ b/src/wayland/datadevice_interface.cpp @@ -57,13 +57,15 @@ private: void setSelection(DataSourceInterface *dataSource); static void startDragCallback(wl_client *client, wl_resource *resource, wl_resource *source, wl_resource *origin, wl_resource *icon, uint32_t serial); static void setSelectionCallback(wl_client *client, wl_resource *resource, wl_resource *source, uint32_t serial); + static void releaseCallback(wl_client *client, wl_resource *resource); static const struct wl_data_device_interface s_interface; }; const struct wl_data_device_interface DataDeviceInterface::Private::s_interface = { startDragCallback, - setSelectionCallback + setSelectionCallback, + releaseCallback }; DataDeviceInterface::Private::Private(SeatInterface *seat, DataDeviceInterface *q, DataDeviceManagerInterface *manager, wl_resource *parentResource) @@ -103,6 +105,14 @@ void DataDeviceInterface::Private::setSelectionCallback(wl_client *client, wl_re cast(resource)->setSelection(DataSourceInterface::get(source)); } +void DataDeviceInterface::Private::releaseCallback(wl_client *client, wl_resource *resource) +{ + Q_UNUSED(client); + Private *p = reinterpret_cast(wl_resource_get_user_data(resource)); + wl_resource_destroy(resource); + p->q->deleteLater(); +} + void DataDeviceInterface::Private::setSelection(DataSourceInterface *dataSource) { Q_Q(DataDeviceInterface);