crash fixed
This commit is contained in:
parent
bfff8c3fe1
commit
f8cf5e072b
|
@ -63,12 +63,14 @@ namespace
|
||||||
public:
|
public:
|
||||||
GeometryListener( QskDrawer* drawer )
|
GeometryListener( QskDrawer* drawer )
|
||||||
: m_drawer( drawer )
|
: m_drawer( drawer )
|
||||||
|
, m_parent( drawer->parentItem() )
|
||||||
{
|
{
|
||||||
if ( drawer->parentItem() )
|
setEnabled( true );
|
||||||
{
|
}
|
||||||
auto d = QQuickItemPrivate::get( drawer->parentItem() );
|
|
||||||
d->addItemChangeListener( this, QQuickItemPrivate::Geometry );
|
~GeometryListener()
|
||||||
}
|
{
|
||||||
|
setEnabled( false );
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -79,7 +81,22 @@ namespace
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
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;
|
QskDrawer* m_drawer = nullptr;
|
||||||
|
QQuickItem* m_parent = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
class GestureRecognizer : public QskPanGestureRecognizer
|
class GestureRecognizer : public QskPanGestureRecognizer
|
||||||
|
@ -154,7 +171,13 @@ QskDrawer::QskDrawer( QQuickItem* parentItem )
|
||||||
*/
|
*/
|
||||||
setPlacementPolicy( QskPlacementPolicy::Ignore );
|
setPlacementPolicy( QskPlacementPolicy::Ignore );
|
||||||
if ( parentItem )
|
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 );
|
m_data->listener = new GeometryListener( this );
|
||||||
|
}
|
||||||
|
|
||||||
(void) new GestureRecognizer( this );
|
(void) new GestureRecognizer( this );
|
||||||
#if 1
|
#if 1
|
||||||
|
@ -230,7 +253,10 @@ void QskDrawer::itemChange( QQuickItem::ItemChange change,
|
||||||
if ( change == QQuickItem::ItemParentHasChanged )
|
if ( change == QQuickItem::ItemParentHasChanged )
|
||||||
{
|
{
|
||||||
delete m_data->listener;
|
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();
|
return watchedItem->acceptedMouseButtons();
|
||||||
}
|
}
|
||||||
|
|
||||||
QQuickItem* watchedItem = nullptr;
|
QPointer< QQuickItem > watchedItem = nullptr;
|
||||||
#if 1
|
QPointer< QQuickItem > targetItem = nullptr;
|
||||||
QQuickItem* targetItem = nullptr; // QPointer ???
|
|
||||||
#endif
|
|
||||||
|
|
||||||
QVector< QMouseEvent* > pendingEvents;
|
QVector< QMouseEvent* > pendingEvents;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue