Clean up wxDropTarget and wxWindow a bit more by moving DnD stuff fully into drop target (besides connecting and disconnecting).

Window doesn't have to know more than how to hook itself up.
Impl now performs function of event filter/adapter.
This commit is contained in:
Jay Nabonne
2019-01-29 16:55:31 +00:00
parent 2bceaaa572
commit 8c63c40953
4 changed files with 113 additions and 129 deletions

View File

@@ -689,7 +689,20 @@ void wxWindowQt::ScrollWindow( int dx, int dy, const wxRect *rect )
#if wxUSE_DRAG_AND_DROP
void wxWindowQt::SetDropTarget( wxDropTarget *dropTarget )
{
dnd_event_adapter.SetDropTarget(dropTarget, m_qtWindow);
if ( m_dropTarget == dropTarget )
return;
if ( m_dropTarget != NULL )
{
m_dropTarget->DisconnectFromQWidget(m_qtWindow);
}
m_dropTarget = dropTarget;
if (m_dropTarget != NULL)
{
m_dropTarget->ConnectToQWidget(m_qtWindow);
}
}
#endif
@@ -1542,60 +1555,3 @@ QPainter *wxWindowQt::QtGetPainter()
{
return m_qtPainter;
}
//##############################################################################
// DnDEventAdapter
//##############################################################################
wxWindow::DnDEventAdapter::DnDEventAdapter() : m_dropTarget(NULL)
{
}
bool wxWindow::DnDEventAdapter::eventFilter(QObject* watched, QEvent* event)
{
if ( m_dropTarget != NULL )
{
switch ( event->type() )
{
case QEvent::Drop:
m_dropTarget->OnQtDrop(event);
return true;
case QEvent::DragEnter:
m_dropTarget->OnQtEnter(event);
return true;
case QEvent::DragMove:
m_dropTarget->OnQtMove(event);
return true;
case QEvent::DragLeave:
m_dropTarget->OnQtLeave(event);
return true;
default:
break;
}
}
return QObject::eventFilter(watched, event);
}
void wxWindow::DnDEventAdapter::SetDropTarget(wxDropTarget* dropTarget, QWidget* window)
{
if ( m_dropTarget == dropTarget )
return;
m_dropTarget = dropTarget;
if ( m_dropTarget == NULL )
{
window->removeEventFilter(this);
window->setAcceptDrops(false);
}
else
{
window->installEventFilter(this);
window->setAcceptDrops(true);
}
}