From 33018ea7a9a5e31524d93b44feccaf1c69d69251 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Fri, 10 Dec 2021 20:30:24 +0100 Subject: [PATCH] Copy dropped data to wxDataViewEvent Existing code relies on GetDataBuffer() returning a valid pointer, so we need to ensure that this is the case, even if this means copying the data into an internal buffer. --- include/wx/dataview.h | 1 + src/common/datavcmn.cpp | 12 +++++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/include/wx/dataview.h b/include/wx/dataview.h index a1c166ad21..5b556a4c13 100644 --- a/include/wx/dataview.h +++ b/include/wx/dataview.h @@ -972,6 +972,7 @@ protected: #if wxUSE_DRAG_AND_DROP wxDataObject *m_dataObject; + wxMemoryBuffer m_dataBuf; wxDataFormat m_dataFormat; void* m_dataBuffer; size_t m_dataSize; diff --git a/src/common/datavcmn.cpp b/src/common/datavcmn.cpp index a257e1a365..a704326f49 100644 --- a/src/common/datavcmn.cpp +++ b/src/common/datavcmn.cpp @@ -1812,7 +1812,17 @@ void wxDataViewEvent::InitData(wxDataObjectComposite* obj, wxDataFormat format) SetDataFormat(format); SetDataObject(obj->GetObject(format)); - SetDataSize(obj->GetDataSize(format)); + + const size_t size = obj->GetDataSize(format); + SetDataSize(size); + + if ( size ) + { + obj->GetDataHere(format, m_dataBuf.GetWriteBuf(size)); + m_dataBuf.UngetWriteBuf(size); + + SetDataBuffer(m_dataBuf.GetData()); + } } #endif // wxUSE_DRAG_AND_DROP