File indexing completed on 2024-11-10 04:57:31
0001 /* 0002 SPDX-FileCopyrightText: 2020 David Edmundson <davidedmundson@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0005 */ 0006 #include "primaryselectionsource_v1.h" 0007 #include "clientconnection.h" 0008 #include "primaryselectiondevicemanager_v1.h" 0009 #include "utils/resource.h" 0010 // Qt 0011 #include <QStringList> 0012 // Wayland 0013 #include <qwayland-server-wp-primary-selection-unstable-v1.h> 0014 // system 0015 #include <unistd.h> 0016 0017 namespace KWin 0018 { 0019 class PrimarySelectionSourceV1InterfacePrivate : public QtWaylandServer::zwp_primary_selection_source_v1 0020 { 0021 public: 0022 PrimarySelectionSourceV1InterfacePrivate(PrimarySelectionSourceV1Interface *q, ::wl_resource *resource); 0023 0024 QStringList mimeTypes; 0025 PrimarySelectionSourceV1Interface *q; 0026 0027 protected: 0028 void zwp_primary_selection_source_v1_destroy_resource(Resource *resource) override; 0029 void zwp_primary_selection_source_v1_offer(Resource *resource, const QString &mime_type) override; 0030 void zwp_primary_selection_source_v1_destroy(Resource *resource) override; 0031 }; 0032 0033 PrimarySelectionSourceV1InterfacePrivate::PrimarySelectionSourceV1InterfacePrivate(PrimarySelectionSourceV1Interface *_q, ::wl_resource *resource) 0034 : QtWaylandServer::zwp_primary_selection_source_v1(resource) 0035 , q(_q) 0036 { 0037 } 0038 0039 void PrimarySelectionSourceV1InterfacePrivate::zwp_primary_selection_source_v1_destroy_resource( 0040 QtWaylandServer::zwp_primary_selection_source_v1::Resource *resource) 0041 { 0042 Q_EMIT q->aboutToBeDestroyed(); 0043 delete q; 0044 } 0045 0046 void PrimarySelectionSourceV1InterfacePrivate::zwp_primary_selection_source_v1_offer(Resource *, const QString &mimeType) 0047 { 0048 mimeTypes << mimeType; 0049 Q_EMIT q->mimeTypeOffered(mimeType); 0050 } 0051 0052 void PrimarySelectionSourceV1InterfacePrivate::zwp_primary_selection_source_v1_destroy(QtWaylandServer::zwp_primary_selection_source_v1::Resource *resource) 0053 { 0054 wl_resource_destroy(resource->handle); 0055 } 0056 0057 PrimarySelectionSourceV1Interface::PrimarySelectionSourceV1Interface(::wl_resource *resource) 0058 : d(new PrimarySelectionSourceV1InterfacePrivate(this, resource)) 0059 { 0060 } 0061 0062 PrimarySelectionSourceV1Interface::~PrimarySelectionSourceV1Interface() = default; 0063 0064 void PrimarySelectionSourceV1Interface::requestData(const QString &mimeType, qint32 fd) 0065 { 0066 d->send_send(mimeType, fd); 0067 close(fd); 0068 } 0069 0070 void PrimarySelectionSourceV1Interface::cancel() 0071 { 0072 d->send_cancelled(); 0073 } 0074 0075 QStringList PrimarySelectionSourceV1Interface::mimeTypes() const 0076 { 0077 return d->mimeTypes; 0078 } 0079 0080 wl_client *PrimarySelectionSourceV1Interface::client() const 0081 { 0082 return d->resource()->client(); 0083 } 0084 0085 PrimarySelectionSourceV1Interface *PrimarySelectionSourceV1Interface::get(wl_resource *native) 0086 { 0087 if (auto sourcePrivate = resource_cast<PrimarySelectionSourceV1InterfacePrivate *>(native)) { 0088 return sourcePrivate->q; 0089 } 0090 return nullptr; 0091 } 0092 0093 } 0094 0095 #include "moc_primaryselectionsource_v1.cpp"