Windows: Ensure clipboard is flushed out before QGuiApplication is destroyed.
Otherwise, OleFlushClipboard() might query the data again which causes problems for QMimeData-derived classes using QPixmap/QImage. Task-number: QTBUG-36958 Change-Id: I89e58eeb64bd3481e89ad789f310f19ddb4604a2 Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>bb10
parent
22f0dc4f89
commit
42afcfd8ce
|
|
@ -132,19 +132,35 @@ extern "C" LRESULT QT_WIN_CALLBACK qClipboardViewerWndProc(HWND hwnd, UINT messa
|
|||
return DefWindowProc(hwnd, message, wParam, lParam);
|
||||
}
|
||||
|
||||
// QTBUG-36958, ensure the clipboard is flushed before
|
||||
// QGuiApplication is destroyed since OleFlushClipboard()
|
||||
// might query the data again which causes problems
|
||||
// for QMimeData-derived classes using QPixmap/QImage.
|
||||
static void cleanClipboardPostRoutine()
|
||||
{
|
||||
if (QWindowsClipboard *cl = QWindowsClipboard::instance())
|
||||
cl->cleanup();
|
||||
}
|
||||
|
||||
QWindowsClipboard *QWindowsClipboard::m_instance = 0;
|
||||
|
||||
QWindowsClipboard::QWindowsClipboard() :
|
||||
m_data(0), m_clipboardViewer(0), m_nextClipboardViewer(0)
|
||||
{
|
||||
QWindowsClipboard::m_instance = this;
|
||||
qAddPostRoutine(cleanClipboardPostRoutine);
|
||||
}
|
||||
|
||||
QWindowsClipboard::~QWindowsClipboard()
|
||||
{
|
||||
cleanup();
|
||||
QWindowsClipboard::m_instance = 0;
|
||||
}
|
||||
|
||||
void QWindowsClipboard::cleanup()
|
||||
{
|
||||
unregisterViewer(); // Should release data if owner.
|
||||
releaseIData();
|
||||
QWindowsClipboard::m_instance = 0;
|
||||
}
|
||||
|
||||
void QWindowsClipboard::releaseIData()
|
||||
|
|
|
|||
|
|
@ -64,6 +64,7 @@ public:
|
|||
QWindowsClipboard();
|
||||
~QWindowsClipboard();
|
||||
void registerViewer(); // Call in initialization, when context is up.
|
||||
void cleanup();
|
||||
|
||||
virtual QMimeData *mimeData(QClipboard::Mode mode = QClipboard::Clipboard);
|
||||
virtual void setMimeData(QMimeData *data, QClipboard::Mode mode = QClipboard::Clipboard);
|
||||
|
|
|
|||
Loading…
Reference in New Issue