diff options
author | Giulio Camuffo <giulio.camuffo@jollamobile.com> | 2015-01-27 19:44:52 +0200 |
---|---|---|
committer | Giulio Camuffo <giulio.camuffo@jollamobile.com> | 2015-01-29 17:49:15 +0000 |
commit | 5925b7da219738cc40b8c7b6aaa8f28c2883f5be (patch) | |
tree | 6ca3dca5e2e515b932730aebe273fb5ea2ad8f15 | |
parent | cc1088c913af0c84fdfe46b83de1bbd25915a0b5 (diff) | |
download | qtwayland-5925b7da219738cc40b8c7b6aaa8f28c2883f5be.tar.gz |
Fix pasting from sources advertising the utf8 charset
Some clients use "text/plain;charset=utf8" as the mimetype for the
clipboard instead of just "text/plain".
Since we support Utf8 accept it as a valid type.
Change-Id: Icd540f0ff507ed9917b374f3b40fbdc259ce9ee2
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
-rw-r--r-- | src/client/qwaylanddataoffer.cpp | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/src/client/qwaylanddataoffer.cpp b/src/client/qwaylanddataoffer.cpp index 4ad73dc7..ab3642bf 100644 --- a/src/client/qwaylanddataoffer.cpp +++ b/src/client/qwaylanddataoffer.cpp @@ -51,6 +51,11 @@ QT_BEGIN_NAMESPACE +static QString utf8Text() +{ + return QStringLiteral("text/plain;charset=utf-8"); +} + QWaylandDataOffer::QWaylandDataOffer(QWaylandDisplay *display, struct ::wl_data_offer *offer) : QtWayland::wl_data_offer(offer) , m_mimeData(new QWaylandMimeData(this, display)) @@ -100,7 +105,13 @@ void QWaylandMimeData::appendFormat(const QString &mimeType) bool QWaylandMimeData::hasFormat_sys(const QString &mimeType) const { - return m_types.contains(mimeType); + if (m_types.contains(mimeType)) + return true; + + if (mimeType == QStringLiteral("text/plain") && m_types.contains(utf8Text())) + return true; + + return false; } QStringList QWaylandMimeData::formats_sys() const @@ -115,8 +126,14 @@ QVariant QWaylandMimeData::retrieveData_sys(const QString &mimeType, QVariant::T if (m_data.contains(mimeType)) return m_data.value(mimeType); - if (!m_types.contains(mimeType)) - return QVariant(); + QString mime = mimeType; + + if (!m_types.contains(mimeType)) { + if (mimeType == QStringLiteral("text/plain") && m_types.contains(utf8Text())) + mime = utf8Text(); + else + return QVariant(); + } int pipefd[2]; if (::pipe2(pipefd, O_CLOEXEC|O_NONBLOCK) == -1) { @@ -124,7 +141,7 @@ QVariant QWaylandMimeData::retrieveData_sys(const QString &mimeType, QVariant::T return QVariant(); } - m_dataOffer->receive(mimeType, pipefd[1]); + m_dataOffer->receive(mime, pipefd[1]); m_display->flushRequests(); close(pipefd[1]); |