Remove the QTextCodec dependency from the xcb plugin

Change-Id: Ic9f4cec4aa7270b8d9e16c345d060d7d820319d3
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
This commit is contained in:
Lars Knoll 2020-04-07 11:50:58 +02:00
parent 5f013bc10f
commit f6bd056803
4 changed files with 15 additions and 23 deletions

View File

@ -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:

View File

@ -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

View File

@ -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;
}
}

View File

@ -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