Change Qt wxDropTarget to remember widget and disconnect self when necessary. Clean up naming a bit.

This commit is contained in:
Jay Nabonne
2019-01-29 17:11:09 +00:00
parent e995618a3a
commit 6ba6d9967a
3 changed files with 40 additions and 11 deletions

View File

@@ -22,8 +22,8 @@ public:
wxDataFormat GetMatchingPair(); wxDataFormat GetMatchingPair();
void ConnectToQWidget(QWidget* widget); void ConnectTo(QWidget* widget);
void DisconnectFromQWidget(QWidget* widget); void Disconnect();
private: private:
class Impl; class Impl;

View File

@@ -106,10 +106,40 @@ namespace
class wxDropTarget::Impl : public QObject class wxDropTarget::Impl : public QObject
{ {
public: 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 virtual bool eventFilter(QObject* watched, QEvent* event) wxOVERRIDE
{ {
if ( m_dropTarget != NULL ) if ( m_dropTarget != NULL )
@@ -191,6 +221,7 @@ public:
const QMimeData* m_pendingMimeData; const QMimeData* m_pendingMimeData;
wxDropTarget* m_dropTarget; wxDropTarget* m_dropTarget;
QWidget* m_widget;
}; };
wxDropTarget::wxDropTarget(wxDataObject *dataObject) wxDropTarget::wxDropTarget(wxDataObject *dataObject)
@@ -246,16 +277,14 @@ wxDataFormat wxDropTarget::GetMatchingPair()
return wxFormatInvalid; return wxFormatInvalid;
} }
void wxDropTarget::ConnectToQWidget(QWidget* widget) void wxDropTarget::ConnectTo(QWidget* widget)
{ {
widget->setAcceptDrops(true); m_pImpl->ConnectTo(widget);
widget->installEventFilter(m_pImpl);
} }
void wxDropTarget::DisconnectFromQWidget(QWidget* widget) void wxDropTarget::Disconnect()
{ {
widget->setAcceptDrops(false); m_pImpl->Disconnect();
widget->removeEventFilter(m_pImpl);
} }
//############################################################################## //##############################################################################

View File

@@ -698,14 +698,14 @@ void wxWindowQt::SetDropTarget( wxDropTarget *dropTarget )
if ( m_dropTarget != NULL ) if ( m_dropTarget != NULL )
{ {
m_dropTarget->DisconnectFromQWidget(m_qtWindow); m_dropTarget->Disconnect();
} }
m_dropTarget = dropTarget; m_dropTarget = dropTarget;
if ( m_dropTarget != NULL ) if ( m_dropTarget != NULL )
{ {
m_dropTarget->ConnectToQWidget(m_qtWindow); m_dropTarget->ConnectTo(m_qtWindow);
} }
} }
#endif #endif