Cleanup API of QMimeData

Do not use QVariant::Type anymore, instead use QMetaType

For some reason, this pushed the qvariant autotest over the limit where
MSVC requires the /bigobj flag, so add that one.

[ChangeLog][QtCore][QMimeData] The signature of the virtual retrieveData()
function has changed and now takes a QMetaType instead of a QVariant::Type.

Change-Id: Ib46773bd731ee2177b1ef74d8162d744be7017ef
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
This commit is contained in:
Lars Knoll 2020-09-10 19:51:38 +02:00
parent cf015cd08b
commit 848927b688
25 changed files with 103 additions and 93 deletions

View File

@ -68,7 +68,7 @@ public:
void setData(const QString &format, const QVariant &data);
QVariant getData(const QString &format) const;
QVariant retrieveTypedData(const QString &format, QMetaType::Type type) const;
QVariant retrieveTypedData(const QString &format, QMetaType type) const;
std::vector<QMimeDataStruct>::iterator find(const QString &format) noexcept {
const auto formatEquals = [](const QString &format) {
@ -110,23 +110,24 @@ QVariant QMimeDataPrivate::getData(const QString &format) const
return it->data;
}
QVariant QMimeDataPrivate::retrieveTypedData(const QString &format, QMetaType::Type type) const
QVariant QMimeDataPrivate::retrieveTypedData(const QString &format, QMetaType type) const
{
Q_Q(const QMimeData);
int typeId = type.id();
QVariant data = q->retrieveData(format, QVariant::Type(type));
QVariant data = q->retrieveData(format, type);
// Text data requested: fallback to URL data if available
if (format == QLatin1String("text/plain") && !data.isValid()) {
data = retrieveTypedData(textUriListLiteral(), QMetaType::QVariantList);
if (data.userType() == QMetaType::QUrl) {
data = retrieveTypedData(textUriListLiteral(), QMetaType(QMetaType::QVariantList));
if (data.metaType().id() == QMetaType::QUrl) {
data = QVariant(data.toUrl().toDisplayString());
} else if (data.userType() == QMetaType::QVariantList) {
} else if (data.metaType().id() == QMetaType::QVariantList) {
QString text;
int numUrls = 0;
const QList<QVariant> list = data.toList();
for (int i = 0; i < list.size(); ++i) {
if (list.at(i).userType() == QMetaType::QUrl) {
if (list.at(i).metaType().id() == QMetaType::QUrl) {
text += list.at(i).toUrl().toDisplayString() + QLatin1Char('\n');
++numUrls;
}
@ -137,24 +138,24 @@ QVariant QMimeDataPrivate::retrieveTypedData(const QString &format, QMetaType::T
}
}
if (data.userType() == type || !data.isValid())
if (data.metaType() == type || !data.isValid())
return data;
// provide more conversion possiblities than just what QVariant provides
// URLs can be lists as well...
if ((type == QMetaType::QUrl && data.userType() == QMetaType::QVariantList)
|| (type == QMetaType::QVariantList && data.userType() == QMetaType::QUrl))
if ((typeId == QMetaType::QUrl && data.metaType().id() == QMetaType::QVariantList)
|| (typeId == QMetaType::QVariantList && data.metaType().id() == QMetaType::QUrl))
return data;
// images and pixmaps are interchangeable
if ((type == QMetaType::QPixmap && data.userType() == QMetaType::QImage)
|| (type == QMetaType::QImage && data.userType() == QMetaType::QPixmap))
if ((typeId == QMetaType::QPixmap && data.metaType().id() == QMetaType::QImage)
|| (typeId == QMetaType::QImage && data.metaType().id() == QMetaType::QPixmap))
return data;
if (data.userType() == QMetaType::QByteArray) {
if (data.metaType().id() == QMetaType::QByteArray) {
// see if we can convert to the requested type
switch(type) {
switch (typeId) {
case QMetaType::QString: {
const QByteArray ba = data.toByteArray();
if (format == QLatin1String("text/html")) {
@ -200,10 +201,10 @@ QT_WARNING_POP
break;
}
} else if (type == QMetaType::QByteArray) {
} else if (typeId == QMetaType::QByteArray) {
// try to convert to bytearray
switch (data.userType()) {
switch (data.metaType().id()) {
case QMetaType::QByteArray:
case QMetaType::QColor:
return data.toByteArray();
@ -216,7 +217,7 @@ QT_WARNING_POP
QByteArray result;
QList<QVariant> list = data.toList();
for (int i = 0; i < list.size(); ++i) {
if (list.at(i).userType() == QMetaType::QUrl) {
if (list.at(i).metaType().id() == QMetaType::QUrl) {
result += list.at(i).toUrl().toEncoded();
result += "\r\n";
}
@ -347,14 +348,14 @@ QMimeData::~QMimeData()
QList<QUrl> QMimeData::urls() const
{
Q_D(const QMimeData);
QVariant data = d->retrieveTypedData(textUriListLiteral(), QMetaType::QVariantList);
QVariant data = d->retrieveTypedData(textUriListLiteral(), QMetaType(QMetaType::QVariantList));
QList<QUrl> urls;
if (data.userType() == QMetaType::QUrl)
if (data.metaType().id() == QMetaType::QUrl)
urls.append(data.toUrl());
else if (data.userType() == QMetaType::QVariantList) {
else if (data.metaType().id() == QMetaType::QVariantList) {
QList<QVariant> list = data.toList();
for (int i = 0; i < list.size(); ++i) {
if (list.at(i).userType() == QMetaType::QUrl)
if (list.at(i).metaType().id() == QMetaType::QUrl)
urls.append(list.at(i).toUrl());
}
}
@ -407,11 +408,11 @@ bool QMimeData::hasUrls() const
QString QMimeData::text() const
{
Q_D(const QMimeData);
QVariant utf8Text = d->retrieveTypedData(textPlainUtf8Literal(), QMetaType::QString);
QVariant utf8Text = d->retrieveTypedData(textPlainUtf8Literal(), QMetaType(QMetaType::QString));
if (!utf8Text.isNull())
return utf8Text.toString();
QVariant data = d->retrieveTypedData(textPlainLiteral(), QMetaType::QString);
QVariant data = d->retrieveTypedData(textPlainLiteral(), QMetaType(QMetaType::QString));
return data.toString();
}
@ -447,7 +448,7 @@ bool QMimeData::hasText() const
QString QMimeData::html() const
{
Q_D(const QMimeData);
QVariant data = d->retrieveTypedData(textHtmlLiteral(), QMetaType::QString);
QVariant data = d->retrieveTypedData(textHtmlLiteral(), QMetaType(QMetaType::QString));
return data.toString();
}
@ -489,7 +490,7 @@ bool QMimeData::hasHtml() const
QVariant QMimeData::imageData() const
{
Q_D(const QMimeData);
return d->retrieveTypedData(applicationXQtImageLiteral(), QMetaType::QImage);
return d->retrieveTypedData(applicationXQtImageLiteral(), QMetaType(QMetaType::QImage));
}
/*!
@ -536,7 +537,7 @@ bool QMimeData::hasImage() const
QVariant QMimeData::colorData() const
{
Q_D(const QMimeData);
return d->retrieveTypedData(applicationXColorLiteral(), QMetaType::QColor);
return d->retrieveTypedData(applicationXColorLiteral(), QMetaType(QMetaType::QColor));
}
/*!
@ -571,7 +572,7 @@ bool QMimeData::hasColor() const
QByteArray QMimeData::data(const QString &mimeType) const
{
Q_D(const QMimeData);
QVariant data = d->retrieveTypedData(mimeType, QMetaType::QByteArray);
QVariant data = d->retrieveTypedData(mimeType, QMetaType(QMetaType::QByteArray));
return data.toByteArray();
}
@ -661,7 +662,7 @@ QStringList QMimeData::formats() const
\sa data()
*/
QVariant QMimeData::retrieveData(const QString &mimeType, QVariant::Type type) const
QVariant QMimeData::retrieveData(const QString &mimeType, QMetaType type) const
{
Q_UNUSED(type);
Q_D(const QMimeData);

View File

@ -85,8 +85,7 @@ public:
void clear();
protected:
virtual QVariant retrieveData(const QString &mimetype,
QVariant::Type preferredType) const;
virtual QVariant retrieveData(const QString &mimetype, QMetaType preferredType) const;
private:
Q_DISABLE_COPY(QMimeData)
Q_DECLARE_PRIVATE(QMimeData)

View File

@ -108,27 +108,27 @@ QStringList QInternalMimeData::formats() const
return realFormats;
}
QVariant QInternalMimeData::retrieveData(const QString &mimeType, QVariant::Type type) const
QVariant QInternalMimeData::retrieveData(const QString &mimeType, QMetaType type) const
{
QVariant data = retrieveData_sys(mimeType, type);
if (mimeType == QLatin1String("application/x-qt-image")) {
if (data.isNull() || (data.userType() == QMetaType::QByteArray && data.toByteArray().isEmpty())) {
if (data.isNull() || (data.metaType().id() == QMetaType::QByteArray && data.toByteArray().isEmpty())) {
// try to find an image
QStringList imageFormats = imageReadMimeFormats();
for (int i = 0; i < imageFormats.size(); ++i) {
data = retrieveData_sys(imageFormats.at(i), type);
if (data.isNull() || (data.userType() == QMetaType::QByteArray && data.toByteArray().isEmpty()))
if (data.isNull() || (data.metaType().id() == QMetaType::QByteArray && data.toByteArray().isEmpty()))
continue;
break;
}
}
int typeId = type;
int typeId = type.id();
// we wanted some image type, but all we got was a byte array. Convert it to an image.
if (data.userType() == QMetaType::QByteArray
if (data.metaType().id() == QMetaType::QByteArray
&& (typeId == QMetaType::QImage || typeId == QMetaType::QPixmap || typeId == QMetaType::QBitmap))
data = QImage::fromData(data.toByteArray());
} else if (mimeType == QLatin1String("application/x-color") && data.userType() == QMetaType::QByteArray) {
} else if (mimeType == QLatin1String("application/x-color") && data.metaType().id() == QMetaType::QByteArray) {
QColor c;
QByteArray ba = data.toByteArray();
if (ba.size() == 8) {
@ -141,7 +141,7 @@ QVariant QInternalMimeData::retrieveData(const QString &mimeType, QVariant::Type
} else {
qWarning("Qt: Invalid color format");
}
} else if (data.userType() != int(type) && data.userType() == QMetaType::QByteArray) {
} else if (data.metaType() != type && data.metaType().id() == QMetaType::QByteArray) {
// try to use mime data's internal conversion stuf.
QInternalMimeData *that = const_cast<QInternalMimeData *>(this);
that->setData(mimeType, data.toByteArray());

View File

@ -81,11 +81,11 @@ public:
static QByteArray renderDataHelper(const QString &mimeType, const QMimeData *data);
protected:
QVariant retrieveData(const QString &mimeType, QVariant::Type type) const override;
QVariant retrieveData(const QString &mimeType, QMetaType type) const override;
virtual bool hasFormat_sys(const QString &mimeType) const = 0;
virtual QStringList formats_sys() const = 0;
virtual QVariant retrieveData_sys(const QString &mimeType, QVariant::Type type) const = 0;
virtual QVariant retrieveData_sys(const QString &mimeType, QMetaType type) const = 0;
};
QT_END_NAMESPACE

View File

@ -74,7 +74,7 @@ public:
// for converting to Qt
virtual bool canConvertToMime(const QString &mimeType, IDataObject *pDataObj) const = 0;
virtual QVariant convertToMime(const QString &mimeType, IDataObject *pDataObj, QVariant::Type preferredType) const = 0;
virtual QVariant convertToMime(const QString &mimeType, IDataObject *pDataObj, QMetaType preferredType) const = 0;
virtual QString mimeForFormat(const FORMATETC &formatetc) const = 0;
};

View File

@ -95,7 +95,7 @@ public:
protected:
bool hasFormat_sys(const QString &mimeType) const;
QStringList formats_sys() const;
QVariant retrieveData_sys(const QString &mimeType, QVariant::Type type) const;
QVariant retrieveData_sys(const QString &mimeType, QMetaType type) const;
public:
CFStringRef dropPasteboard;
};

View File

@ -332,7 +332,7 @@ QStringList QCocoaDropData::formats_sys() const
return formats;
}
QVariant QCocoaDropData::retrieveData_sys(const QString &mimeType, QVariant::Type type) const
QVariant QCocoaDropData::retrieveData_sys(const QString &mimeType, QMetaType type) const
{
QVariant data;
PasteboardRef board;

View File

@ -92,7 +92,7 @@ public:
QStringList formats() const;
bool hasFormat(const QString &format) const;
QVariant retrieveData(const QString &format, QVariant::Type) const;
QVariant retrieveData(const QString &format, QMetaType) const;
void clear();
bool sync() const;

View File

@ -84,7 +84,7 @@ OSStatus PasteboardGetItemCountSafe(PasteboardRef paste, ItemCount *cnt)
class QMacMimeData : public QMimeData
{
public:
QVariant variantData(const QString &mime) { return retrieveData(mime, QVariant::Invalid); }
QVariant variantData(const QString &mime) { return retrieveData(mime, QMetaType()); }
private:
QMacMimeData();
};
@ -313,7 +313,7 @@ public:
QMacPasteboardMimeSource(const QMacPasteboard *p) : QMimeData(), paste(p) { }
~QMacPasteboardMimeSource() { }
virtual QStringList formats() const { return paste->formats(); }
virtual QVariant retrieveData(const QString &format, QVariant::Type type) const { return paste->retrieveData(format, type); }
virtual QVariant retrieveData(const QString &format, QMetaType type) const { return paste->retrieveData(format, type); }
};
QMimeData
@ -476,7 +476,7 @@ QMacPasteboard::hasFormat(const QString &format) const
}
QVariant
QMacPasteboard::retrieveData(const QString &format, QVariant::Type) const
QMacPasteboard::retrieveData(const QString &format, QMetaType) const
{
if (!paste)
return QVariant();

View File

@ -138,7 +138,7 @@ public:
~QIOSMimeData() { }
QStringList formats() const override;
QVariant retrieveData(const QString &mimeType, QVariant::Type type) const override;
QVariant retrieveData(const QString &mimeType, QMetaType type) const override;
private:
const QClipboard::Mode m_mode;
@ -160,7 +160,7 @@ QStringList QIOSMimeData::formats() const
return foundMimeTypes;
}
QVariant QIOSMimeData::retrieveData(const QString &mimeType, QVariant::Type) const
QVariant QIOSMimeData::retrieveData(const QString &mimeType, QMetaType) const
{
UIPasteboard *pb = [UIPasteboard pasteboardWithQClipboardMode:m_mode];
NSArray<NSString *> *pasteboardTypes = [pb pasteboardTypes];

View File

@ -141,9 +141,9 @@ public:
}
protected:
QVariant retrieveData(const QString &mimetype, QVariant::Type preferredType) const override
QVariant retrieveData(const QString &mimetype, QMetaType preferredType) const override
{
qClipboardDebug() << "mimetype=" << mimetype << "preferredType=" << preferredType;
qClipboardDebug() << "mimetype=" << mimetype << "preferredType=" << preferredType.name();
if (is_clipboard_format_present(mimetype.toUtf8().constData()) != 0)
return QMimeData::retrieveData(mimetype, preferredType);

View File

@ -90,8 +90,7 @@ QStringList QWindowsInternalMimeData::formats_sys() const
return fmts;
}
QVariant QWindowsInternalMimeData::retrieveData_sys(const QString &mimeType,
QVariant::Type type) const
QVariant QWindowsInternalMimeData::retrieveData_sys(const QString &mimeType, QMetaType type) const
{
IDataObject *pDataObj = retrieveDataObject();
if (!pDataObj)
@ -103,9 +102,9 @@ QVariant QWindowsInternalMimeData::retrieveData_sys(const QString &mimeType,
result = converter->convertToMime(mimeType, pDataObj, type);
releaseDataObject(pDataObj);
if (QWindowsContext::verbose) {
qCDebug(lcQpaMime) <<__FUNCTION__ << ' ' << mimeType << ' ' << type
<< " returns " << result.type()
<< (result.type() != QVariant::ByteArray ? result.toString() : QStringLiteral("<data>"));
qCDebug(lcQpaMime) <<__FUNCTION__ << ' ' << mimeType << ' ' << type.name()
<< " returns " << result.metaType().name()
<< (result.userType() != QVariant::ByteArray ? result.toString() : QStringLiteral("<data>"));
}
return result;
}

View File

@ -54,7 +54,7 @@ class QWindowsInternalMimeData : public QInternalMimeData {
public:
bool hasFormat_sys(const QString &mimetype) const override;
QStringList formats_sys() const override;
QVariant retrieveData_sys(const QString &mimetype, QVariant::Type preferredType) const override;
QVariant retrieveData_sys(const QString &mimetype, QMetaType preferredType) const override;
protected:
virtual IDataObject *retrieveDataObject() const = 0;

View File

@ -525,7 +525,7 @@ QDebug operator<<(QDebug d, IDataObject *dataObj)
/*!
\fn QVariant QWindowsMime::convertToMime(const QString &mimeType, IDataObject *pDataObj,
QVariant::Type preferredType) const
QMetaType preferredType) const
Returns a QVariant containing the converted data for \a mimeType from \a pDataObj.
If possible the QVariant should be of the \a preferredType to avoid needless conversions.
@ -548,7 +548,7 @@ class QWindowsMimeText : public QPlatformInterface::Private::QWindowsMime
{
public:
bool canConvertToMime(const QString &mimeType, IDataObject *pDataObj) const override;
QVariant convertToMime(const QString &mime, LPDATAOBJECT pDataObj, QVariant::Type preferredType) const override;
QVariant convertToMime(const QString &mime, LPDATAOBJECT pDataObj, QMetaType preferredType) const override;
QString mimeForFormat(const FORMATETC &formatetc) const override;
bool canConvertFromMime(const FORMATETC &formatetc, const QMimeData *mimeData) const override;
bool convertFromMime(const FORMATETC &formatetc, const QMimeData *mimeData, STGMEDIUM *pmedium) const override;
@ -664,7 +664,7 @@ QList<FORMATETC> QWindowsMimeText::formatsForMime(const QString &mimeType, const
return formatics;
}
QVariant QWindowsMimeText::convertToMime(const QString &mime, LPDATAOBJECT pDataObj, QVariant::Type preferredType) const
QVariant QWindowsMimeText::convertToMime(const QString &mime, LPDATAOBJECT pDataObj, QMetaType preferredType) const
{
QVariant ret;
@ -691,7 +691,7 @@ QVariant QWindowsMimeText::convertToMime(const QString &mime, LPDATAOBJECT pData
str = QString::fromLocal8Bit(r);
}
}
if (preferredType == QVariant::String)
if (preferredType.id() == QMetaType::QString)
ret = str;
else
ret = std::move(str).toUtf8();
@ -705,7 +705,7 @@ class QWindowsMimeURI : public QPlatformInterface::Private::QWindowsMime
public:
QWindowsMimeURI();
bool canConvertToMime(const QString &mimeType, IDataObject *pDataObj) const override;
QVariant convertToMime(const QString &mime, LPDATAOBJECT pDataObj, QVariant::Type preferredType) const override;
QVariant convertToMime(const QString &mime, LPDATAOBJECT pDataObj, QMetaType preferredType) const override;
QString mimeForFormat(const FORMATETC &formatetc) const override;
bool canConvertFromMime(const FORMATETC &formatetc, const QMimeData *mimeData) const override;
bool convertFromMime(const FORMATETC &formatetc, const QMimeData *mimeData, STGMEDIUM *pmedium) const override;
@ -819,7 +819,7 @@ QList<FORMATETC> QWindowsMimeURI::formatsForMime(const QString &mimeType, const
return formatics;
}
QVariant QWindowsMimeURI::convertToMime(const QString &mimeType, LPDATAOBJECT pDataObj, QVariant::Type preferredType) const
QVariant QWindowsMimeURI::convertToMime(const QString &mimeType, LPDATAOBJECT pDataObj, QMetaType preferredType) const
{
if (mimeType == u"text/uri-list") {
if (canGetData(CF_HDROP, pDataObj)) {
@ -847,7 +847,7 @@ QVariant QWindowsMimeURI::convertToMime(const QString &mimeType, LPDATAOBJECT pD
}
}
if (preferredType == QVariant::Url && urls.size() == 1)
if (preferredType.id() == QMetaType::QUrl && urls.size() == 1)
return urls.at(0);
if (!urls.isEmpty())
return urls;
@ -878,7 +878,7 @@ public:
// for converting to Qt
bool canConvertToMime(const QString &mimeType, IDataObject *pDataObj) const override;
QVariant convertToMime(const QString &mime, IDataObject *pDataObj, QVariant::Type preferredType) const override;
QVariant convertToMime(const QString &mime, IDataObject *pDataObj, QMetaType preferredType) const override;
QString mimeForFormat(const FORMATETC &formatetc) const override;
private:
@ -928,7 +928,7 @@ in bytes). Charset used is mostly utf8, but can be different, ie. we have to loo
...html...
*/
QVariant QWindowsMimeHtml::convertToMime(const QString &mime, IDataObject *pDataObj, QVariant::Type preferredType) const
QVariant QWindowsMimeHtml::convertToMime(const QString &mime, IDataObject *pDataObj, QMetaType preferredType) const
{
Q_UNUSED(preferredType);
QVariant result;
@ -1015,7 +1015,7 @@ public:
// for converting to Qt
bool canConvertToMime(const QString &mimeType, IDataObject *pDataObj) const override;
QVariant convertToMime(const QString &mime, IDataObject *pDataObj, QVariant::Type preferredType) const override;
QVariant convertToMime(const QString &mime, IDataObject *pDataObj, QMetaType preferredType) const override;
QString mimeForFormat(const FORMATETC &formatetc) const override;
private:
bool hasOriginalDIBV5(IDataObject *pDataObj) const;
@ -1122,7 +1122,7 @@ bool QWindowsMimeImage::hasOriginalDIBV5(IDataObject *pDataObj) const
return !isSynthesized;
}
QVariant QWindowsMimeImage::convertToMime(const QString &mimeType, IDataObject *pDataObj, QVariant::Type preferredType) const
QVariant QWindowsMimeImage::convertToMime(const QString &mimeType, IDataObject *pDataObj, QMetaType preferredType) const
{
Q_UNUSED(preferredType);
QVariant result;
@ -1170,7 +1170,7 @@ public:
// for converting to Qt
bool canConvertToMime(const QString &mimeType, IDataObject *pDataObj) const override;
QVariant convertToMime(const QString &mime, IDataObject *pDataObj, QVariant::Type preferredType) const override;
QVariant convertToMime(const QString &mime, IDataObject *pDataObj, QMetaType preferredType) const override;
QString mimeForFormat(const FORMATETC &formatetc) const override;
private:
@ -1255,14 +1255,14 @@ bool QBuiltInMimes::canConvertToMime(const QString &mimeType, IDataObject *pData
return mit != inFormats.cend() && canGetData(mit.key(), pDataObj);
}
QVariant QBuiltInMimes::convertToMime(const QString &mimeType, IDataObject *pDataObj, QVariant::Type preferredType) const
QVariant QBuiltInMimes::convertToMime(const QString &mimeType, IDataObject *pDataObj, QMetaType preferredType) const
{
QVariant val;
if (canConvertToMime(mimeType, pDataObj)) {
QByteArray data = getData(inFormats.key(mimeType), pDataObj);
if (!data.isEmpty()) {
qCDebug(lcQpaMime) << __FUNCTION__;
if (mimeType == u"text/html" && preferredType == QVariant::String) {
if (mimeType == u"text/html" && preferredType == QMetaType(QMetaType::QString)) {
// text/html is in wide chars on windows (compatible with Mozilla)
val = QString::fromWCharArray(reinterpret_cast<const wchar_t *>(data.constData()));
} else {
@ -1291,7 +1291,7 @@ public:
// for converting to Qt
bool canConvertToMime(const QString &mimeType, IDataObject *pDataObj) const override;
QVariant convertToMime(const QString &mime, IDataObject *pDataObj, QVariant::Type preferredType) const override;
QVariant convertToMime(const QString &mime, IDataObject *pDataObj, QMetaType preferredType) const override;
QString mimeForFormat(const FORMATETC &formatetc) const override;
private:
@ -1411,7 +1411,7 @@ bool QLastResortMimes::canConvertToMime(const QString &mimeType, IDataObject *pD
return canGetData(cf, pDataObj);
}
QVariant QLastResortMimes::convertToMime(const QString &mimeType, IDataObject *pDataObj, QVariant::Type preferredType) const
QVariant QLastResortMimes::convertToMime(const QString &mimeType, IDataObject *pDataObj, QMetaType preferredType) const
{
Q_UNUSED(preferredType);
QVariant val;
@ -1572,7 +1572,7 @@ QString QWindowsMimeConverter::clipboardFormatName(int cf)
QVariant QWindowsMimeConverter::convertToMime(const QStringList &mimeTypes,
IDataObject *pDataObj,
QVariant::Type preferredType,
QMetaType preferredType,
QString *formatIn /* = 0 */) const
{
for (const QString &format : mimeTypes) {
@ -1589,7 +1589,7 @@ QVariant QWindowsMimeConverter::convertToMime(const QStringList &mimeTypes,
}
}
}
qCDebug(lcQpaMime) << __FUNCTION__ << "fails" << mimeTypes << pDataObj << preferredType;
qCDebug(lcQpaMime) << __FUNCTION__ << "fails" << mimeTypes << pDataObj << preferredType.id();
return QVariant();
}

View File

@ -67,7 +67,7 @@ public:
QList<FORMATETC> allFormatsForMime(const QMimeData *mimeData) const;
// Convenience.
QVariant convertToMime(const QStringList &mimeTypes, IDataObject *pDataObj, QVariant::Type preferredType,
QVariant convertToMime(const QStringList &mimeTypes, IDataObject *pDataObj, QMetaType preferredType,
QString *format = nullptr) const;
void registerMime(QWindowsMime *mime);

View File

@ -123,9 +123,9 @@ protected:
return list.contains(format);
}
QVariant retrieveData_sys(const QString &fmt, QVariant::Type type) const override
QVariant retrieveData_sys(const QString &fmt, QMetaType type) const override
{
auto requestedType = QMetaType::Type(type);
auto requestedType = type;
if (fmt.isEmpty() || isEmpty())
return QByteArray();

View File

@ -112,9 +112,9 @@ public:
protected:
bool hasFormat_sys(const QString &mimeType) const override;
QStringList formats_sys() const override;
QVariant retrieveData_sys(const QString &mimeType, QVariant::Type type) const override;
QVariant retrieveData_sys(const QString &mimeType, QMetaType type) const override;
QVariant xdndObtainData(const QByteArray &format, QMetaType::Type requestedType) const;
QVariant xdndObtainData(const QByteArray &format, QMetaType requestedType) const;
QXcbDrag *drag;
};
@ -1342,14 +1342,14 @@ QXcbDropData::~QXcbDropData()
{
}
QVariant QXcbDropData::retrieveData_sys(const QString &mimetype, QVariant::Type requestedType) const
QVariant QXcbDropData::retrieveData_sys(const QString &mimetype, QMetaType requestedType) const
{
QByteArray mime = mimetype.toLatin1();
QVariant data = xdndObtainData(mime, QMetaType::Type(requestedType));
QVariant data = xdndObtainData(mime, requestedType);
return data;
}
QVariant QXcbDropData::xdndObtainData(const QByteArray &format, QMetaType::Type requestedType) const
QVariant QXcbDropData::xdndObtainData(const QByteArray &format, QMetaType requestedType) const
{
QByteArray result;

View File

@ -158,14 +158,14 @@ QList<xcb_atom_t> QXcbMime::mimeAtomsForFormat(QXcbConnection *connection, const
}
QVariant QXcbMime::mimeConvertToFormat(QXcbConnection *connection, xcb_atom_t a, const QByteArray &d, const QString &format,
QMetaType::Type requestedType, bool hasUtf8)
QMetaType requestedType, bool hasUtf8)
{
QByteArray data = d;
QString atomName = mimeAtomToString(connection, a);
// qDebug() << "mimeConvertDataToFormat" << format << atomName << data;
if (hasUtf8 && atomName == format + QLatin1String(";charset=utf-8")) {
if (requestedType == QMetaType::QString)
if (requestedType.id() == QMetaType::QString)
return QString::fromUtf8(data);
return data;
}
@ -255,7 +255,7 @@ QVariant QXcbMime::mimeConvertToFormat(QXcbConnection *connection, xcb_atom_t a,
return QVariant();
}
xcb_atom_t QXcbMime::mimeAtomForFormat(QXcbConnection *connection, const QString &format, QMetaType::Type requestedType,
xcb_atom_t QXcbMime::mimeAtomForFormat(QXcbConnection *connection, const QString &format, QMetaType requestedType,
const QList<xcb_atom_t> &atoms, bool *hasUtf8)
{
*hasUtf8 = false;
@ -288,7 +288,7 @@ xcb_atom_t QXcbMime::mimeAtomForFormat(QXcbConnection *connection, const QString
// for string/text requests try to use a format with a well-defined charset
// first to avoid encoding problems
if (requestedType == QMetaType::QString
if (requestedType.id() == QMetaType::QString
&& format.startsWith(QLatin1String("text/"))
&& !format.contains(QLatin1String("charset="))) {

View File

@ -60,8 +60,8 @@ public:
static bool mimeDataForAtom(QXcbConnection *connection, xcb_atom_t a, QMimeData *mimeData, QByteArray *data,
xcb_atom_t *atomFormat, int *dataFormat);
static QVariant mimeConvertToFormat(QXcbConnection *connection, xcb_atom_t a, const QByteArray &data, const QString &format,
QMetaType::Type requestedType, bool hasUtf8);
static xcb_atom_t mimeAtomForFormat(QXcbConnection *connection, const QString &format, QMetaType::Type requestedType,
QMetaType requestedType, bool hasUtf8);
static xcb_atom_t mimeAtomForFormat(QXcbConnection *connection, const QString &format, QMetaType requestedType,
const QList<xcb_atom_t> &atoms, bool *hasUtf8);
};

View File

@ -3417,7 +3417,7 @@ QStringList QTextEditMimeData::formats() const
return QMimeData::formats();
}
QVariant QTextEditMimeData::retrieveData(const QString &mimeType, QVariant::Type type) const
QVariant QTextEditMimeData::retrieveData(const QString &mimeType, QMetaType type) const
{
if (!fragment.isEmpty())
setup();

View File

@ -308,7 +308,7 @@ public:
virtual QStringList formats() const override;
protected:
virtual QVariant retrieveData(const QString &mimeType, QVariant::Type type) const override;
virtual QVariant retrieveData(const QString &mimeType, QMetaType type) const override;
private:
void setup() const;

View File

@ -325,9 +325,9 @@ void tst_QMimeData::setUrls() const
// test and verify that setData doesn't corrupt url content
foreach (const QString &format, mimeData.formats()) {
QVariant before = mimeData.retrieveData(format, QVariant::ByteArray);
QVariant before = mimeData.retrieveData(format, QMetaType(QMetaType::QByteArray));
mimeData.setData(format, mimeData.data(format));
QVariant after = mimeData.retrieveData(format, QVariant::ByteArray);
QVariant after = mimeData.retrieveData(format, QMetaType(QMetaType::QByteArray));
QCOMPARE(after, before);
}

View File

@ -33,6 +33,11 @@ qt_add_resource(tst_qvariant "qvariant"
## Scopes:
#####################################################################
qt_extend_target(tst_qmetatype CONDITION MSVC
COMPILE_OPTIONS
/bigobj
)
qt_extend_target(tst_qvariant CONDITION NOT QT_FEATURE_doubleconversion AND NOT QT_FEATURE_system_doubleconversion
DEFINES
QT_NO_DOUBLECONVERSION

View File

@ -7,6 +7,12 @@ RESOURCES += qvariant.qrc
DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0
qtConfig(c++14): CONFIG += c++14
qtConfig(c++1z): CONFIG += c++1z
msvc {
# Prevents "fatal error C1128: number of sections exceeded object file format limit".
QMAKE_CXXFLAGS += /bigobj
}
!qtConfig(doubleconversion):!qtConfig(system-doubleconversion) {
DEFINES += QT_NO_DOUBLECONVERSION
}

View File

@ -473,7 +473,7 @@ public:
return false;
}
QVariant convertToMime(const QString &, IDataObject *, QVariant::Type) const override
QVariant convertToMime(const QString &, IDataObject *, QMetaType) const override
{
return QVariant();
}