From: Debao Zhang Date: Fri, 24 Feb 2012 18:51:18 +0000 (-0800) Subject: QClipboard: Fix autotest fails X-Git-Tag: qt-v5.0.0-alpha1~735 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=63017136a1a6625c3528f9b237468a55b7fab12c;p=profile%2Fivi%2Fqtbase.git QClipboard: Fix autotest fails tst_qclipboard.cpp still has Q_WS_WIN which must be clear away. After clean up, auto test will fail under windows: When setMimeData() is called, dataChanged() signal will be emited twice. The solution for QTBUG-24184 has partially solved the problem, but it still there. Make sure emitChanged() only called by QPlatformClipboard will give our more control for this. Task-number: QTBUG-24484 Change-Id: I23566c6d3b32828b6865234c311af3635fe9e299 Reviewed-by: Friedemann Kleint Reviewed-by: Samuel Rødal --- diff --git a/src/gui/kernel/qclipboard_qpa.cpp b/src/gui/kernel/qclipboard_qpa.cpp index b33ccd4..0d97fdd 100644 --- a/src/gui/kernel/qclipboard_qpa.cpp +++ b/src/gui/kernel/qclipboard_qpa.cpp @@ -76,8 +76,6 @@ void QClipboard::setMimeData(QMimeData* src, Mode mode) if (!clipboard->supportsMode(mode)) return; clipboard->setMimeData(src,mode); - - emitChanged(mode); } bool QClipboard::supportsMode(Mode mode) const diff --git a/src/gui/kernel/qplatformclipboard_qpa.cpp b/src/gui/kernel/qplatformclipboard_qpa.cpp index 9e0c60b..bc08a73 100644 --- a/src/gui/kernel/qplatformclipboard_qpa.cpp +++ b/src/gui/kernel/qplatformclipboard_qpa.cpp @@ -96,6 +96,8 @@ void QPlatformClipboard::setMimeData(QMimeData *data, QClipboard::Mode mode) //we know its clipboard Q_UNUSED(mode); q_clipboardData()->setSource(data); + + emitChanged(mode); } bool QPlatformClipboard::supportsMode(QClipboard::Mode mode) const diff --git a/src/plugins/platforms/windows/qwindowsclipboard.cpp b/src/plugins/platforms/windows/qwindowsclipboard.cpp index 4f083e9..cd555d7 100644 --- a/src/plugins/platforms/windows/qwindowsclipboard.cpp +++ b/src/plugins/platforms/windows/qwindowsclipboard.cpp @@ -287,8 +287,7 @@ bool QWindowsClipboard::clipboardViewerWndProc(HWND hwnd, UINT message, WPARAM w const bool owned = ownsClipboard(); if (QWindowsContext::verboseOLE) qDebug("Clipboard changed owned %d", owned); - if (!owned) // changed is emitted by QClipboard in that case. - emitChanged(QClipboard::Clipboard); + emitChanged(QClipboard::Clipboard); // clean up the clipboard object if we no longer own the clipboard if (!owned && m_data) releaseIData(); diff --git a/src/plugins/platforms/xcb/qxcbclipboard.cpp b/src/plugins/platforms/xcb/qxcbclipboard.cpp index bad8056..f8d35ed 100644 --- a/src/plugins/platforms/xcb/qxcbclipboard.cpp +++ b/src/plugins/platforms/xcb/qxcbclipboard.cpp @@ -295,6 +295,7 @@ void QXcbClipboard::setMimeData(QMimeData *data, QClipboard::Mode mode) qWarning("QClipboard::setData: Cannot set X11 selection owner"); } + emitChanged(mode); } bool QXcbClipboard::supportsMode(QClipboard::Mode mode) const diff --git a/src/plugins/platforms/xlib/qxlibclipboard.cpp b/src/plugins/platforms/xlib/qxlibclipboard.cpp index 920b4a4..69a0f20 100644 --- a/src/plugins/platforms/xlib/qxlibclipboard.cpp +++ b/src/plugins/platforms/xlib/qxlibclipboard.cpp @@ -223,6 +223,7 @@ void QXlibClipboard::setMimeData(QMimeData *data, QClipboard::Mode mode) qWarning("QClipboard::setData: Cannot set X11 selection owner"); } + emitChanged(mode); } bool QXlibClipboard::supportsMode(QClipboard::Mode mode) const diff --git a/tests/auto/gui/kernel/qclipboard/tst_qclipboard.cpp b/tests/auto/gui/kernel/qclipboard/tst_qclipboard.cpp index e1b0535..7f41f06 100644 --- a/tests/auto/gui/kernel/qclipboard/tst_qclipboard.cpp +++ b/tests/auto/gui/kernel/qclipboard/tst_qclipboard.cpp @@ -291,19 +291,17 @@ void tst_QClipboard::setMimeData() QGuiApplication::clipboard()->clear(QClipboard::Selection); // used to crash on X11 QGuiApplication::clipboard()->clear(QClipboard::FindBuffer); -#if defined(Q_WS_X11) - QCOMPARE(spySelection.count(), 1); - QCOMPARE(spyData.count(), 1); - QCOMPARE(spyFindBuffer.count(), 0); -#elif defined(Q_OS_MAC) - QCOMPARE(spySelection.count(), 0); - QCOMPARE(spyData.count(), 1); - QCOMPARE(spyFindBuffer.count(), 1); -#elif defined(Q_WS_WIN) - QCOMPARE(spySelection.count(), 0); + if (QGuiApplication::clipboard()->supportsSelection()) + QCOMPARE(spySelection.count(), 1); + else + QCOMPARE(spySelection.count(), 0); + + if (QGuiApplication::clipboard()->supportsFindBuffer()) + QCOMPARE(spyFindBuffer.count(), 1); + else + QCOMPARE(spyFindBuffer.count(), 0); + QCOMPARE(spyData.count(), 1); - QCOMPARE(spyFindBuffer.count(), 0); -#endif // an other crash test data = new QMimeData; @@ -324,19 +322,17 @@ void tst_QClipboard::setMimeData() QGuiApplication::clipboard()->setMimeData(newData, QClipboard::Selection); // used to crash on X11 QGuiApplication::clipboard()->setMimeData(newData, QClipboard::FindBuffer); -#if defined(Q_WS_X11) - QCOMPARE(spySelection.count(), 1); - QCOMPARE(spyData.count(), 1); - QCOMPARE(spyFindBuffer.count(), 0); -#elif defined(Q_OS_MAC) - QCOMPARE(spySelection.count(), 0); - QCOMPARE(spyData.count(), 1); - QCOMPARE(spyFindBuffer.count(), 1); -#elif defined(Q_WS_WIN) - QCOMPARE(spySelection.count(), 0); + if (QGuiApplication::clipboard()->supportsSelection()) + QCOMPARE(spySelection.count(), 1); + else + QCOMPARE(spySelection.count(), 0); + + if (QGuiApplication::clipboard()->supportsFindBuffer()) + QCOMPARE(spyFindBuffer.count(), 1); + else + QCOMPARE(spyFindBuffer.count(), 0); + QCOMPARE(spyData.count(), 1); - QCOMPARE(spyFindBuffer.count(), 0); -#endif } void tst_QClipboard::clearBeforeSetText()