summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGiulio Camuffo <giulio.camuffo@jollamobile.com>2015-01-27 19:44:52 +0200
committerGiulio Camuffo <giulio.camuffo@jollamobile.com>2015-01-29 17:49:15 +0000
commit5925b7da219738cc40b8c7b6aaa8f28c2883f5be (patch)
tree6ca3dca5e2e515b932730aebe273fb5ea2ad8f15
parentcc1088c913af0c84fdfe46b83de1bbd25915a0b5 (diff)
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.cpp25
1 files changed, 21 insertions, 4 deletions
diff --git a/src/client/qwaylanddataoffer.cpp b/src/client/qwaylanddataoffer.cpp
index 4ad73dc7e..ab3642bf4 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]);