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)
|
for (int i = 0; i < size; ++i)
|
||||||
atoms.append(targets[i]);
|
atoms.append(targets[i]);
|
||||||
|
|
||||||
QByteArray encoding;
|
bool hasUtf8 = false;
|
||||||
xcb_atom_t fmtatom = mimeAtomForFormat(m_clipboard->connection(), fmt, requestedType, atoms, &encoding);
|
xcb_atom_t fmtatom = mimeAtomForFormat(m_clipboard->connection(), fmt, requestedType, atoms, &hasUtf8);
|
||||||
|
|
||||||
if (fmtatom == 0)
|
if (fmtatom == 0)
|
||||||
return QVariant();
|
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:
|
private:
|
||||||
|
|
||||||
|
@ -1362,8 +1362,8 @@ QVariant QXcbDropData::xdndObtainData(const QByteArray &format, QMetaType::Type
|
|||||||
}
|
}
|
||||||
|
|
||||||
QVector<xcb_atom_t> atoms = drag->xdnd_types;
|
QVector<xcb_atom_t> atoms = drag->xdnd_types;
|
||||||
QByteArray encoding;
|
bool hasUtf8 = false;
|
||||||
xcb_atom_t a = mimeAtomForFormat(c, QLatin1String(format), requestedType, atoms, &encoding);
|
xcb_atom_t a = mimeAtomForFormat(c, QLatin1String(format), requestedType, atoms, &hasUtf8);
|
||||||
if (a == XCB_NONE)
|
if (a == XCB_NONE)
|
||||||
return result;
|
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());
|
result = c->clipboard()->getSelection(xdnd_selection, a, xdnd_selection, drag->targetTime());
|
||||||
#endif
|
#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
|
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,
|
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;
|
QByteArray data = d;
|
||||||
QString atomName = mimeAtomToString(connection, a);
|
QString atomName = mimeAtomToString(connection, a);
|
||||||
// qDebug() << "mimeConvertDataToFormat" << format << atomName << data;
|
// qDebug() << "mimeConvertDataToFormat" << format << atomName << data;
|
||||||
|
|
||||||
if (!encoding.isEmpty()
|
if (hasUtf8 && atomName == format + QLatin1String(";charset=utf-8")) {
|
||||||
&& atomName == format + QLatin1String(";charset=") + QLatin1String(encoding)) {
|
if (requestedType == QMetaType::QString)
|
||||||
|
return QString::fromUtf8(data);
|
||||||
#if QT_CONFIG(textcodec)
|
|
||||||
if (requestedType == QMetaType::QString) {
|
|
||||||
QTextCodec *codec = QTextCodec::codecForName(encoding);
|
|
||||||
if (codec)
|
|
||||||
return codec->toUnicode(data);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return 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,
|
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
|
// find matches for string types
|
||||||
if (format == QLatin1String("text/plain")) {
|
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());
|
xcb_atom_t a = connection->internAtom(std::move(formatWithCharset).toLatin1());
|
||||||
if (a && atoms.contains(a)) {
|
if (a && atoms.contains(a)) {
|
||||||
*requestedEncoding = "utf-8";
|
*hasUtf8 = true;
|
||||||
return a;
|
return a;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -60,9 +60,9 @@ public:
|
|||||||
static bool mimeDataForAtom(QXcbConnection *connection, xcb_atom_t a, QMimeData *mimeData, QByteArray *data,
|
static bool mimeDataForAtom(QXcbConnection *connection, xcb_atom_t a, QMimeData *mimeData, QByteArray *data,
|
||||||
xcb_atom_t *atomFormat, int *dataFormat);
|
xcb_atom_t *atomFormat, int *dataFormat);
|
||||||
static QVariant mimeConvertToFormat(QXcbConnection *connection, xcb_atom_t a, const QByteArray &data, const QString &format,
|
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,
|
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
|
QT_END_NAMESPACE
|
||||||
|
Loading…
x
Reference in New Issue
Block a user