aboutsummaryrefslogtreecommitdiffstats
path: root/src/templates/qquickstackview_p.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/templates/qquickstackview_p.cpp')
-rw-r--r--src/templates/qquickstackview_p.cpp28
1 files changed, 16 insertions, 12 deletions
diff --git a/src/templates/qquickstackview_p.cpp b/src/templates/qquickstackview_p.cpp
index 498cc44c..a66e7d21 100644
--- a/src/templates/qquickstackview_p.cpp
+++ b/src/templates/qquickstackview_p.cpp
@@ -48,9 +48,12 @@
QT_BEGIN_NAMESPACE
-static QQuickStackAttached *attachedStackObject(QQuickItem *item)
+static QQuickStackAttached *attachedStackObject(QQuickStackElement *element)
{
- return qobject_cast<QQuickStackAttached *>(qmlAttachedPropertiesObject<QQuickStackView>(item, false));
+ QQuickStackAttached *attached = qobject_cast<QQuickStackAttached *>(qmlAttachedPropertiesObject<QQuickStackView>(element->item, false));
+ if (attached)
+ QQuickStackAttachedPrivate::get(attached)->element = element;
+ return attached;
}
class QQuickStackIncubator : public QQmlIncubator
@@ -74,14 +77,9 @@ QQuickStackElement::QQuickStackElement() : QQuickItemViewTransitionableItem(Q_NU
QQuickStackElement::~QQuickStackElement()
{
- if (item) {
+ if (item)
QQuickItemPrivate::get(item)->removeItemChangeListener(this, QQuickItemPrivate::Destroyed);
- QQuickStackAttached *attached = attachedStackObject(item);
- if (attached)
- QQuickStackAttachedPrivate::get(attached)->reset();
- }
-
if (ownComponent)
delete component;
@@ -91,7 +89,13 @@ QQuickStackElement::~QQuickStackElement()
item = Q_NULLPTR;
} else if (item) {
item->setVisible(false);
- item->setParentItem(originalParent);
+ if (item->parentItem() != originalParent) {
+ item->setParentItem(originalParent);
+ } else {
+ QQuickStackAttached *attached = attachedStackObject(this);
+ if (attached)
+ QQuickStackAttachedPrivate::get(attached)->itemParentChanged(item, Q_NULLPTR);
+ }
}
delete context;
@@ -182,7 +186,7 @@ void QQuickStackElement::setIndex(int value)
{
if (index != value) {
index = value;
- QQuickStackAttached *attached = attachedStackObject(item);
+ QQuickStackAttached *attached = attachedStackObject(this);
if (attached)
emit attached->indexChanged();
}
@@ -192,7 +196,7 @@ void QQuickStackElement::setView(QQuickStackView *value)
{
if (view != value) {
view = value;
- QQuickStackAttached *attached = attachedStackObject(item);
+ QQuickStackAttached *attached = attachedStackObject(this);
if (attached)
emit attached->viewChanged();
}
@@ -202,7 +206,7 @@ void QQuickStackElement::setStatus(QQuickStackView::Status value)
{
if (status != value) {
status = value;
- QQuickStackAttached *attached = attachedStackObject(item);
+ QQuickStackAttached *attached = attachedStackObject(this);
if (attached)
emit attached->statusChanged();
}