summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/cocoa/qmacclipboard.mm
diff options
context:
space:
mode:
authorVolker Hilsheimer <volker.hilsheimer@qt.io>2022-11-15 11:36:51 +0100
committerVolker Hilsheimer <volker.hilsheimer@qt.io>2022-11-16 22:14:00 +0100
commit649dccf57b18626f6a0790d46e5e619e4e603078 (patch)
tree8ace4469cf575ad8cbf0e50407688a3f13b99add /src/plugins/platforms/cocoa/qmacclipboard.mm
parent427152c9b9e12d74fc5c7526148d09c5fba9263b (diff)
Reintroduce converter APIs for supporting native clipboard formats
In Qt 5, QWin(dows)Mime and QMacMime lived in the respective Extras modules, which were removed and partially folded into the relevant modules in Qt. QWindowsMime and QMacMime continued to provide the abstraction for implementing built-in support for native clipboard formats and UTIs within Qt, but only as private APIs. After the recent clean up of those APIs and respective infrastructure, we can now bring them back as public converter interfaces. Application developers can subclass those and instantiate an instance of their implementation to add support for platform or application specific data formats. These interfaces are not in the QNativeInterface namespace, as applications don't call into Windows or macOS using those interfaces. I.e. there is no class on which an application would call auto *converter= nativeInterface<QWindowsMimeConverter>(); Also, since applications override those converter types, we do want to guarantee binary and source compatibility. [ChangeLog][QtGui][QWindowsMimeConverter] Reintroduced to allow applications to add support for conversion from and to Windows-native clipboard formats to MIME-encoded data. [ChangeLog][QtGui][QUtiMimeConverter] Reintroduced to allow applications to add support for conversion from and to clipboard data on macOS and iOS to MIME-encoded data. Fixes: QTBUG-93632 Change-Id: Iebd909c3970015d203f59d5ab15e306b3d312f6e Reviewed-by: Yuhang Zhao <2546789017@qq.com> Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Diffstat (limited to 'src/plugins/platforms/cocoa/qmacclipboard.mm')
-rw-r--r--src/plugins/platforms/cocoa/qmacclipboard.mm24
1 files changed, 12 insertions, 12 deletions
diff --git a/src/plugins/platforms/cocoa/qmacclipboard.mm b/src/plugins/platforms/cocoa/qmacclipboard.mm
index 48b440923a..3a39fdfb0f 100644
--- a/src/plugins/platforms/cocoa/qmacclipboard.mm
+++ b/src/plugins/platforms/cocoa/qmacclipboard.mm
@@ -5,7 +5,7 @@
#include "qmacclipboard.h"
#include <QtGui/private/qmacmimeregistry_p.h>
-#include <QtGui/private/qmacmime_p.h>
+#include <QtGui/qutimimeconverter.h>
#include <QtGui/qclipboard.h>
#include <QtGui/qguiapplication.h>
#include <QtGui/qbitmap.h>
@@ -54,7 +54,7 @@ private:
QMacMimeData();
};
-QMacPasteboard::Promise::Promise(int itemId, const QMacMime *c, const QString &m, QMimeData *md, int o, DataRequestType drt)
+QMacPasteboard::Promise::Promise(int itemId, const QUtiMimeConverter *c, const QString &m, QMimeData *md, int o, DataRequestType drt)
: itemId(itemId), offset(o), converter(c), mime(m), dataRequestType(drt)
{
// Request the data from the application immediately for eager requests.
@@ -69,7 +69,7 @@ QMacPasteboard::Promise::Promise(int itemId, const QMacMime *c, const QString &m
}
}
-QMacPasteboard::QMacPasteboard(PasteboardRef p, QMacMime::HandlerScope scope)
+QMacPasteboard::QMacPasteboard(PasteboardRef p, QUtiMimeConverter::HandlerScope scope)
: scope(scope)
{
mac_mime_source = false;
@@ -78,7 +78,7 @@ QMacPasteboard::QMacPasteboard(PasteboardRef p, QMacMime::HandlerScope scope)
resolvingBeforeDestruction = false;
}
-QMacPasteboard::QMacPasteboard(QMacMime::HandlerScope scope)
+QMacPasteboard::QMacPasteboard(QUtiMimeConverter::HandlerScope scope)
: scope(scope)
{
mac_mime_source = false;
@@ -91,7 +91,7 @@ QMacPasteboard::QMacPasteboard(QMacMime::HandlerScope scope)
resolvingBeforeDestruction = false;
}
-QMacPasteboard::QMacPasteboard(CFStringRef name, QMacMime::HandlerScope scope)
+QMacPasteboard::QMacPasteboard(CFStringRef name, QUtiMimeConverter::HandlerScope scope)
: scope(scope)
{
mac_mime_source = false;
@@ -111,7 +111,7 @@ QMacPasteboard::~QMacPasteboard()
Commit all promises for paste when shutting down,
unless we are the stack-allocated clipboard used by QCocoaDrag.
*/
- if (scope == QMacMime::HandlerScope::DnD)
+ if (scope == QUtiMimeConverter::HandlerScope::DnD)
resolvingBeforeDestruction = true;
PasteboardResolvePromises(paste);
if (paste)
@@ -130,16 +130,16 @@ OSStatus QMacPasteboard::promiseKeeper(PasteboardRef paste, PasteboardItemID id,
const long promise_id = (long)id;
// Find the kept promise
- const QList<QMacMime*> availableConverters = QMacMimeRegistry::all(QMacMime::HandlerScope::All);
+ const QList<QUtiMimeConverter*> availableConverters = QMacMimeRegistry::all(QUtiMimeConverter::HandlerScope::All);
const QString utiAsQString = QString::fromCFString(uti);
QMacPasteboard::Promise promise;
for (int i = 0; i < qpaste->promises.size(); i++){
const QMacPasteboard::Promise tmp = qpaste->promises[i];
if (!availableConverters.contains(tmp.converter)) {
// promise.converter is a pointer initialized by the value found
- // in QMacMime's global list of QMacMimes.
- // We add pointers to this list in QMacMime's ctor;
- // we remove these pointers in QMacMime's dtor.
+ // in QUtiMimeConverter's global list of QMacMimes.
+ // We add pointers to this list in QUtiMimeConverter's ctor;
+ // we remove these pointers in QUtiMimeConverter's dtor.
// If tmp.converter was not found in this list, we probably have a
// dangling pointer so let's skip it.
continue;
@@ -258,7 +258,7 @@ void QMacPasteboard::setMimeData(QMimeData *mime_src, DataRequestType dataReques
delete mime;
mime = mime_src;
- const QList<QMacMime*> availableConverters = QMacMimeRegistry::all(scope);
+ const QList<QUtiMimeConverter*> availableConverters = QMacMimeRegistry::all(scope);
if (mime != nullptr) {
clear_helper();
QStringList formats = mime_src->formats();
@@ -386,7 +386,7 @@ QVariant QMacPasteboard::retrieveData(const QString &format) const
return QByteArray();
qCDebug(lcQpaClipboard, "Pasteboard: retrieveData [%s]", qPrintable(format));
- const QList<QMacMime *> availableConverters = QMacMimeRegistry::all(scope);
+ const QList<QUtiMimeConverter *> availableConverters = QMacMimeRegistry::all(scope);
for (const auto *c : availableConverters) {
const QString c_uti = c->utiForMime(format);
if (!c_uti.isEmpty()) {