summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gui/kernel/qclipboard.cpp11
-rw-r--r--tests/auto/gui/kernel/qclipboard/tst_qclipboard.cpp18
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);