Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qqnxclipboard.cpp
Go to the documentation of this file.
1// Copyright (C) 2011 - 2012 Research In Motion
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3// Qt-Security score:significant reason:default
4
5#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
6
7#if !defined(QT_NO_CLIPBOARD)
8
10
11#include <QtGui/QColor>
12
13#include <QtCore/QDebug>
14#include <QtCore/QMimeData>
15#include <QtCore/QStringList>
16#include <QtCore/QUrl>
17
18#include <clipboard/clipboard.h>
19#include <errno.h>
20
22
23Q_LOGGING_CATEGORY(lcQpaClipboard, "qt.qpa.clipboard");
24
25// null terminated array
26static const char *typeList[] = {"text/html", "text/plain", "image/png", "image/jpeg", "application/x-color", 0};
27
28static QByteArray readClipboardBuff(const char *type)
29{
30 char *pbuffer;
31 if (is_clipboard_format_present(type) == 0) {
32 int size = get_clipboard_data(type, &pbuffer);
33 if (size != -1 && pbuffer) {
34 const QByteArray result = QByteArray(pbuffer, size);
35 free(pbuffer);
36 return result;
37 }
38 }
39
40 return QByteArray();
41}
42
44{
46public:
48 : QMimeData(),
51 {
53
54 for (int i = 0; typeList[i] != 0; ++i) {
56 }
57 }
58
60 {
61 delete m_userMimeData;
62 }
63
68
70 {
72 qCDebug(lcQpaClipboard) << "mimetype=" << mimetype << "result=" << result;
73 return result;
74 }
75
77 {
79
82 result << format;
83 }
84
85 qCDebug(lcQpaClipboard) << "result=" << result;
86 return result;
87 }
88
90 {
91 delete m_userMimeData;
93
94 // system clipboard API doesn't allow detection of changes by other applications
95 // simulate an owner change through delayed invocation
96 // basically transfer ownership of data to the system clipboard once event processing resumes
98 QMetaObject::invokeMethod(this, "releaseOwnership", Qt::QueuedConnection);
99 }
100
102 {
103 return m_userMimeData;
104 }
105
106protected:
116
117private Q_SLOTS:
118 void releaseOwnership()
119 {
120 if (m_userMimeData) {
121 qCDebug(lcQpaClipboard) << "user data formats=" << m_userMimeData->formats() << "system formats=" << formats();
122 delete m_userMimeData;
123 m_userMimeData = 0;
125 }
126 }
127
128private:
130
131 QSet<QString> m_formatsToCheck;
132 QMimeData *m_userMimeData;
133};
134
136 : m_mimeData(new MimeData(this))
137{
138}
139
141{
142 delete m_mimeData;
143}
144
145void QQnxClipboard::setMimeData(QMimeData *data, QClipboard::Mode mode)
146{
147 if (mode != QClipboard::Clipboard)
148 return;
149
150 if (m_mimeData == data)
151 return;
152
153 if (m_mimeData->userMimeData() && m_mimeData->userMimeData() == data)
154 return;
155
156 empty_clipboard();
157
158 m_mimeData->clear();
159 m_mimeData->setUserMimeData(data);
160
161 if (data == 0) {
162 emitChanged(QClipboard::Clipboard);
163 return;
164 }
165
166 const QStringList formats = data->formats();
167 qCDebug(lcQpaClipboard) << "formats=" << formats;
168
169 Q_FOREACH (const QString &format, formats) {
170 const QByteArray buf = data->data(format);
171
172 if (buf.isEmpty())
173 continue;
174
175 int ret = set_clipboard_data(format.toUtf8().data(), buf.size(), buf.data());
176 qCDebug(lcQpaClipboard) << "set " << format << "to clipboard, size=" << buf.size() << ";ret=" << ret;
177 if (ret)
178 m_mimeData->addFormatToCheck(format);
179 }
180
181 emitChanged(QClipboard::Clipboard);
182}
183
184QMimeData *QQnxClipboard::mimeData(QClipboard::Mode mode)
185{
186 if (mode != QClipboard::Clipboard)
187 return 0;
188
189 if (m_mimeData->userMimeData())
190 return m_mimeData->userMimeData();
191
192 m_mimeData->clear();
193
194 return m_mimeData;
195}
196
197QT_END_NAMESPACE
198
199#include "qqnxclipboard.moc"
200
201#endif //QT_NO_CLIPBOARD
QMimeData * mimeData(QClipboard::Mode mode=QClipboard::Clipboard) override
void setMimeData(QMimeData *data, QClipboard::Mode mode=QClipboard::Clipboard) override
Q_LOGGING_CATEGORY(lcEventDispatcher, "qt.eventdispatcher")
static QByteArray readClipboardBuff(const char *type)
static const char * typeList[]