From 2bceaaa572a84c61730ad4af87e00d71beb2c6f2 Mon Sep 17 00:00:00 2001 From: Jay Nabonne Date: Tue, 29 Jan 2019 16:29:58 +0000 Subject: [PATCH] Clean up wxDropTarget (first stage) by moving Qt specific stuff (e.g. QMimeData) into an Impl. --- include/wx/qt/dnd.h | 7 +++-- src/qt/dnd.cpp | 62 +++++++++++++++++++++++++++------------------ 2 files changed, 41 insertions(+), 28 deletions(-) diff --git a/include/wx/qt/dnd.h b/include/wx/qt/dnd.h index ec8bf6feb3..c76ba7eeac 100644 --- a/include/wx/qt/dnd.h +++ b/include/wx/qt/dnd.h @@ -16,6 +16,7 @@ class WXDLLIMPEXP_CORE wxDropTarget : public wxDropTargetBase { public: wxDropTarget(wxDataObject *dataObject = NULL); + virtual ~wxDropTarget(); virtual bool OnDrop(wxCoord x, wxCoord y) wxOVERRIDE; virtual wxDragResult OnData(wxCoord x, wxCoord y, wxDragResult def) wxOVERRIDE; @@ -29,10 +30,8 @@ public: void OnQtDrop(QEvent* event); private: - class PendingMimeDataSetter; - friend class PendingMimeDataSetter; - - const QMimeData* m_pendingMimeData; + class Impl; + Impl* m_pImpl; }; class WXDLLIMPEXP_CORE wxDropSource: public wxDropSourceBase diff --git a/src/qt/dnd.cpp b/src/qt/dnd.cpp index 750b19524d..575b1ffae2 100644 --- a/src/qt/dnd.cpp +++ b/src/qt/dnd.cpp @@ -82,40 +82,54 @@ namespace } } -class wxDropTarget::PendingMimeDataSetter + +class wxDropTarget::Impl { public: - PendingMimeDataSetter(wxDropTarget* dropTarget, const QMimeData* mimeData) - : m_dropTarget(dropTarget) - { - m_dropTarget->m_pendingMimeData = mimeData; - } - - ~PendingMimeDataSetter() - { - m_dropTarget->m_pendingMimeData = NULL; - } - -private: - wxDropTarget* m_dropTarget; - + const QMimeData* m_pendingMimeData; }; +namespace +{ + class PendingMimeDataSetter + { + public: + PendingMimeDataSetter(const QMimeData*& targetMimeData, const QMimeData* mimeData) + : m_targetMimeData(targetMimeData) + { + m_targetMimeData = mimeData; + } + + ~PendingMimeDataSetter() + { + m_targetMimeData = NULL; + } + + private: + const QMimeData*& m_targetMimeData; + }; +} + wxDropTarget::wxDropTarget(wxDataObject *dataObject) : wxDropTargetBase(dataObject), - m_pendingMimeData(NULL) + m_pImpl(new Impl) { } +wxDropTarget::~wxDropTarget() +{ + delete m_pImpl; +} + bool wxDropTarget::OnDrop(wxCoord WXUNUSED(x), wxCoord WXUNUSED(y)) { return !GetMatchingPair().GetMimeType().empty(); } -wxDragResult wxDropTarget::OnData(wxCoord WXUNUSED(x), wxCoord WXUNUSED(y), wxDragResult default_drag_result) +wxDragResult wxDropTarget::OnData(wxCoord WXUNUSED(x), wxCoord WXUNUSED(y), wxDragResult def) { GetData(); - return default_drag_result; + return def; } bool wxDropTarget::GetData() @@ -126,17 +140,17 @@ bool wxDropTarget::GetData() if ( mimeType.empty() ) return false; - const QByteArray data = m_pendingMimeData->data(wxQtConvertString(mimeType)); + const QByteArray data = m_pImpl->m_pendingMimeData->data(wxQtConvertString(mimeType)); return m_dataObject->SetData(droppedFormat, data.size(), data.data()); } wxDataFormat wxDropTarget::GetMatchingPair() { - if ( m_pendingMimeData == NULL || m_dataObject == NULL ) + if ( m_pImpl->m_pendingMimeData == NULL || m_dataObject == NULL ) return wxFormatInvalid; - const QStringList formats = m_pendingMimeData->formats(); + const QStringList formats = m_pImpl->m_pendingMimeData->formats(); for ( int i = 0; i < formats.count(); ++i ) { const wxDataFormat format(wxQtConvertString(formats[i])); @@ -156,7 +170,7 @@ void wxDropTarget::OnQtEnter(QEvent* event) QDragEnterEvent *e = static_cast(event); const QPoint where = e->pos(); - PendingMimeDataSetter setter(this, e->mimeData()); + PendingMimeDataSetter setter(m_pImpl->m_pendingMimeData, e->mimeData()); wxDragResult result = OnEnter(where.x(), where.y(), DropActionToDragResult(e->proposedAction())); @@ -176,7 +190,7 @@ void wxDropTarget::OnQtMove(QEvent* event) QDragMoveEvent *e = static_cast(event); const QPoint where = e->pos(); - PendingMimeDataSetter setter(this, e->mimeData()); + PendingMimeDataSetter setter(m_pImpl->m_pendingMimeData, e->mimeData()); wxDragResult result = OnDragOver(where.x(), where.y(), DropActionToDragResult(e->proposedAction())); @@ -190,7 +204,7 @@ void wxDropTarget::OnQtDrop(QEvent* event) const QDropEvent *e = static_cast(event); const QPoint where = e->pos(); - PendingMimeDataSetter setter(this, e->mimeData()); + PendingMimeDataSetter setter(m_pImpl->m_pendingMimeData, e->mimeData()); if ( OnDrop(where.x(), where.y()) ) {