/* SPDX-FileCopyrightText: 2020 David Edmundson SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL */ #include "primaryselectionsource_v1_interface.h" #include "primaryselectiondevicemanager_v1_interface.h" #include "clientconnection.h" // Qt #include // Wayland #include // system #include namespace KWaylandServer { class PrimarySelectionSourceV1InterfacePrivate : public QtWaylandServer::zwp_primary_selection_source_v1 { public: PrimarySelectionSourceV1InterfacePrivate(PrimarySelectionSourceV1Interface *q, ::wl_resource *resource); QStringList mimeTypes; PrimarySelectionSourceV1Interface *q; protected: void zwp_primary_selection_source_v1_destroy_resource(Resource *resource) override; void zwp_primary_selection_source_v1_offer(Resource *resource, const QString &mime_type) override; void zwp_primary_selection_source_v1_destroy(Resource *resource) override; }; PrimarySelectionSourceV1InterfacePrivate::PrimarySelectionSourceV1InterfacePrivate(PrimarySelectionSourceV1Interface *_q, ::wl_resource *resource) : QtWaylandServer::zwp_primary_selection_source_v1(resource) , q(_q) { } void PrimarySelectionSourceV1InterfacePrivate::zwp_primary_selection_source_v1_destroy_resource(QtWaylandServer::zwp_primary_selection_source_v1::Resource *resource) { Q_UNUSED(resource) emit q->aboutToBeUnbound(); emit q->unbound(); delete q; } void PrimarySelectionSourceV1InterfacePrivate::zwp_primary_selection_source_v1_offer(Resource *, const QString &mimeType) { mimeTypes << mimeType; emit q->mimeTypeOffered(mimeType); } void PrimarySelectionSourceV1InterfacePrivate::zwp_primary_selection_source_v1_destroy(QtWaylandServer::zwp_primary_selection_source_v1::Resource *resource) { wl_resource_destroy(resource->handle); } PrimarySelectionSourceV1Interface::PrimarySelectionSourceV1Interface(PrimarySelectionDeviceManagerV1Interface *parent, ::wl_resource *resource) : AbstractDataSource(nullptr, parent) , d(new PrimarySelectionSourceV1InterfacePrivate(this, resource)) { } PrimarySelectionSourceV1Interface::~PrimarySelectionSourceV1Interface() = default; void PrimarySelectionSourceV1Interface::requestData(const QString &mimeType, qint32 fd) { d->send_send(mimeType, fd); close(fd); } void PrimarySelectionSourceV1Interface::cancel() { d->send_cancelled(); } QStringList PrimarySelectionSourceV1Interface::mimeTypes() const { return d->mimeTypes; } wl_client *PrimarySelectionSourceV1Interface::client() { return d->resource()->client(); } PrimarySelectionSourceV1Interface *PrimarySelectionSourceV1Interface::get(wl_resource *native) { auto priv = static_cast(QtWaylandServer::zwp_primary_selection_source_v1::Resource::fromResource(native)->object()); return priv->q; } }