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:
parent
cf015cd08b
commit
848927b688
@ -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);
|
||||
|
@ -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)
|
||||
|
@ -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());
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
};
|
||||
|
||||
|
@ -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;
|
||||
};
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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();
|
||||
|
@ -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];
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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();
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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="))) {
|
||||
|
||||
|
@ -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);
|
||||
};
|
||||
|
||||
|
@ -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();
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user