Rename QMacInternalPasteboardMime to QMacMime

We want to make it public, and there is no need for "pasteboard" since
it also coveres drag'n'drop. Add a default constructor that defaults to
supporting both clipboard and drag'n'drop, and clean up the code by
using that constructor where applicable.

Historical note: the converter interface was called QMacMime up to
Qt 4.2, when due to macOS changes it had to be replaced by
QMacPasteboardMime.

Task-number: QTBUG-93632
Change-Id: Id9712300039375aa6394598b104827e6f5d6c948
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
This commit is contained in:
Volker Hilsheimer 2022-11-01 17:08:12 +01:00
parent fe1075332c
commit 76fcd436c1
13 changed files with 164 additions and 168 deletions

View File

@ -282,7 +282,7 @@ QVariant QMimeDataPrivate::retrieveTypedData(const QString &format, QMetaType ty
On Windows, the MIME format does not always map directly to the On Windows, the MIME format does not always map directly to the
clipboard formats. Qt provides QWinMime to map clipboard clipboard formats. Qt provides QWinMime to map clipboard
formats to open-standard MIME formats. Similarly, the formats to open-standard MIME formats. Similarly, the
QMacPasteboardMime maps MIME to Mac flavors. QMacMime maps MIME to Mac flavors.
\sa QClipboard, QDragEnterEvent, QDragMoveEvent, QDropEvent, QDrag, \sa QClipboard, QDragEnterEvent, QDragMoveEvent, QDropEvent, QDrag,
{Drag and Drop} {Drag and Drop}

View File

@ -380,6 +380,6 @@
Custom classes for translating proprietary clipboard formats can be Custom classes for translating proprietary clipboard formats can be
registered by reimplementing QWinMime on Windows or registered by reimplementing QWinMime on Windows or
QMacPasteboardMime on \macos. QMacMime on \macos.
*/ */

View File

@ -34,9 +34,9 @@ using namespace Qt::StringLiterals;
//#define DEBUG_MIME_MAPS //#define DEBUG_MIME_MAPS
/*! /*!
\class QMacInternalPasteboardMime \class QMacMime
\internal \internal
\brief The QMacPasteboardMime class converts between a MIME type and a \brief The QMacMime class converts between a MIME type and a
\l{http://developer.apple.com/macosx/uniformtypeidentifiers.html}{Uniform \l{http://developer.apple.com/macosx/uniformtypeidentifiers.html}{Uniform
Type Identifier (UTI)} format. Type Identifier (UTI)} format.
\since 4.2 \since 4.2
@ -49,11 +49,11 @@ using namespace Qt::StringLiterals;
Mac, although some applications use MIME to describe clipboard Mac, although some applications use MIME to describe clipboard
contents, it is more common to use Apple's UTI format. contents, it is more common to use Apple's UTI format.
QMacPasteboardMime's role is to bridge the gap between MIME and UTI; QMacMime's role is to bridge the gap between MIME and UTI;
By subclasses this class, one can extend Qt's drag and drop By subclasses this class, one can extend Qt's drag and drop
and clipboard handling to convert to and from unsupported, or proprietary, UTI formats. and clipboard handling to convert to and from unsupported, or proprietary, UTI formats.
A subclass of QMacPasteboardMime will automatically be registered, and active, upon instantiation. A subclass of QMacMime will automatically be registered, and active, upon instantiation.
Qt has predefined support for the following UTIs: Qt has predefined support for the following UTIs:
\list \list
@ -69,7 +69,7 @@ using namespace Qt::StringLiterals;
\li com.apple.pict - converts to "application/x-qt-image" \li com.apple.pict - converts to "application/x-qt-image"
\endlist \endlist
When working with MIME data, Qt will iterate through all instances of QMacPasteboardMime to When working with MIME data, Qt will iterate through all instances of QMacMime to
find an instance that can convert to, or from, a specific MIME type. It will do this by calling find an instance that can convert to, or from, a specific MIME type. It will do this by calling
canConvert() on each instance, starting with (and choosing) the last created instance first. canConvert() on each instance, starting with (and choosing) the last created instance first.
The actual conversions will be done by using convertToMime() and convertFromMime(). The actual conversions will be done by using convertToMime() and convertFromMime().
@ -79,7 +79,7 @@ using namespace Qt::StringLiterals;
*/ */
/* /*
\enum QMacPasteboardMime::QMacPasteboardMimeType \enum QMacMime::QMacMimeType
\internal \internal
*/ */
@ -87,17 +87,25 @@ using namespace Qt::StringLiterals;
Constructs a new conversion object of type \a t, adding it to the Constructs a new conversion object of type \a t, adding it to the
globally accessed list of available converters. globally accessed list of available converters.
*/ */
QMacInternalPasteboardMime::QMacInternalPasteboardMime(QMacPasteboardMimeType t) QMacMime::QMacMime(QMacPasteboardMimeType t)
: m_type(t) : m_type(t)
{ {
QMacMimeRegistry::registerMimeConverter(this); QMacMimeRegistry::registerMimeConverter(this);
} }
/*
Constructs a new conversion object and adds it to the
globally accessed list of available converters.
*/
QMacMime::QMacMime()
: QMacMime(MIME_ALL)
{}
/* /*
Destroys a conversion object, removing it from the global Destroys a conversion object, removing it from the global
list of available converters. list of available converters.
*/ */
QMacInternalPasteboardMime::~QMacInternalPasteboardMime() QMacMime::~QMacMime()
{ {
QMacMimeRegistry::unregisterMimeConverter(this); QMacMimeRegistry::unregisterMimeConverter(this);
} }
@ -105,15 +113,16 @@ QMacInternalPasteboardMime::~QMacInternalPasteboardMime()
/* /*
Returns the item count for the given \a mimeData Returns the item count for the given \a mimeData
*/ */
int QMacInternalPasteboardMime::count(const QMimeData *mimeData) const int QMacMime::count(const QMimeData *mimeData) const
{ {
Q_UNUSED(mimeData); Q_UNUSED(mimeData);
return 1; return 1;
} }
class QMacPasteboardMimeAny : public QMacInternalPasteboardMime { class QMacMimeAny : public QMacMime
{
public: public:
QMacPasteboardMimeAny() : QMacInternalPasteboardMime(MIME_ALL_COMPATIBLE) {} QMacMimeAny() : QMacMime(MIME_ALL_COMPATIBLE) {}
QString flavorFor(const QString &mime) const override; QString flavorFor(const QString &mime) const override;
QString mimeFor(const QString &flav) const override; QString mimeFor(const QString &flav) const override;
@ -122,7 +131,7 @@ public:
QList<QByteArray> convertFromMime(const QString &mime, const QVariant &data, const QString &flav) const override; QList<QByteArray> convertFromMime(const QString &mime, const QVariant &data, const QString &flav) const override;
}; };
QString QMacPasteboardMimeAny::flavorFor(const QString &mime) const QString QMacMimeAny::flavorFor(const QString &mime) const
{ {
// do not handle the mime type name in the drag pasteboard // do not handle the mime type name in the drag pasteboard
if (mime == "application/x-qt-mime-type-name"_L1) if (mime == "application/x-qt-mime-type-name"_L1)
@ -131,7 +140,7 @@ QString QMacPasteboardMimeAny::flavorFor(const QString &mime) const
return ret.replace(u'/', "--"_L1); return ret.replace(u'/', "--"_L1);
} }
QString QMacPasteboardMimeAny::mimeFor(const QString &flav) const QString QMacMimeAny::mimeFor(const QString &flav) const
{ {
const QString any_prefix = "com.trolltech.anymime."_L1; const QString any_prefix = "com.trolltech.anymime."_L1;
if (flav.size() > any_prefix.length() && flav.startsWith(any_prefix)) if (flav.size() > any_prefix.length() && flav.startsWith(any_prefix))
@ -139,15 +148,15 @@ QString QMacPasteboardMimeAny::mimeFor(const QString &flav) const
return QString(); return QString();
} }
bool QMacPasteboardMimeAny::canConvert(const QString &mime, const QString &flav) const bool QMacMimeAny::canConvert(const QString &mime, const QString &flav) const
{ {
return mimeFor(flav) == mime; return mimeFor(flav) == mime;
} }
QVariant QMacPasteboardMimeAny::convertToMime(const QString &mime, const QList<QByteArray> &data, const QString &) const QVariant QMacMimeAny::convertToMime(const QString &mime, const QList<QByteArray> &data, const QString &) const
{ {
if (data.count() > 1) if (data.count() > 1)
qWarning("QMacPasteboardMimeAny: Cannot handle multiple member data"); qWarning("QMacMimeAny: Cannot handle multiple member data");
QVariant ret; QVariant ret;
if (mime == "text/plain"_L1) if (mime == "text/plain"_L1)
ret = QString::fromUtf8(data.first()); ret = QString::fromUtf8(data.first());
@ -156,7 +165,7 @@ QVariant QMacPasteboardMimeAny::convertToMime(const QString &mime, const QList<Q
return ret; return ret;
} }
QList<QByteArray> QMacPasteboardMimeAny::convertFromMime(const QString &mime, const QVariant &data, const QString &) const QList<QByteArray> QMacMimeAny::convertFromMime(const QString &mime, const QVariant &data, const QString &) const
{ {
QList<QByteArray> ret; QList<QByteArray> ret;
if (mime == "text/plain"_L1) if (mime == "text/plain"_L1)
@ -166,11 +175,10 @@ QList<QByteArray> QMacPasteboardMimeAny::convertFromMime(const QString &mime, co
return ret; return ret;
} }
class QMacPasteboardMimeTypeName : public QMacInternalPasteboardMime { class QMacMimeTypeName : public QMacMime
private: {
public: public:
QMacPasteboardMimeTypeName(): QMacInternalPasteboardMime(MIME_ALL_COMPATIBLE) {} QMacMimeTypeName(): QMacMime(MIME_ALL_COMPATIBLE) {}
QString flavorFor(const QString &mime) const override; QString flavorFor(const QString &mime) const override;
QString mimeFor(const QString &flav) const override; QString mimeFor(const QString &flav) const override;
@ -179,40 +187,38 @@ public:
QList<QByteArray> convertFromMime(const QString &mime, const QVariant &data, const QString &flav) const override; QList<QByteArray> convertFromMime(const QString &mime, const QVariant &data, const QString &flav) const override;
}; };
QString QMacPasteboardMimeTypeName::flavorFor(const QString &mime) const QString QMacMimeTypeName::flavorFor(const QString &mime) const
{ {
if (mime == "application/x-qt-mime-type-name"_L1) if (mime == "application/x-qt-mime-type-name"_L1)
return u"com.trolltech.qt.MimeTypeName"_s; return u"com.trolltech.qt.MimeTypeName"_s;
return QString(); return QString();
} }
QString QMacPasteboardMimeTypeName::mimeFor(const QString &) const QString QMacMimeTypeName::mimeFor(const QString &) const
{ {
return QString(); return QString();
} }
bool QMacPasteboardMimeTypeName::canConvert(const QString &, const QString &) const bool QMacMimeTypeName::canConvert(const QString &, const QString &) const
{ {
return false; return false;
} }
QVariant QMacPasteboardMimeTypeName::convertToMime(const QString &, const QList<QByteArray> &, const QString &) const QVariant QMacMimeTypeName::convertToMime(const QString &, const QList<QByteArray> &, const QString &) const
{ {
QVariant ret; QVariant ret;
return ret; return ret;
} }
QList<QByteArray> QMacPasteboardMimeTypeName::convertFromMime(const QString &, const QVariant &, const QString &) const QList<QByteArray> QMacMimeTypeName::convertFromMime(const QString &, const QVariant &, const QString &) const
{ {
QList<QByteArray> ret; QList<QByteArray> ret;
ret.append(QString("x-qt-mime-type-name"_L1).toUtf8()); ret.append(QString("x-qt-mime-type-name"_L1).toUtf8());
return ret; return ret;
} }
class QMacPasteboardMimePlainTextFallback : public QMacInternalPasteboardMime { class QMacMimePlainTextFallback : public QMacMime {
public: public:
QMacPasteboardMimePlainTextFallback() : QMacInternalPasteboardMime(MIME_ALL) {}
QString flavorFor(const QString &mime) const override; QString flavorFor(const QString &mime) const override;
QString mimeFor(const QString &flav) const override; QString mimeFor(const QString &flav) const override;
bool canConvert(const QString &mime, const QString &flav) const override; bool canConvert(const QString &mime, const QString &flav) const override;
@ -220,31 +226,31 @@ public:
QList<QByteArray> convertFromMime(const QString &mime, const QVariant &data, const QString &flav) const override; QList<QByteArray> convertFromMime(const QString &mime, const QVariant &data, const QString &flav) const override;
}; };
QString QMacPasteboardMimePlainTextFallback::flavorFor(const QString &mime) const QString QMacMimePlainTextFallback::flavorFor(const QString &mime) const
{ {
if (mime == "text/plain"_L1) if (mime == "text/plain"_L1)
return "public.text"_L1; return "public.text"_L1;
return QString(); return QString();
} }
QString QMacPasteboardMimePlainTextFallback::mimeFor(const QString &flav) const QString QMacMimePlainTextFallback::mimeFor(const QString &flav) const
{ {
if (flav == "public.text"_L1) if (flav == "public.text"_L1)
return "text/plain"_L1; return "text/plain"_L1;
return QString(); return QString();
} }
bool QMacPasteboardMimePlainTextFallback::canConvert(const QString &mime, const QString &flav) const bool QMacMimePlainTextFallback::canConvert(const QString &mime, const QString &flav) const
{ {
return mime == mimeFor(flav); return mime == mimeFor(flav);
} }
QVariant QVariant
QMacPasteboardMimePlainTextFallback::convertToMime(const QString &mimetype, QMacMimePlainTextFallback::convertToMime(const QString &mimetype,
const QList<QByteArray> &data, const QString &flavor) const const QList<QByteArray> &data, const QString &flavor) const
{ {
if (data.count() > 1) if (data.count() > 1)
qWarning("QMacPasteboardMimePlainTextFallback: Cannot handle multiple member data"); qWarning("QMacMimePlainTextFallback: Cannot handle multiple member data");
if (flavor == "public.text"_L1) { if (flavor == "public.text"_L1) {
// Note that public.text is documented by Apple to have an undefined encoding. From // Note that public.text is documented by Apple to have an undefined encoding. From
@ -260,7 +266,7 @@ QMacPasteboardMimePlainTextFallback::convertToMime(const QString &mimetype,
} }
QList<QByteArray> QList<QByteArray>
QMacPasteboardMimePlainTextFallback::convertFromMime(const QString &, const QVariant &data, QMacMimePlainTextFallback::convertFromMime(const QString &, const QVariant &data,
const QString &flavor) const const QString &flavor) const
{ {
QList<QByteArray> ret; QList<QByteArray> ret;
@ -270,10 +276,9 @@ QMacPasteboardMimePlainTextFallback::convertFromMime(const QString &, const QVar
return ret; return ret;
} }
class QMacPasteboardMimeUnicodeText : public QMacInternalPasteboardMime { class QMacMimeUnicodeText : public QMacMime
{
public: public:
QMacPasteboardMimeUnicodeText() : QMacInternalPasteboardMime(MIME_ALL) {}
QString flavorFor(const QString &mime) const override; QString flavorFor(const QString &mime) const override;
QString mimeFor(const QString &flav) const override; QString mimeFor(const QString &flav) const override;
bool canConvert(const QString &mime, const QString &flav) const override; bool canConvert(const QString &mime, const QString &flav) const override;
@ -281,7 +286,7 @@ public:
QList<QByteArray> convertFromMime(const QString &mime, const QVariant &data, const QString &flav) const override; QList<QByteArray> convertFromMime(const QString &mime, const QVariant &data, const QString &flav) const override;
}; };
QString QMacPasteboardMimeUnicodeText::flavorFor(const QString &mime) const QString QMacMimeUnicodeText::flavorFor(const QString &mime) const
{ {
if (mime == "text/plain"_L1) if (mime == "text/plain"_L1)
return "public.utf16-plain-text"_L1; return "public.utf16-plain-text"_L1;
@ -299,25 +304,25 @@ QString QMacPasteboardMimeUnicodeText::flavorFor(const QString &mime) const
return QString(); return QString();
} }
QString QMacPasteboardMimeUnicodeText::mimeFor(const QString &flav) const QString QMacMimeUnicodeText::mimeFor(const QString &flav) const
{ {
if (flav == "public.utf16-plain-text"_L1 || flav == "public.utf8-plain-text"_L1) if (flav == "public.utf16-plain-text"_L1 || flav == "public.utf8-plain-text"_L1)
return "text/plain"_L1; return "text/plain"_L1;
return QString(); return QString();
} }
bool QMacPasteboardMimeUnicodeText::canConvert(const QString &mime, const QString &flav) const bool QMacMimeUnicodeText::canConvert(const QString &mime, const QString &flav) const
{ {
return (mime == "text/plain"_L1 return (mime == "text/plain"_L1
&& (flav == "public.utf8-plain-text"_L1 || (flav == "public.utf16-plain-text"_L1))); && (flav == "public.utf8-plain-text"_L1 || (flav == "public.utf16-plain-text"_L1)));
} }
QVariant QVariant
QMacPasteboardMimeUnicodeText::convertToMime(const QString &mimetype, QMacMimeUnicodeText::convertToMime(const QString &mimetype,
const QList<QByteArray> &data, const QString &flavor) const const QList<QByteArray> &data, const QString &flavor) const
{ {
if (data.count() > 1) if (data.count() > 1)
qWarning("QMacPasteboardMimeUnicodeText: Cannot handle multiple member data"); qWarning("QMacMimeUnicodeText: Cannot handle multiple member data");
const QByteArray &firstData = data.first(); const QByteArray &firstData = data.first();
// I can only handle two types (system and unicode) so deal with them that way // I can only handle two types (system and unicode) so deal with them that way
QVariant ret; QVariant ret;
@ -333,7 +338,7 @@ QMacPasteboardMimeUnicodeText::convertToMime(const QString &mimetype,
} }
QList<QByteArray> QList<QByteArray>
QMacPasteboardMimeUnicodeText::convertFromMime(const QString &, const QVariant &data, const QString &flavor) const QMacMimeUnicodeText::convertFromMime(const QString &, const QVariant &data, const QString &flavor) const
{ {
QList<QByteArray> ret; QList<QByteArray> ret;
QString string = data.toString(); QString string = data.toString();
@ -359,10 +364,9 @@ QMacPasteboardMimeUnicodeText::convertFromMime(const QString &, const QVariant &
return ret; return ret;
} }
class QMacPasteboardMimeHTMLText : public QMacInternalPasteboardMime { class QMacMimeHTMLText : public QMacMime
{
public: public:
QMacPasteboardMimeHTMLText() : QMacInternalPasteboardMime(MIME_ALL) {}
QString flavorFor(const QString &mime) const override; QString flavorFor(const QString &mime) const override;
QString mimeFor(const QString &flav) const override; QString mimeFor(const QString &flav) const override;
bool canConvert(const QString &mime, const QString &flav) const override; bool canConvert(const QString &mime, const QString &flav) const override;
@ -370,38 +374,38 @@ public:
QList<QByteArray> convertFromMime(const QString &mime, const QVariant &data, const QString &flav) const override; QList<QByteArray> convertFromMime(const QString &mime, const QVariant &data, const QString &flav) const override;
}; };
QString QMacPasteboardMimeHTMLText::flavorFor(const QString &mime) const QString QMacMimeHTMLText::flavorFor(const QString &mime) const
{ {
if (mime == "text/html"_L1) if (mime == "text/html"_L1)
return "public.html"_L1; return "public.html"_L1;
return QString(); return QString();
} }
QString QMacPasteboardMimeHTMLText::mimeFor(const QString &flav) const QString QMacMimeHTMLText::mimeFor(const QString &flav) const
{ {
if (flav == "public.html"_L1) if (flav == "public.html"_L1)
return "text/html"_L1; return "text/html"_L1;
return QString(); return QString();
} }
bool QMacPasteboardMimeHTMLText::canConvert(const QString &mime, const QString &flav) const bool QMacMimeHTMLText::canConvert(const QString &mime, const QString &flav) const
{ {
return flavorFor(mime) == flav; return flavorFor(mime) == flav;
} }
QVariant QVariant
QMacPasteboardMimeHTMLText::convertToMime(const QString &mimeType, QMacMimeHTMLText::convertToMime(const QString &mimeType,
const QList<QByteArray> &data, const QString &flavor) const const QList<QByteArray> &data, const QString &flavor) const
{ {
if (!canConvert(mimeType, flavor)) if (!canConvert(mimeType, flavor))
return QVariant(); return QVariant();
if (data.count() > 1) if (data.count() > 1)
qWarning("QMacPasteboardMimeHTMLText: Cannot handle multiple member data"); qWarning("QMacMimeHTMLText: Cannot handle multiple member data");
return data.first(); return data.first();
} }
QList<QByteArray> QList<QByteArray>
QMacPasteboardMimeHTMLText::convertFromMime(const QString &mime, QMacMimeHTMLText::convertFromMime(const QString &mime,
const QVariant &data, const QString &flavor) const const QVariant &data, const QString &flavor) const
{ {
QList<QByteArray> ret; QList<QByteArray> ret;
@ -411,10 +415,9 @@ QMacPasteboardMimeHTMLText::convertFromMime(const QString &mime,
return ret; return ret;
} }
class QMacPasteboardMimeRtfText : public QMacInternalPasteboardMime { class QMacMimeRtfText : public QMacMime
{
public: public:
QMacPasteboardMimeRtfText() : QMacInternalPasteboardMime(MIME_ALL) {}
QString flavorFor(const QString &mime) const override; QString flavorFor(const QString &mime) const override;
QString mimeFor(const QString &flav) const override; QString mimeFor(const QString &flav) const override;
bool canConvert(const QString &mime, const QString &flav) const override; bool canConvert(const QString &mime, const QString &flav) const override;
@ -422,33 +425,33 @@ public:
QList<QByteArray> convertFromMime(const QString &mime, const QVariant &data, const QString &flav) const override; QList<QByteArray> convertFromMime(const QString &mime, const QVariant &data, const QString &flav) const override;
}; };
QString QMacPasteboardMimeRtfText::flavorFor(const QString &mime) const QString QMacMimeRtfText::flavorFor(const QString &mime) const
{ {
if (mime == "text/html"_L1) if (mime == "text/html"_L1)
return "public.rtf"_L1; return "public.rtf"_L1;
return QString(); return QString();
} }
QString QMacPasteboardMimeRtfText::mimeFor(const QString &flav) const QString QMacMimeRtfText::mimeFor(const QString &flav) const
{ {
if (flav == "public.rtf"_L1) if (flav == "public.rtf"_L1)
return "text/html"_L1; return "text/html"_L1;
return QString(); return QString();
} }
bool QMacPasteboardMimeRtfText::canConvert(const QString &mime, const QString &flav) const bool QMacMimeRtfText::canConvert(const QString &mime, const QString &flav) const
{ {
return mime == mimeFor(flav); return mime == mimeFor(flav);
} }
QVariant QVariant
QMacPasteboardMimeRtfText::convertToMime(const QString &mimeType, QMacMimeRtfText::convertToMime(const QString &mimeType,
const QList<QByteArray> &data, const QString &flavor) const const QList<QByteArray> &data, const QString &flavor) const
{ {
if (!canConvert(mimeType, flavor)) if (!canConvert(mimeType, flavor))
return QVariant(); return QVariant();
if (data.count() > 1) if (data.count() > 1)
qWarning("QMacPasteboardMimeHTMLText: Cannot handle multiple member data"); qWarning("QMacMimeHTMLText: Cannot handle multiple member data");
// Read RTF into to NSAttributedString, then convert the string to HTML // Read RTF into to NSAttributedString, then convert the string to HTML
NSAttributedString *string = [[NSAttributedString alloc] initWithData:data.at(0).toNSData() NSAttributedString *string = [[NSAttributedString alloc] initWithData:data.at(0).toNSData()
@ -464,7 +467,7 @@ QMacPasteboardMimeRtfText::convertToMime(const QString &mimeType,
} }
QList<QByteArray> QList<QByteArray>
QMacPasteboardMimeRtfText::convertFromMime(const QString &mime, QMacMimeRtfText::convertFromMime(const QString &mime,
const QVariant &data, const QString &flavor) const const QVariant &data, const QString &flavor) const
{ {
QList<QByteArray> ret; QList<QByteArray> ret;
@ -484,10 +487,9 @@ QMacPasteboardMimeRtfText::convertFromMime(const QString &mime,
return ret; return ret;
} }
class QMacPasteboardMimeFileUri : public QMacInternalPasteboardMime { class QMacMimeFileUri : public QMacMime
{
public: public:
QMacPasteboardMimeFileUri() : QMacInternalPasteboardMime(MIME_ALL) {}
QString flavorFor(const QString &mime) const override; QString flavorFor(const QString &mime) const override;
QString mimeFor(const QString &flav) const override; QString mimeFor(const QString &flav) const override;
bool canConvert(const QString &mime, const QString &flav) const override; bool canConvert(const QString &mime, const QString &flav) const override;
@ -496,27 +498,27 @@ public:
int count(const QMimeData *mimeData) const override; int count(const QMimeData *mimeData) const override;
}; };
QString QMacPasteboardMimeFileUri::flavorFor(const QString &mime) const QString QMacMimeFileUri::flavorFor(const QString &mime) const
{ {
if (mime == "text/uri-list"_L1) if (mime == "text/uri-list"_L1)
return "public.file-url"_L1; return "public.file-url"_L1;
return QString(); return QString();
} }
QString QMacPasteboardMimeFileUri::mimeFor(const QString &flav) const QString QMacMimeFileUri::mimeFor(const QString &flav) const
{ {
if (flav == "public.file-url"_L1) if (flav == "public.file-url"_L1)
return "text/uri-list"_L1; return "text/uri-list"_L1;
return QString(); return QString();
} }
bool QMacPasteboardMimeFileUri::canConvert(const QString &mime, const QString &flav) const bool QMacMimeFileUri::canConvert(const QString &mime, const QString &flav) const
{ {
return mime == "text/uri-list"_L1 && flav == "public.file-url"_L1; return mime == "text/uri-list"_L1 && flav == "public.file-url"_L1;
} }
QVariant QVariant
QMacPasteboardMimeFileUri::convertToMime(const QString &mime, QMacMimeFileUri::convertToMime(const QString &mime,
const QList<QByteArray> &data, const QString &flav) const const QList<QByteArray> &data, const QString &flav) const
{ {
if (!canConvert(mime, flav)) if (!canConvert(mime, flav))
@ -545,7 +547,7 @@ QMacPasteboardMimeFileUri::convertToMime(const QString &mime,
} }
QList<QByteArray> QList<QByteArray>
QMacPasteboardMimeFileUri::convertFromMime(const QString &mime, QMacMimeFileUri::convertFromMime(const QString &mime,
const QVariant &data, const QString &flav) const const QVariant &data, const QString &flav) const
{ {
QList<QByteArray> ret; QList<QByteArray> ret;
@ -567,15 +569,14 @@ QMacPasteboardMimeFileUri::convertFromMime(const QString &mime,
return ret; return ret;
} }
int QMacPasteboardMimeFileUri::count(const QMimeData *mimeData) const int QMacMimeFileUri::count(const QMimeData *mimeData) const
{ {
return mimeData->urls().count(); return mimeData->urls().count();
} }
class QMacPasteboardMimeUrl : public QMacInternalPasteboardMime { class QMacMimeUrl : public QMacMime
{
public: public:
QMacPasteboardMimeUrl() : QMacInternalPasteboardMime(MIME_ALL) {}
QString flavorFor(const QString &mime) const override; QString flavorFor(const QString &mime) const override;
QString mimeFor(const QString &flav) const override; QString mimeFor(const QString &flav) const override;
bool canConvert(const QString &mime, const QString &flav) const override; bool canConvert(const QString &mime, const QString &flav) const override;
@ -583,27 +584,27 @@ public:
QList<QByteArray> convertFromMime(const QString &mime, const QVariant &data, const QString &flav) const override; QList<QByteArray> convertFromMime(const QString &mime, const QVariant &data, const QString &flav) const override;
}; };
QString QMacPasteboardMimeUrl::flavorFor(const QString &mime) const QString QMacMimeUrl::flavorFor(const QString &mime) const
{ {
if (mime.startsWith("text/uri-list"_L1)) if (mime.startsWith("text/uri-list"_L1))
return "public.url"_L1; return "public.url"_L1;
return QString(); return QString();
} }
QString QMacPasteboardMimeUrl::mimeFor(const QString &flav) const QString QMacMimeUrl::mimeFor(const QString &flav) const
{ {
if (flav == "public.url"_L1) if (flav == "public.url"_L1)
return "text/uri-list"_L1; return "text/uri-list"_L1;
return QString(); return QString();
} }
bool QMacPasteboardMimeUrl::canConvert(const QString &mime, const QString &flav) const bool QMacMimeUrl::canConvert(const QString &mime, const QString &flav) const
{ {
return flav == "public.url"_L1 return flav == "public.url"_L1
&& mime == "text/uri-list"_L1; && mime == "text/uri-list"_L1;
} }
QVariant QMacPasteboardMimeUrl::convertToMime(const QString &mime, QVariant QMacMimeUrl::convertToMime(const QString &mime,
const QList<QByteArray> &data, const QString &flav) const const QList<QByteArray> &data, const QString &flav) const
{ {
if (!canConvert(mime, flav)) if (!canConvert(mime, flav))
@ -620,7 +621,7 @@ QVariant QMacPasteboardMimeUrl::convertToMime(const QString &mime,
return QVariant(ret); return QVariant(ret);
} }
QList<QByteArray> QMacPasteboardMimeUrl::convertFromMime(const QString &mime, QList<QByteArray> QMacMimeUrl::convertFromMime(const QString &mime,
const QVariant &data, const QString &flav) const const QVariant &data, const QString &flav) const
{ {
QList<QByteArray> ret; QList<QByteArray> ret;
@ -642,11 +643,9 @@ QList<QByteArray> QMacPasteboardMimeUrl::convertFromMime(const QString &mime,
return ret; return ret;
} }
class QMacPasteboardMimeVCard : public QMacInternalPasteboardMime class QMacMimeVCard : public QMacMime
{ {
public: public:
QMacPasteboardMimeVCard() : QMacInternalPasteboardMime(MIME_ALL) {}
QString flavorFor(const QString &mime) const override; QString flavorFor(const QString &mime) const override;
QString mimeFor(const QString &flav) const override; QString mimeFor(const QString &flav) const override;
bool canConvert(const QString &mime, const QString &flav) const override; bool canConvert(const QString &mime, const QString &flav) const override;
@ -654,26 +653,26 @@ public:
QList<QByteArray> convertFromMime(const QString &mime, const QVariant &data, const QString &flav) const override; QList<QByteArray> convertFromMime(const QString &mime, const QVariant &data, const QString &flav) const override;
}; };
bool QMacPasteboardMimeVCard::canConvert(const QString &mime, const QString &flav) const bool QMacMimeVCard::canConvert(const QString &mime, const QString &flav) const
{ {
return mimeFor(flav) == mime; return mimeFor(flav) == mime;
} }
QString QMacPasteboardMimeVCard::flavorFor(const QString &mime) const QString QMacMimeVCard::flavorFor(const QString &mime) const
{ {
if (mime.startsWith("text/vcard"_L1)) if (mime.startsWith("text/vcard"_L1))
return "public.vcard"_L1; return "public.vcard"_L1;
return QString(); return QString();
} }
QString QMacPasteboardMimeVCard::mimeFor(const QString &flav) const QString QMacMimeVCard::mimeFor(const QString &flav) const
{ {
if (flav == "public.vcard"_L1) if (flav == "public.vcard"_L1)
return "text/vcard"_L1; return "text/vcard"_L1;
return QString(); return QString();
} }
QVariant QMacPasteboardMimeVCard::convertToMime(const QString &mime, QVariant QMacMimeVCard::convertToMime(const QString &mime,
const QList<QByteArray> &data, const QString &) const const QList<QByteArray> &data, const QString &) const
{ {
QByteArray cards; QByteArray cards;
@ -684,7 +683,7 @@ QVariant QMacPasteboardMimeVCard::convertToMime(const QString &mime,
return QVariant(cards); return QVariant(cards);
} }
QList<QByteArray> QMacPasteboardMimeVCard::convertFromMime(const QString &mime, QList<QByteArray> QMacMimeVCard::convertFromMime(const QString &mime,
const QVariant &data, const QString &) const const QVariant &data, const QString &) const
{ {
QList<QByteArray> ret; QList<QByteArray> ret;
@ -696,10 +695,9 @@ QList<QByteArray> QMacPasteboardMimeVCard::convertFromMime(const QString &mime,
extern QImage qt_mac_toQImage(CGImageRef image); extern QImage qt_mac_toQImage(CGImageRef image);
extern CGImageRef qt_mac_toCGImage(const QImage &qImage); extern CGImageRef qt_mac_toCGImage(const QImage &qImage);
class QMacPasteboardMimeTiff : public QMacInternalPasteboardMime { class QMacMimeTiff : public QMacMime
{
public: public:
QMacPasteboardMimeTiff() : QMacInternalPasteboardMime(MIME_ALL) {}
QString flavorFor(const QString &mime) const override; QString flavorFor(const QString &mime) const override;
QString mimeFor(const QString &flav) const override; QString mimeFor(const QString &flav) const override;
bool canConvert(const QString &mime, const QString &flav) const override; bool canConvert(const QString &mime, const QString &flav) const override;
@ -707,30 +705,30 @@ public:
QList<QByteArray> convertFromMime(const QString &mime, const QVariant &data, const QString &flav) const override; QList<QByteArray> convertFromMime(const QString &mime, const QVariant &data, const QString &flav) const override;
}; };
QString QMacPasteboardMimeTiff::flavorFor(const QString &mime) const QString QMacMimeTiff::flavorFor(const QString &mime) const
{ {
if (mime.startsWith("application/x-qt-image"_L1)) if (mime.startsWith("application/x-qt-image"_L1))
return "public.tiff"_L1; return "public.tiff"_L1;
return QString(); return QString();
} }
QString QMacPasteboardMimeTiff::mimeFor(const QString &flav) const QString QMacMimeTiff::mimeFor(const QString &flav) const
{ {
if (flav == "public.tiff"_L1) if (flav == "public.tiff"_L1)
return "application/x-qt-image"_L1; return "application/x-qt-image"_L1;
return QString(); return QString();
} }
bool QMacPasteboardMimeTiff::canConvert(const QString &mime, const QString &flav) const bool QMacMimeTiff::canConvert(const QString &mime, const QString &flav) const
{ {
return flav == "public.tiff"_L1 && mime == "application/x-qt-image"_L1; return flav == "public.tiff"_L1 && mime == "application/x-qt-image"_L1;
} }
QVariant QMacPasteboardMimeTiff::convertToMime(const QString &mime, QVariant QMacMimeTiff::convertToMime(const QString &mime,
const QList<QByteArray> &data, const QString &flav) const const QList<QByteArray> &data, const QString &flav) const
{ {
if (data.count() > 1) if (data.count() > 1)
qWarning("QMacPasteboardMimeTiff: Cannot handle multiple member data"); qWarning("QMacMimeTiff: Cannot handle multiple member data");
if (!canConvert(mime, flav)) if (!canConvert(mime, flav))
return QVariant(); return QVariant();
@ -744,7 +742,7 @@ QVariant QMacPasteboardMimeTiff::convertToMime(const QString &mime,
return QVariant(); return QVariant();
} }
QList<QByteArray> QMacPasteboardMimeTiff::convertFromMime(const QString &mime, QList<QByteArray> QMacMimeTiff::convertFromMime(const QString &mime,
const QVariant &variant, const QString &flav) const const QVariant &variant, const QString &flav) const
{ {
if (!canConvert(mime, flav)) if (!canConvert(mime, flav))
@ -772,26 +770,26 @@ namespace QMacMimeRegistry {
void registerBuiltInTypes() void registerBuiltInTypes()
{ {
// Create QMacPasteboardMimeAny first to put it at the end of globalMimeList // Create QMacMimeAny first to put it at the end of globalMimeList
// with lowest priority. (the constructor prepends to the list) // with lowest priority. (the constructor prepends to the list)
new QMacPasteboardMimeAny; new QMacMimeAny;
//standard types that we wrap //standard types that we wrap
new QMacPasteboardMimeTiff; new QMacMimeTiff;
new QMacPasteboardMimePlainTextFallback; new QMacMimePlainTextFallback;
new QMacPasteboardMimeUnicodeText; new QMacMimeUnicodeText;
new QMacPasteboardMimeRtfText; new QMacMimeRtfText;
new QMacPasteboardMimeHTMLText; new QMacMimeHTMLText;
new QMacPasteboardMimeFileUri; new QMacMimeFileUri;
new QMacPasteboardMimeUrl; new QMacMimeUrl;
new QMacPasteboardMimeTypeName; new QMacMimeTypeName;
new QMacPasteboardMimeVCard; new QMacMimeVCard;
} }
} }
/* /*
\fn bool QMacPasteboardMime::canConvert(const QString &mime, QString flav) \fn bool QMacMime::canConvert(const QString &mime, QString flav)
Returns \c true if the converter can convert (both ways) between Returns \c true if the converter can convert (both ways) between
\a mime and \a flav; otherwise returns \c false. \a mime and \a flav; otherwise returns \c false.
@ -800,7 +798,7 @@ void registerBuiltInTypes()
*/ */
/* /*
\fn QString QMacPasteboardMime::mimeFor(QString flav) \fn QString QMacMime::mimeFor(QString flav)
Returns the MIME UTI used for Mac flavor \a flav, or 0 if this Returns the MIME UTI used for Mac flavor \a flav, or 0 if this
converter does not support \a flav. converter does not support \a flav.
@ -809,7 +807,7 @@ void registerBuiltInTypes()
*/ */
/* /*
\fn QString QMacPasteboardMime::flavorFor(const QString &mime) \fn QString QMacMime::flavorFor(const QString &mime)
Returns the Mac UTI used for MIME type \a mime, or 0 if this Returns the Mac UTI used for MIME type \a mime, or 0 if this
converter does not support \a mime. converter does not support \a mime.
@ -818,7 +816,7 @@ void registerBuiltInTypes()
*/ */
/* /*
\fn QVariant QMacPasteboardMime::convertToMime(const QString &mime, QList<QByteArray> data, QString flav) \fn QVariant QMacMime::convertToMime(const QString &mime, QList<QByteArray> data, QString flav)
Returns \a data converted from Mac UTI \a flav to MIME type \a Returns \a data converted from Mac UTI \a flav to MIME type \a
mime. mime.
@ -830,7 +828,7 @@ void registerBuiltInTypes()
*/ */
/* /*
\fn QList<QByteArray> QMacPasteboardMime::convertFromMime(const QString &mime, const QVariant &data, const QString & flav) \fn QList<QByteArray> QMacMime::convertFromMime(const QString &mime, const QVariant &data, const QString & flav)
Returns \a data converted from MIME type \a mime Returns \a data converted from MIME type \a mime
to Mac UTI \a flav. to Mac UTI \a flav.

View File

@ -22,7 +22,7 @@
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
class Q_GUI_EXPORT QMacInternalPasteboardMime class Q_GUI_EXPORT QMacMime
{ {
public: public:
enum QMacPasteboardMimeType enum QMacPasteboardMimeType
@ -35,8 +35,9 @@ public:
MIME_ALL_COMPATIBLE = MIME_ALL|MIME_QT_CONVERTOR MIME_ALL_COMPATIBLE = MIME_ALL|MIME_QT_CONVERTOR
}; };
explicit QMacInternalPasteboardMime(QMacPasteboardMimeType); QMacMime();
virtual ~QMacInternalPasteboardMime(); explicit QMacMime(QMacPasteboardMimeType type); // internal
virtual ~QMacMime();
char type() const { return m_type; } char type() const { return m_type; }

View File

@ -14,7 +14,7 @@ using namespace Qt::StringLiterals;
namespace QMacMimeRegistry { namespace QMacMimeRegistry {
typedef QList<QMacInternalPasteboardMime*> MimeList; typedef QList<QMacMime*> MimeList;
Q_GLOBAL_STATIC(MimeList, globalMimeList) Q_GLOBAL_STATIC(MimeList, globalMimeList)
Q_GLOBAL_STATIC(QStringList, globalDraggedTypesList) Q_GLOBAL_STATIC(QStringList, globalDraggedTypesList)
@ -23,16 +23,16 @@ void registerBuiltInTypes();
/*! /*!
\fn void qRegisterDraggedTypes(const QStringList &types) \fn void qRegisterDraggedTypes(const QStringList &types)
\relates QMacPasteboardMime \relates QMacMime
Registers the given \a types as custom pasteboard types. Registers the given \a types as custom pasteboard types.
This function should be called to enable the Drag and Drop events This function should be called to enable the Drag and Drop events
for custom pasteboard types on Cocoa implementations. This is required for custom pasteboard types on Cocoa implementations. This is required
in addition to a QMacPasteboardMime subclass implementation. By default in addition to a QMacMime subclass implementation. By default
drag and drop is enabled for all standard pasteboard types. drag and drop is enabled for all standard pasteboard types.
\sa QMacPasteboardMime \sa QMacMime
*/ */
void registerDraggedTypes(const QStringList &types) void registerDraggedTypes(const QStringList &types)
@ -97,7 +97,7 @@ QString flavorToMime(uchar t, QString flav)
return QString(); return QString();
} }
void registerMimeConverter(QMacInternalPasteboardMime *macMime) void registerMimeConverter(QMacMime *macMime)
{ {
// globalMimeList is in decreasing priority order. Recently added // globalMimeList is in decreasing priority order. Recently added
// converters take prioity over previously added converters: prepend // converters take prioity over previously added converters: prepend
@ -105,7 +105,7 @@ void registerMimeConverter(QMacInternalPasteboardMime *macMime)
globalMimeList()->prepend(macMime); globalMimeList()->prepend(macMime);
} }
void unregisterMimeConverter(QMacInternalPasteboardMime *macMime) void unregisterMimeConverter(QMacMime *macMime)
{ {
if (!QGuiApplication::closingDown()) if (!QGuiApplication::closingDown())
globalMimeList()->removeAll(macMime); globalMimeList()->removeAll(macMime);
@ -113,9 +113,9 @@ void unregisterMimeConverter(QMacInternalPasteboardMime *macMime)
/* /*
Returns a list of all currently defined QMacPasteboardMime objects of type \a t. Returns a list of all currently defined QMacMime objects of type \a t.
*/ */
QList<QMacInternalPasteboardMime *> all(uchar t) QList<QMacMime *> all(uchar t)
{ {
MimeList ret; MimeList ret;
MimeList *mimes = globalMimeList(); MimeList *mimes = globalMimeList();

View File

@ -22,16 +22,16 @@
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
class QMacInternalPasteboardMime; class QMacMime;
namespace QMacMimeRegistry { namespace QMacMimeRegistry {
Q_GUI_EXPORT void initializeMimeTypes(); Q_GUI_EXPORT void initializeMimeTypes();
Q_GUI_EXPORT void destroyMimeTypes(); Q_GUI_EXPORT void destroyMimeTypes();
Q_GUI_EXPORT void registerMimeConverter(QMacInternalPasteboardMime *); Q_GUI_EXPORT void registerMimeConverter(QMacMime *);
Q_GUI_EXPORT void unregisterMimeConverter(QMacInternalPasteboardMime *); Q_GUI_EXPORT void unregisterMimeConverter(QMacMime *);
Q_GUI_EXPORT QList<QMacInternalPasteboardMime *> all(uchar); Q_GUI_EXPORT QList<QMacMime *> all(uchar);
Q_GUI_EXPORT QString flavorToMime(uchar, QString flav); Q_GUI_EXPORT QString flavorToMime(uchar, QString flav);
Q_GUI_EXPORT void registerDraggedTypes(const QStringList &types); Q_GUI_EXPORT void registerDraggedTypes(const QStringList &types);

View File

@ -10,8 +10,8 @@
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
QCocoaClipboard::QCocoaClipboard() QCocoaClipboard::QCocoaClipboard()
:m_clipboard(new QMacPasteboard(kPasteboardClipboard, QMacInternalPasteboardMime::MIME_CLIP)) :m_clipboard(new QMacPasteboard(kPasteboardClipboard, QMacMime::MIME_CLIP))
,m_find(new QMacPasteboard(kPasteboardFind, QMacInternalPasteboardMime::MIME_CLIP)) ,m_find(new QMacPasteboard(kPasteboardFind, QMacMime::MIME_CLIP))
{ {
connect(qGuiApp, &QGuiApplication::applicationStateChanged, this, &QCocoaClipboard::handleApplicationStateChanged); connect(qGuiApp, &QGuiApplication::applicationStateChanged, this, &QCocoaClipboard::handleApplicationStateChanged);
} }

View File

@ -98,7 +98,7 @@ Qt::DropAction QCocoaDrag::drag(QDrag *o)
m_drag = o; m_drag = o;
m_executed_drop_action = Qt::IgnoreAction; m_executed_drop_action = Qt::IgnoreAction;
QMacPasteboard dragBoard(CFStringRef(NSPasteboardNameDrag), QMacInternalPasteboardMime::MIME_DND); QMacPasteboard dragBoard(CFStringRef(NSPasteboardNameDrag), QMacMime::MIME_DND);
m_drag->mimeData()->setData("application/x-qt-mime-type-name"_L1, QByteArray("dummy")); m_drag->mimeData()->setData("application/x-qt-mime-type-name"_L1, QByteArray("dummy"));
dragBoard.setMimeData(m_drag->mimeData(), QMacPasteboard::LazyRequest); dragBoard.setMimeData(m_drag->mimeData(), QMacPasteboard::LazyRequest);
@ -305,7 +305,7 @@ QStringList QCocoaDropData::formats_sys() const
qDebug("DnD: Cannot get PasteBoard!"); qDebug("DnD: Cannot get PasteBoard!");
return formats; return formats;
} }
formats = QMacPasteboard(board, QMacInternalPasteboardMime::MIME_DND).formats(); formats = QMacPasteboard(board, QMacMime::MIME_DND).formats();
return formats; return formats;
} }
@ -317,7 +317,7 @@ QVariant QCocoaDropData::retrieveData_sys(const QString &mimeType, QMetaType typ
qDebug("DnD: Cannot get PasteBoard!"); qDebug("DnD: Cannot get PasteBoard!");
return data; return data;
} }
data = QMacPasteboard(board, QMacInternalPasteboardMime::MIME_DND).retrieveData(mimeType, type); data = QMacPasteboard(board, QMacMime::MIME_DND).retrieveData(mimeType, type);
CFRelease(board); CFRelease(board);
return data; return data;
} }
@ -330,7 +330,7 @@ bool QCocoaDropData::hasFormat_sys(const QString &mimeType) const
qDebug("DnD: Cannot get PasteBoard!"); qDebug("DnD: Cannot get PasteBoard!");
return has; return has;
} }
has = QMacPasteboard(board, QMacInternalPasteboardMime::MIME_DND).hasFormat(mimeType); has = QMacPasteboard(board, QMacMime::MIME_DND).hasFormat(mimeType);
CFRelease(board); CFRelease(board);
return has; return has;
} }

View File

@ -12,10 +12,8 @@ QT_BEGIN_NAMESPACE
using namespace Qt::StringLiterals; using namespace Qt::StringLiterals;
class QMacPasteboardMimeTraditionalMacPlainText : public QMacInternalPasteboardMime { class QMacMimeTraditionalMacPlainText : public QMacMime {
public: public:
QMacPasteboardMimeTraditionalMacPlainText() : QMacInternalPasteboardMime(MIME_ALL) { }
QString flavorFor(const QString &mime) const override; QString flavorFor(const QString &mime) const override;
QString mimeFor(const QString &flav) const override; QString mimeFor(const QString &flav) const override;
bool canConvert(const QString &mime, const QString &flav) const override; bool canConvert(const QString &mime, const QString &flav) const override;
@ -25,33 +23,33 @@ public:
const QString &flav) const override; const QString &flav) const override;
}; };
QString QMacPasteboardMimeTraditionalMacPlainText::flavorFor(const QString &mime) const QString QMacMimeTraditionalMacPlainText::flavorFor(const QString &mime) const
{ {
if (mime == "text/plain"_L1) if (mime == "text/plain"_L1)
return "com.apple.traditional-mac-plain-text"_L1; return "com.apple.traditional-mac-plain-text"_L1;
return QString(); return QString();
} }
QString QMacPasteboardMimeTraditionalMacPlainText::mimeFor(const QString &flav) const QString QMacMimeTraditionalMacPlainText::mimeFor(const QString &flav) const
{ {
if (flav == "com.apple.traditional-mac-plain-text"_L1) if (flav == "com.apple.traditional-mac-plain-text"_L1)
return "text/plain"_L1; return "text/plain"_L1;
return QString(); return QString();
} }
bool QMacPasteboardMimeTraditionalMacPlainText::canConvert(const QString &mime, bool QMacMimeTraditionalMacPlainText::canConvert(const QString &mime,
const QString &flav) const const QString &flav) const
{ {
return flavorFor(mime) == flav; return flavorFor(mime) == flav;
} }
QVariant QVariant
QMacPasteboardMimeTraditionalMacPlainText::convertToMime(const QString &mimetype, QMacMimeTraditionalMacPlainText::convertToMime(const QString &mimetype,
const QList<QByteArray> &data, const QList<QByteArray> &data,
const QString &flavor) const const QString &flavor) const
{ {
if (data.count() > 1) if (data.count() > 1)
qWarning("QMacPasteboardMimeTraditionalMacPlainText: Cannot handle multiple member data"); qWarning("QMacMimeTraditionalMacPlainText: Cannot handle multiple member data");
const QByteArray &firstData = data.first(); const QByteArray &firstData = data.first();
QVariant ret; QVariant ret;
if (flavor == "com.apple.traditional-mac-plain-text"_L1) { if (flavor == "com.apple.traditional-mac-plain-text"_L1) {
@ -65,7 +63,7 @@ QMacPasteboardMimeTraditionalMacPlainText::convertToMime(const QString &mimetype
} }
QList<QByteArray> QList<QByteArray>
QMacPasteboardMimeTraditionalMacPlainText::convertFromMime(const QString &, QMacMimeTraditionalMacPlainText::convertFromMime(const QString &,
const QVariant &data, const QVariant &data,
const QString &flavor) const const QString &flavor) const
{ {
@ -78,7 +76,7 @@ QMacPasteboardMimeTraditionalMacPlainText::convertFromMime(const QString &,
void QCocoaMimeTypes::initializeMimeTypes() void QCocoaMimeTypes::initializeMimeTypes()
{ {
new QMacPasteboardMimeTraditionalMacPlainText; new QMacMimeTraditionalMacPlainText;
} }
QT_END_NAMESPACE QT_END_NAMESPACE

View File

@ -11,7 +11,7 @@
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
class QMacMimeData; class QMacMimeData;
class QMacInternalPasteboardMime; class QMacMime;
class QMacPasteboard class QMacPasteboard
{ {
@ -21,12 +21,12 @@ private:
struct Promise { struct Promise {
Promise() : itemId(0), converter(nullptr) { } Promise() : itemId(0), converter(nullptr) { }
static Promise eagerPromise(int itemId, QMacInternalPasteboardMime *c, QString m, QMacMimeData *d, int o = 0); static Promise eagerPromise(int itemId, QMacMime *c, QString m, QMacMimeData *d, int o = 0);
static Promise lazyPromise(int itemId, QMacInternalPasteboardMime *c, QString m, QMacMimeData *d, int o = 0); static Promise lazyPromise(int itemId, QMacMime *c, QString m, QMacMimeData *d, int o = 0);
Promise(int itemId, QMacInternalPasteboardMime *c, QString m, QMacMimeData *md, int o, DataRequestType drt); Promise(int itemId, QMacMime *c, QString m, QMacMimeData *md, int o, DataRequestType drt);
int itemId, offset; int itemId, offset;
QMacInternalPasteboardMime *converter; QMacMime *converter;
QString mime; QString mime;
QPointer<QMacMimeData> mimeData; QPointer<QMacMimeData> mimeData;
QVariant variantData; QVariant variantData;

View File

@ -54,7 +54,7 @@ private:
QMacMimeData(); QMacMimeData();
}; };
QMacPasteboard::Promise::Promise(int itemId, QMacInternalPasteboardMime *c, QString m, QMacMimeData *md, int o, DataRequestType drt) QMacPasteboard::Promise::Promise(int itemId, QMacMime *c, QString m, QMacMimeData *md, int o, DataRequestType drt)
: itemId(itemId), offset(o), converter(c), mime(m), dataRequestType(drt) : itemId(itemId), offset(o), converter(c), mime(m), dataRequestType(drt)
{ {
// Request the data from the application immediately for eager requests. // Request the data from the application immediately for eager requests.
@ -72,7 +72,7 @@ QMacPasteboard::Promise::Promise(int itemId, QMacInternalPasteboardMime *c, QStr
QMacPasteboard::QMacPasteboard(PasteboardRef p, uchar mt) QMacPasteboard::QMacPasteboard(PasteboardRef p, uchar mt)
{ {
mac_mime_source = false; mac_mime_source = false;
mime_type = mt ? mt : uchar(QMacInternalPasteboardMime::MIME_ALL); mime_type = mt ? mt : uchar(QMacMime::MIME_ALL);
paste = p; paste = p;
CFRetain(paste); CFRetain(paste);
resolvingBeforeDestruction = false; resolvingBeforeDestruction = false;
@ -81,7 +81,7 @@ QMacPasteboard::QMacPasteboard(PasteboardRef p, uchar mt)
QMacPasteboard::QMacPasteboard(uchar mt) QMacPasteboard::QMacPasteboard(uchar mt)
{ {
mac_mime_source = false; mac_mime_source = false;
mime_type = mt ? mt : uchar(QMacInternalPasteboardMime::MIME_ALL); mime_type = mt ? mt : uchar(QMacMime::MIME_ALL);
paste = nullptr; paste = nullptr;
OSStatus err = PasteboardCreate(nullptr, &paste); OSStatus err = PasteboardCreate(nullptr, &paste);
if (err == noErr) { if (err == noErr) {
@ -95,7 +95,7 @@ QMacPasteboard::QMacPasteboard(uchar mt)
QMacPasteboard::QMacPasteboard(CFStringRef name, uchar mt) QMacPasteboard::QMacPasteboard(CFStringRef name, uchar mt)
{ {
mac_mime_source = false; mac_mime_source = false;
mime_type = mt ? mt : uchar(QMacInternalPasteboardMime::MIME_ALL); mime_type = mt ? mt : uchar(QMacMime::MIME_ALL);
paste = nullptr; paste = nullptr;
OSStatus err = PasteboardCreate(name, &paste); OSStatus err = PasteboardCreate(name, &paste);
if (err == noErr) { if (err == noErr) {
@ -112,7 +112,7 @@ QMacPasteboard::~QMacPasteboard()
Commit all promises for paste when shutting down, Commit all promises for paste when shutting down,
unless we are the stack-allocated clipboard used by QCocoaDrag. unless we are the stack-allocated clipboard used by QCocoaDrag.
*/ */
if (mime_type == QMacInternalPasteboardMime::MIME_DND) if (mime_type == QMacMime::MIME_DND)
resolvingBeforeDestruction = true; resolvingBeforeDestruction = true;
PasteboardResolvePromises(paste); PasteboardResolvePromises(paste);
if (paste) if (paste)
@ -131,17 +131,17 @@ OSStatus QMacPasteboard::promiseKeeper(PasteboardRef paste, PasteboardItemID id,
const long promise_id = (long)id; const long promise_id = (long)id;
// Find the kept promise // Find the kept promise
QList<QMacInternalPasteboardMime*> availableConverters QList<QMacMime*> availableConverters
= QMacMimeRegistry::all(QMacInternalPasteboardMime::MIME_ALL); = QMacMimeRegistry::all(QMacMime::MIME_ALL);
const QString flavorAsQString = QString::fromCFString(flavor); const QString flavorAsQString = QString::fromCFString(flavor);
QMacPasteboard::Promise promise; QMacPasteboard::Promise promise;
for (int i = 0; i < qpaste->promises.size(); i++){ for (int i = 0; i < qpaste->promises.size(); i++){
QMacPasteboard::Promise tmp = qpaste->promises[i]; QMacPasteboard::Promise tmp = qpaste->promises[i];
if (!availableConverters.contains(tmp.converter)) { if (!availableConverters.contains(tmp.converter)) {
// promise.converter is a pointer initialized by the value found // promise.converter is a pointer initialized by the value found
// in QMacInternalPasteboardMime's global list of QMacInternalPasteboardMimes. // in QMacMime's global list of QMacMimes.
// We add pointers to this list in QMacInternalPasteboardMime's ctor; // We add pointers to this list in QMacMime's ctor;
// we remove these pointers in QMacInternalPasteboardMime's dtor. // we remove these pointers in QMacMime's dtor.
// If tmp.converter was not found in this list, we probably have a // If tmp.converter was not found in this list, we probably have a
// dangling pointer so let's skip it. // dangling pointer so let's skip it.
continue; continue;
@ -299,7 +299,7 @@ QMacPasteboard::setMimeData(QMimeData *mime_src, DataRequestType dataRequestType
delete mime; delete mime;
mime = mime_src; mime = mime_src;
const QList<QMacInternalPasteboardMime*> availableConverters = QMacMimeRegistry::all(mime_type); const QList<QMacMime*> availableConverters = QMacMimeRegistry::all(mime_type);
if (mime != nullptr) { if (mime != nullptr) {
clear_helper(); clear_helper();
QStringList formats = mime_src->formats(); QStringList formats = mime_src->formats();
@ -433,7 +433,7 @@ QMacPasteboard::retrieveData(const QString &format, QMetaType) const
return QByteArray(); return QByteArray();
qCDebug(lcQpaClipboard, "Pasteboard: retrieveData [%s]", qPrintable(format)); qCDebug(lcQpaClipboard, "Pasteboard: retrieveData [%s]", qPrintable(format));
const QList<QMacInternalPasteboardMime *> availableConverters = QMacMimeRegistry::all(mime_type); const QList<QMacMime *> availableConverters = QMacMimeRegistry::all(mime_type);
for (const auto *c : availableConverters) { for (const auto *c : availableConverters) {
QString c_flavor = c->flavorFor(format); QString c_flavor = c->flavorFor(format);
if (!c_flavor.isEmpty()) { if (!c_flavor.isEmpty()) {

View File

@ -116,8 +116,8 @@ QStringList QIOSMimeData::formats() const
NSArray<NSString *> *pasteboardTypes = [pb pasteboardTypes]; NSArray<NSString *> *pasteboardTypes = [pb pasteboardTypes];
for (NSUInteger i = 0; i < [pasteboardTypes count]; ++i) { for (NSUInteger i = 0; i < [pasteboardTypes count]; ++i) {
QString uti = QString::fromNSString([pasteboardTypes objectAtIndex:i]); const QString uti = QString::fromNSString([pasteboardTypes objectAtIndex:i]);
QString mimeType = QMacMimeRegistry::flavorToMime(QMacInternalPasteboardMime::MIME_ALL, uti); const QString mimeType = QMacMimeRegistry::flavorToMime(QMacMime::MIME_ALL, uti);
if (!mimeType.isEmpty() && !foundMimeTypes.contains(mimeType)) if (!mimeType.isEmpty() && !foundMimeTypes.contains(mimeType))
foundMimeTypes << mimeType; foundMimeTypes << mimeType;
} }
@ -130,8 +130,7 @@ QVariant QIOSMimeData::retrieveData(const QString &mimeType, QMetaType) const
UIPasteboard *pb = [UIPasteboard pasteboardWithQClipboardMode:m_mode]; UIPasteboard *pb = [UIPasteboard pasteboardWithQClipboardMode:m_mode];
NSArray<NSString *> *pasteboardTypes = [pb pasteboardTypes]; NSArray<NSString *> *pasteboardTypes = [pb pasteboardTypes];
foreach (QMacInternalPasteboardMime *converter, foreach (QMacMime *converter, QMacMimeRegistry::all(QMacMime::MIME_ALL)) {
QMacMimeRegistry::all(QMacInternalPasteboardMime::MIME_ALL)) {
if (!converter->canConvert(mimeType, converter->flavorFor(mimeType))) if (!converter->canConvert(mimeType, converter->flavorFor(mimeType)))
continue; continue;
@ -185,8 +184,7 @@ void QIOSClipboard::setMimeData(QMimeData *mimeData, QClipboard::Mode mode)
NSMutableDictionary<NSString *, id> *pbItem = [NSMutableDictionary<NSString *, id> dictionaryWithCapacity:mimeData->formats().size()]; NSMutableDictionary<NSString *, id> *pbItem = [NSMutableDictionary<NSString *, id> dictionaryWithCapacity:mimeData->formats().size()];
foreach (const QString &mimeType, mimeData->formats()) { foreach (const QString &mimeType, mimeData->formats()) {
foreach (QMacInternalPasteboardMime *converter, foreach (QMacMime *converter, QMacMimeRegistry::all(QMacMime::MIME_ALL)) {
QMacMimeRegistry::all(QMacInternalPasteboardMime::MIME_ALL)) {
QString uti = converter->flavorFor(mimeType); QString uti = converter->flavorFor(mimeType);
if (uti.isEmpty() || !converter->canConvert(mimeType, uti)) if (uti.isEmpty() || !converter->canConvert(mimeType, uti))
continue; continue;

View File

@ -106,6 +106,7 @@ QIOSIntegration::~QIOSIntegration()
delete m_clipboard; delete m_clipboard;
m_clipboard = 0; m_clipboard = 0;
#endif #endif
QMacMimeRegistry::destroyMimeTypes(); QMacMimeRegistry::destroyMimeTypes();
delete m_inputContext; delete m_inputContext;