diff --git a/include/wx/qt/dnd.h b/include/wx/qt/dnd.h index d7e108cbdd..0c0b954692 100644 --- a/include/wx/qt/dnd.h +++ b/include/wx/qt/dnd.h @@ -22,8 +22,8 @@ public: wxDataFormat GetMatchingPair(); - void ConnectToQWidget(QWidget* widget); - void DisconnectFromQWidget(QWidget* widget); + void ConnectTo(QWidget* widget); + void Disconnect(); private: class Impl; diff --git a/src/qt/dnd.cpp b/src/qt/dnd.cpp index 4debdf400a..2f3d7d9d03 100644 --- a/src/qt/dnd.cpp +++ b/src/qt/dnd.cpp @@ -106,10 +106,40 @@ namespace class wxDropTarget::Impl : public QObject { public: - explicit Impl(wxDropTarget* dropTarget) : m_dropTarget(dropTarget) + explicit Impl(wxDropTarget* dropTarget) + : m_dropTarget(dropTarget), + m_widget(NULL) { } + ~Impl() + { + Disconnect(); + } + + void ConnectTo(QWidget* widget) + { + Disconnect(); + + m_widget = widget; + + if ( m_widget != NULL ) + { + m_widget->setAcceptDrops(true); + m_widget->installEventFilter(this); + } + } + + void Disconnect() + { + if ( m_widget != NULL ) + { + m_widget->setAcceptDrops(false); + m_widget->removeEventFilter(this); + m_widget = NULL; + } + } + virtual bool eventFilter(QObject* watched, QEvent* event) wxOVERRIDE { if ( m_dropTarget != NULL ) @@ -191,6 +221,7 @@ public: const QMimeData* m_pendingMimeData; wxDropTarget* m_dropTarget; + QWidget* m_widget; }; wxDropTarget::wxDropTarget(wxDataObject *dataObject) @@ -246,16 +277,14 @@ wxDataFormat wxDropTarget::GetMatchingPair() return wxFormatInvalid; } -void wxDropTarget::ConnectToQWidget(QWidget* widget) +void wxDropTarget::ConnectTo(QWidget* widget) { - widget->setAcceptDrops(true); - widget->installEventFilter(m_pImpl); + m_pImpl->ConnectTo(widget); } -void wxDropTarget::DisconnectFromQWidget(QWidget* widget) +void wxDropTarget::Disconnect() { - widget->setAcceptDrops(false); - widget->removeEventFilter(m_pImpl); + m_pImpl->Disconnect(); } //############################################################################## diff --git a/src/qt/window.cpp b/src/qt/window.cpp index 1788afd646..dba441cb39 100644 --- a/src/qt/window.cpp +++ b/src/qt/window.cpp @@ -698,14 +698,14 @@ void wxWindowQt::SetDropTarget( wxDropTarget *dropTarget ) if ( m_dropTarget != NULL ) { - m_dropTarget->DisconnectFromQWidget(m_qtWindow); + m_dropTarget->Disconnect(); } m_dropTarget = dropTarget; if ( m_dropTarget != NULL ) { - m_dropTarget->ConnectToQWidget(m_qtWindow); + m_dropTarget->ConnectTo(m_qtWindow); } } #endif