Remove the QTextCodec dependency from the xcb plugin
Change-Id: Ic9f4cec4aa7270b8d9e16c345d060d7d820319d3 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
This commit is contained in:
parent
5f013bc10f
commit
f6bd056803
@ -138,13 +138,13 @@ protected:
|
||||
for (int i = 0; i < size; ++i)
|
||||
atoms.append(targets[i]);
|
||||
|
||||
QByteArray encoding;
|
||||
xcb_atom_t fmtatom = mimeAtomForFormat(m_clipboard->connection(), fmt, requestedType, atoms, &encoding);
|
||||
bool hasUtf8 = false;
|
||||
xcb_atom_t fmtatom = mimeAtomForFormat(m_clipboard->connection(), fmt, requestedType, atoms, &hasUtf8);
|
||||
|
||||
if (fmtatom == 0)
|
||||
return QVariant();
|
||||
|
||||
return mimeConvertToFormat(m_clipboard->connection(), fmtatom, m_clipboard->getDataInFormat(modeAtom, fmtatom), fmt, requestedType, encoding);
|
||||
return mimeConvertToFormat(m_clipboard->connection(), fmtatom, m_clipboard->getDataInFormat(modeAtom, fmtatom), fmt, requestedType, hasUtf8);
|
||||
}
|
||||
private:
|
||||
|
||||
|
@ -1362,8 +1362,8 @@ QVariant QXcbDropData::xdndObtainData(const QByteArray &format, QMetaType::Type
|
||||
}
|
||||
|
||||
QVector<xcb_atom_t> atoms = drag->xdnd_types;
|
||||
QByteArray encoding;
|
||||
xcb_atom_t a = mimeAtomForFormat(c, QLatin1String(format), requestedType, atoms, &encoding);
|
||||
bool hasUtf8 = false;
|
||||
xcb_atom_t a = mimeAtomForFormat(c, QLatin1String(format), requestedType, atoms, &hasUtf8);
|
||||
if (a == XCB_NONE)
|
||||
return result;
|
||||
|
||||
@ -1375,7 +1375,7 @@ QVariant QXcbDropData::xdndObtainData(const QByteArray &format, QMetaType::Type
|
||||
result = c->clipboard()->getSelection(xdnd_selection, a, xdnd_selection, drag->targetTime());
|
||||
#endif
|
||||
|
||||
return mimeConvertToFormat(c, a, result, QLatin1String(format), requestedType, encoding);
|
||||
return mimeConvertToFormat(c, a, result, QLatin1String(format), requestedType, hasUtf8);
|
||||
}
|
||||
|
||||
bool QXcbDropData::hasFormat_sys(const QString &format) const
|
||||
|
@ -159,23 +159,15 @@ QVector<xcb_atom_t> QXcbMime::mimeAtomsForFormat(QXcbConnection *connection, con
|
||||
}
|
||||
|
||||
QVariant QXcbMime::mimeConvertToFormat(QXcbConnection *connection, xcb_atom_t a, const QByteArray &d, const QString &format,
|
||||
QMetaType::Type requestedType, const QByteArray &encoding)
|
||||
QMetaType::Type requestedType, bool hasUtf8)
|
||||
{
|
||||
QByteArray data = d;
|
||||
QString atomName = mimeAtomToString(connection, a);
|
||||
// qDebug() << "mimeConvertDataToFormat" << format << atomName << data;
|
||||
|
||||
if (!encoding.isEmpty()
|
||||
&& atomName == format + QLatin1String(";charset=") + QLatin1String(encoding)) {
|
||||
|
||||
#if QT_CONFIG(textcodec)
|
||||
if (requestedType == QMetaType::QString) {
|
||||
QTextCodec *codec = QTextCodec::codecForName(encoding);
|
||||
if (codec)
|
||||
return codec->toUnicode(data);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (hasUtf8 && atomName == format + QLatin1String(";charset=utf-8")) {
|
||||
if (requestedType == QMetaType::QString)
|
||||
return QString::fromUtf8(data);
|
||||
return data;
|
||||
}
|
||||
|
||||
@ -265,9 +257,9 @@ QVariant QXcbMime::mimeConvertToFormat(QXcbConnection *connection, xcb_atom_t a,
|
||||
}
|
||||
|
||||
xcb_atom_t QXcbMime::mimeAtomForFormat(QXcbConnection *connection, const QString &format, QMetaType::Type requestedType,
|
||||
const QVector<xcb_atom_t> &atoms, QByteArray *requestedEncoding)
|
||||
const QVector<xcb_atom_t> &atoms, bool *hasUtf8)
|
||||
{
|
||||
requestedEncoding->clear();
|
||||
*hasUtf8 = false;
|
||||
|
||||
// find matches for string types
|
||||
if (format == QLatin1String("text/plain")) {
|
||||
@ -306,7 +298,7 @@ xcb_atom_t QXcbMime::mimeAtomForFormat(QXcbConnection *connection, const QString
|
||||
|
||||
xcb_atom_t a = connection->internAtom(std::move(formatWithCharset).toLatin1());
|
||||
if (a && atoms.contains(a)) {
|
||||
*requestedEncoding = "utf-8";
|
||||
*hasUtf8 = true;
|
||||
return a;
|
||||
}
|
||||
}
|
||||
|
@ -60,9 +60,9 @@ 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, const QByteArray &encoding);
|
||||
QMetaType::Type requestedType, bool hasUtf8);
|
||||
static xcb_atom_t mimeAtomForFormat(QXcbConnection *connection, const QString &format, QMetaType::Type requestedType,
|
||||
const QVector<xcb_atom_t> &atoms, QByteArray *requestedEncoding);
|
||||
const QVector<xcb_atom_t> &atoms, bool *hasUtf8);
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
Loading…
x
Reference in New Issue
Block a user