crash fixed
This commit is contained in:
parent
bfff8c3fe1
commit
f8cf5e072b
|
@ -63,12 +63,14 @@ namespace
|
|||
public:
|
||||
GeometryListener( QskDrawer* drawer )
|
||||
: m_drawer( drawer )
|
||||
, m_parent( drawer->parentItem() )
|
||||
{
|
||||
if ( drawer->parentItem() )
|
||||
{
|
||||
auto d = QQuickItemPrivate::get( drawer->parentItem() );
|
||||
d->addItemChangeListener( this, QQuickItemPrivate::Geometry );
|
||||
}
|
||||
setEnabled( true );
|
||||
}
|
||||
|
||||
~GeometryListener()
|
||||
{
|
||||
setEnabled( false );
|
||||
}
|
||||
|
||||
private:
|
||||
|
@ -79,7 +81,22 @@ namespace
|
|||
}
|
||||
|
||||
private:
|
||||
void setEnabled( bool on )
|
||||
{
|
||||
if ( m_parent )
|
||||
{
|
||||
const auto changeTypes = QQuickItemPrivate::Geometry;
|
||||
|
||||
auto d = QQuickItemPrivate::get( m_parent );
|
||||
if ( on )
|
||||
d->addItemChangeListener( this, changeTypes );
|
||||
else
|
||||
d->removeItemChangeListener( this, changeTypes );
|
||||
}
|
||||
}
|
||||
|
||||
QskDrawer* m_drawer = nullptr;
|
||||
QQuickItem* m_parent = nullptr;
|
||||
};
|
||||
|
||||
class GestureRecognizer : public QskPanGestureRecognizer
|
||||
|
@ -154,7 +171,13 @@ QskDrawer::QskDrawer( QQuickItem* parentItem )
|
|||
*/
|
||||
setPlacementPolicy( QskPlacementPolicy::Ignore );
|
||||
if ( parentItem )
|
||||
{
|
||||
/*
|
||||
QskPopup has an internal QskInputGrabber, that does something
|
||||
very similar. Maybe we can make use of it ... TODO
|
||||
*/
|
||||
m_data->listener = new GeometryListener( this );
|
||||
}
|
||||
|
||||
(void) new GestureRecognizer( this );
|
||||
#if 1
|
||||
|
@ -230,7 +253,10 @@ void QskDrawer::itemChange( QQuickItem::ItemChange change,
|
|||
if ( change == QQuickItem::ItemParentHasChanged )
|
||||
{
|
||||
delete m_data->listener;
|
||||
m_data->listener = new GeometryListener( this );
|
||||
m_data->listener = nullptr;
|
||||
|
||||
if ( parentItem() )
|
||||
m_data->listener = new GeometryListener( this );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -68,10 +68,8 @@ class QskGestureRecognizer::PrivateData
|
|||
return watchedItem->acceptedMouseButtons();
|
||||
}
|
||||
|
||||
QQuickItem* watchedItem = nullptr;
|
||||
#if 1
|
||||
QQuickItem* targetItem = nullptr; // QPointer ???
|
||||
#endif
|
||||
QPointer< QQuickItem > watchedItem = nullptr;
|
||||
QPointer< QQuickItem > targetItem = nullptr;
|
||||
|
||||
QVector< QMouseEvent* > pendingEvents;
|
||||
|
||||
|
|
Loading…
Reference in New Issue