diff options
author | Marko Kangas <marko.kangas@theqtcompany.com> | 2015-04-16 16:11:06 +0300 |
---|---|---|
committer | Marko Kangas <marko.kangas@theqtcompany.com> | 2015-04-28 12:46:35 +0000 |
commit | 0abf5ec7c4e035f2d37b45cc2da583df829ec0d0 (patch) | |
tree | dd6930ea6412102b0b558a48691f3db4bb3f45a6 | |
parent | f15d6c3fa910d5200e245fe15ae9932f4b4eca78 (diff) |
Add support to set text/uri-list mimedata via setData()
Fixed issue that text/uri-list mimedata got from QMimeData::data()
was corrupted after setting it back via QMimeData::setData()
Change-Id: I2377523a9286519402ab9127ed7f3fa66e39a679
Task-number: QTBUG-45486
Reviewed-by: David Faure <david.faure@kdab.com>
-rw-r--r-- | src/corelib/kernel/qmimedata.cpp | 17 | ||||
-rw-r--r-- | tests/auto/corelib/kernel/qmimedata/tst_qmimedata.cpp | 17 |
2 files changed, 32 insertions, 2 deletions
diff --git a/src/corelib/kernel/qmimedata.cpp b/src/corelib/kernel/qmimedata.cpp index 0753faf469..3e9cdac966 100644 --- a/src/corelib/kernel/qmimedata.cpp +++ b/src/corelib/kernel/qmimedata.cpp @@ -566,7 +566,22 @@ QByteArray QMimeData::data(const QString &mimeType) const void QMimeData::setData(const QString &mimeType, const QByteArray &data) { Q_D(QMimeData); - d->setData(mimeType, QVariant(data)); + + if (mimeType == QLatin1String("text/uri-list")) { + QByteArray ba = data; + if (ba.endsWith('\0')) + ba.chop(1); + QList<QByteArray> urls = ba.split('\n'); + QList<QVariant> list; + for (int i = 0; i < urls.size(); ++i) { + QByteArray ba = urls.at(i).trimmed(); + if (!ba.isEmpty()) + list.append(QUrl::fromEncoded(ba)); + } + d->setData(mimeType, list); + } else { + d->setData(mimeType, QVariant(data)); + } } /*! diff --git a/tests/auto/corelib/kernel/qmimedata/tst_qmimedata.cpp b/tests/auto/corelib/kernel/qmimedata/tst_qmimedata.cpp index 3886051fdc..01bf16c295 100644 --- a/tests/auto/corelib/kernel/qmimedata/tst_qmimedata.cpp +++ b/tests/auto/corelib/kernel/qmimedata/tst_qmimedata.cpp @@ -297,9 +297,16 @@ void tst_QMimeData::setText() const QVERIFY(mimeData.hasText() == false); } +// Publish retrieveData for verifying content validity +class TstMetaData : public QMimeData +{ +public: + using QMimeData::retrieveData; +}; + void tst_QMimeData::setUrls() const { - QMimeData mimeData; + TstMetaData mimeData; QList<QUrl> shortUrlList; QList<QUrl> longUrlList; @@ -321,6 +328,14 @@ void tst_QMimeData::setUrls() const QCOMPARE(mimeData.urls(), longUrlList); QCOMPARE(mimeData.text(), QString("http://qt-project.org\nhttp://www.google.com\n")); + // test and verify that setData doesn't corrupt url content + foreach (const QString &format, mimeData.formats()) { + QVariant before = mimeData.retrieveData(format, QVariant::ByteArray); + mimeData.setData(format, mimeData.data(format)); + QVariant after = mimeData.retrieveData(format, QVariant::ByteArray); + QCOMPARE(after, before); + } + // clear, verify mimeData.clear(); QCOMPARE(mimeData.hasUrls(), false); |