Change Qt wxDropTarget to remember widget and disconnect self when necessary. Clean up naming a bit.
This commit is contained in:
@@ -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;
|
||||||
|
@@ -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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//##############################################################################
|
//##############################################################################
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user