diff options
-rw-r--r-- | src/gui/kernel/qclipboard.cpp | 11 | ||||
-rw-r--r-- | tests/auto/gui/kernel/qclipboard/tst_qclipboard.cpp | 18 |
2 files changed, 20 insertions, 9 deletions
diff --git a/src/gui/kernel/qclipboard.cpp b/src/gui/kernel/qclipboard.cpp index ec9a8fdcf0..5be9f19b3e 100644 --- a/src/gui/kernel/qclipboard.cpp +++ b/src/gui/kernel/qclipboard.cpp @@ -463,9 +463,14 @@ const QMimeData* QClipboard::mimeData(Mode mode) const void QClipboard::setMimeData(QMimeData* src, Mode mode) { QPlatformClipboard *clipboard = QGuiApplicationPrivate::platformIntegration()->clipboard(); - if (!clipboard->supportsMode(mode)) return; - - clipboard->setMimeData(src,mode); + if (!clipboard->supportsMode(mode)) { + if (src != 0) { + qWarning("Data set on unsupported clipboard mode. QMimeData object will be deleted."); + src->deleteLater(); + } + } else { + clipboard->setMimeData(src,mode); + } } /*! diff --git a/tests/auto/gui/kernel/qclipboard/tst_qclipboard.cpp b/tests/auto/gui/kernel/qclipboard/tst_qclipboard.cpp index 167e4b41bc..a88f41f7b8 100644 --- a/tests/auto/gui/kernel/qclipboard/tst_qclipboard.cpp +++ b/tests/auto/gui/kernel/qclipboard/tst_qclipboard.cpp @@ -340,8 +340,10 @@ void tst_QClipboard::setMimeData() data->setText("foo"); QGuiApplication::clipboard()->setMimeData(data, QClipboard::Clipboard); - QGuiApplication::clipboard()->setMimeData(data, QClipboard::Selection); - QGuiApplication::clipboard()->setMimeData(data, QClipboard::FindBuffer); + if (QGuiApplication::clipboard()->supportsSelection()) + QGuiApplication::clipboard()->setMimeData(data, QClipboard::Selection); + if (QGuiApplication::clipboard()->supportsFindBuffer()) + QGuiApplication::clipboard()->setMimeData(data, QClipboard::FindBuffer); QSignalSpy spySelection(QGuiApplication::clipboard(), SIGNAL(selectionChanged())); QSignalSpy spyData(QGuiApplication::clipboard(), SIGNAL(dataChanged())); @@ -373,8 +375,10 @@ void tst_QClipboard::setMimeData() data->setText("foo"); QGuiApplication::clipboard()->setMimeData(data, QClipboard::Clipboard); - QGuiApplication::clipboard()->setMimeData(data, QClipboard::Selection); - QGuiApplication::clipboard()->setMimeData(data, QClipboard::FindBuffer); + if (QGuiApplication::clipboard()->supportsSelection()) + QGuiApplication::clipboard()->setMimeData(data, QClipboard::Selection); + if (QGuiApplication::clipboard()->supportsFindBuffer()) + QGuiApplication::clipboard()->setMimeData(data, QClipboard::FindBuffer); QMimeData *newData = new QMimeData; newData->setText("bar"); @@ -385,8 +389,10 @@ void tst_QClipboard::setMimeData() spyFindBuffer.clear(); QGuiApplication::clipboard()->setMimeData(newData, QClipboard::Clipboard); - QGuiApplication::clipboard()->setMimeData(newData, QClipboard::Selection); // used to crash on X11 - QGuiApplication::clipboard()->setMimeData(newData, QClipboard::FindBuffer); + if (QGuiApplication::clipboard()->supportsSelection()) + QGuiApplication::clipboard()->setMimeData(newData, QClipboard::Selection); // used to crash on X11 + if (QGuiApplication::clipboard()->supportsFindBuffer()) + QGuiApplication::clipboard()->setMimeData(newData, QClipboard::FindBuffer); if (QGuiApplication::clipboard()->supportsSelection()) QCOMPARE(spySelection.count(), 1); |