Qt 6.x
The Qt SDK
Loading...
Searching...
No Matches
qwaylandprimaryselectionv1.cpp
Go to the documentation of this file.
1// Copyright (C) 2019 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
6#include "qwaylanddisplay_p.h"
8
9#include <QtGui/private/qguiapplication_p.h>
10
11#include <qpa/qplatformclipboard.h>
12
14
15namespace QtWaylandClient {
16
18 : zwp_primary_selection_device_manager_v1(display->wl_registry(), id, qMin(version, uint(1)))
19 , m_display(display)
20{
21}
22
24{
25 return new QWaylandPrimarySelectionDeviceV1(this, seat);
26}
27
29 : zwp_primary_selection_offer_v1(offer)
30 , m_display(display)
31 , m_mimeData(new QWaylandMimeData(this))
32{}
33
35{
36 receive(mimeType, fd);
37 wl_display_flush(m_display->wl_display());
38}
39
41{
42 m_mimeData->appendFormat(mime_type);
43}
44
45QWaylandPrimarySelectionDeviceV1::QWaylandPrimarySelectionDeviceV1(
47 : QtWayland::zwp_primary_selection_device_v1(manager->get_device(seat->wl_seat()))
48 , m_display(manager->display())
49 , m_seat(seat)
50{
51}
52
54{
55 destroy();
56}
57
59{
60 if (!m_selectionOffer)
61 return;
62
63 m_selectionOffer.reset();
65}
66
68{
69 if (source) {
71 m_selectionSource.reset();
73 });
74 }
75 set_selection(source ? source->object() : nullptr, m_seat->serial());
76 m_selectionSource.reset(source);
77}
78
80{
81 new QWaylandPrimarySelectionOfferV1(m_display, offer);
82}
83
85{
86
87 if (id)
88 m_selectionOffer.reset(static_cast<QWaylandPrimarySelectionOfferV1 *>(zwp_primary_selection_offer_v1_get_user_data(id)));
89 else
90 m_selectionOffer.reset();
91
93}
94
96 : QtWayland::zwp_primary_selection_source_v1(manager->create_source())
97 , m_mimeData(mimeData)
98{
99 if (!mimeData)
100 return;
101 for (auto &format : mimeData->formats())
102 offer(format);
103}
104
106{
107 destroy();
108}
109
111{
112 QByteArray content = QWaylandMimeHelper::getByteArray(m_mimeData, mime_type);
113 if (!content.isEmpty()) {
114 // Create a sigpipe handler that does nothing, or clients may be forced to terminate
115 // if the pipe is closed in the other end.
116 struct sigaction action, oldAction;
117 action.sa_handler = SIG_IGN;
118 sigemptyset (&action.sa_mask);
119 action.sa_flags = 0;
120
121 sigaction(SIGPIPE, &action, &oldAction);
122 ssize_t unused = write(fd, content.constData(), size_t(content.size()));
123 Q_UNUSED(unused);
124 sigaction(SIGPIPE, &oldAction, nullptr);
125 }
126 close(fd);
127}
128
129} // namespace QtWaylandClient
130
132
133#include "moc_qwaylandprimaryselectionv1_p.cpp"
\inmodule QtCore
Definition qbytearray.h:57
qsizetype size() const noexcept
Returns the number of bytes in this byte array.
Definition qbytearray.h:474
const char * constData() const noexcept
Returns a pointer to the const data stored in the byte array.
Definition qbytearray.h:122
bool isEmpty() const noexcept
Returns true if the byte array has size 0; otherwise returns false.
Definition qbytearray.h:106
static QPlatformIntegration * platformIntegration()
\inmodule QtCore
Definition qmimedata.h:16
virtual QStringList formats() const
Returns a list of formats supported by the object.
static QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *member, Qt::ConnectionType=Qt::AutoConnection)
\threadsafe
Definition qobject.cpp:2823
void emitChanged(QClipboard::Mode mode)
virtual QPlatformClipboard * clipboard() const
Accessor for the platform integration's clipboard.
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:127
static QByteArray getByteArray(QMimeData *mimeData, const QString &mimeType)
struct wl_display * wl_display() const
QWaylandPrimarySelectionDeviceManagerV1(QWaylandDisplay *display, uint id, uint version)
QWaylandPrimarySelectionDeviceV1 * createDevice(QWaylandInputDevice *seat)
void zwp_primary_selection_device_v1_selection(struct ::zwp_primary_selection_offer_v1 *id) override
void zwp_primary_selection_device_v1_data_offer(struct ::zwp_primary_selection_offer_v1 *offer) override
void setSelectionSource(QWaylandPrimarySelectionSourceV1 *source)
void startReceiving(const QString &mimeType, int fd) override
void zwp_primary_selection_offer_v1_offer(const QString &mime_type) override
QWaylandPrimarySelectionOfferV1(QWaylandDisplay *display, ::zwp_primary_selection_offer_v1 *offer)
QWaylandPrimarySelectionSourceV1(QWaylandPrimarySelectionDeviceManagerV1 *manager, QMimeData *mimeData)
void zwp_primary_selection_source_v1_send(const QString &mime_type, int32_t fd) override
#define this
Definition dialogs.cpp:9
struct wl_display * display
Definition linuxdmabuf.h:41
Combined button and popup list for selecting options.
const char * mimeType
constexpr const T & qMin(const T &a, const T &b)
Definition qminmax.h:40
GLenum GLuint id
[7]
GLuint64 GLenum GLint fd
GLint GLsizei GLsizei GLenum format
GLsizei GLsizei GLchar * source
#define Q_UNUSED(x)
unsigned int uint
Definition qtypes.h:29
gzip write("uncompressed data")
QMimeData * mimeData
QNetworkAccessManager manager