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();
void ConnectToQWidget(QWidget* widget);
void DisconnectFromQWidget(QWidget* widget);
void ConnectTo(QWidget* widget);
void Disconnect();
private:
class Impl;

View File

@@ -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();
}
//##############################################################################

View File

@@ -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