diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2018-07-03 08:24:42 +0200 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2018-09-28 14:04:20 +0000 |
commit | ecfa33e751115919ddb47a6f641a2b1842c96788 (patch) | |
tree | f6f872d7c36b285ceda8125528a3e079983cea0c /src/plugins/platforms/windows/qwindowsclipboard.cpp | |
parent | 76c4a7049957a0497530e06cccb92cebf3f1477d (diff) |
Windows QPA: Work around intermittent clipboard copy failures
Repeatedly attempt to open the clipboard in case it is opened
by other applications.
Task-number: QTBUG-27097
Change-Id: Ic1cfec0bb17e34f8c7f744add21a4431dae4f5b7
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
Diffstat (limited to 'src/plugins/platforms/windows/qwindowsclipboard.cpp')
-rw-r--r-- | src/plugins/platforms/windows/qwindowsclipboard.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/plugins/platforms/windows/qwindowsclipboard.cpp b/src/plugins/platforms/windows/qwindowsclipboard.cpp index 53f329422c..8b386da9f7 100644 --- a/src/plugins/platforms/windows/qwindowsclipboard.cpp +++ b/src/plugins/platforms/windows/qwindowsclipboard.cpp @@ -50,6 +50,7 @@ #include <QtCore/qdebug.h> #include <QtCore/qmimedata.h> #include <QtCore/qstringlist.h> +#include <QtCore/qthread.h> #include <QtCore/qvariant.h> #include <QtCore/qurl.h> @@ -318,7 +319,15 @@ void QWindowsClipboard::setMimeData(QMimeData *mimeData, QClipboard::Mode mode) m_data = new QWindowsOleDataObject(mimeData); } - const HRESULT src = OleSetClipboard(m_data); + HRESULT src = S_FALSE; + int attempts = 0; + for (; attempts < 3; ++attempts) { + src = OleSetClipboard(m_data); + if (src != CLIPBRD_E_CANT_OPEN || QWindowsContext::isSessionLocked()) + break; + QThread::msleep(100); + } + if (src != S_OK) { QString mimeDataFormats = mimeData ? mimeData->formats().join(QLatin1String(", ")) : QString(QStringLiteral("NULL")); |