diff --git a/autotests/client/test_wayland_seat.cpp b/autotests/client/test_wayland_seat.cpp --- a/autotests/client/test_wayland_seat.cpp +++ b/autotests/client/test_wayland_seat.cpp @@ -1866,6 +1866,8 @@ // now let's set the selection m_seatInterface->setSelection(ddi); + // BUG 383054 + ddi->sendSelection(ddi); } void TestWaylandSeat::testDataDeviceForKeyboardSurface() diff --git a/src/server/dataoffer_interface.cpp b/src/server/dataoffer_interface.cpp --- a/src/server/dataoffer_interface.cpp +++ b/src/server/dataoffer_interface.cpp @@ -93,29 +93,33 @@ DataOfferInterface::DataOfferInterface(DataSourceInterface *source, DataDeviceInterface *parentInterface, wl_resource *parentResource) : Resource(new Private(source, parentInterface, this, parentResource)) { - Q_ASSERT(source); - connect(source, &DataSourceInterface::mimeTypeOffered, this, - [this](const QString &mimeType) { - Q_D(); - if (!d->resource) { - return; + if (source) { + connect(source, &DataSourceInterface::mimeTypeOffered, this, + [this](const QString &mimeType) { + Q_D(); + if (!d->resource) { + return; + } + wl_data_offer_send_offer(d->resource, mimeType.toUtf8().constData()); } - wl_data_offer_send_offer(d->resource, mimeType.toUtf8().constData()); - } - ); - QObject::connect(source, &QObject::destroyed, this, - [this] { - Q_D(); - d->source = nullptr; - } - ); + ); + QObject::connect(source, &QObject::destroyed, this, + [this] { + Q_D(); + d->source = nullptr; + } + ); + } } DataOfferInterface::~DataOfferInterface() = default; void DataOfferInterface::sendAllOffers() { Q_D(); + if (!d->source) { + return; + } for (const QString &mimeType : d->source->mimeTypes()) { wl_data_offer_send_offer(d->resource, mimeType.toUtf8().constData()); }