diff options
Diffstat (limited to 'src/controls/qquickstackview_p.cpp')
-rw-r--r-- | src/controls/qquickstackview_p.cpp | 47 |
1 files changed, 24 insertions, 23 deletions
diff --git a/src/controls/qquickstackview_p.cpp b/src/controls/qquickstackview_p.cpp index c0969199..67cdde59 100644 --- a/src/controls/qquickstackview_p.cpp +++ b/src/controls/qquickstackview_p.cpp @@ -58,14 +58,14 @@ public: QQuickStackIncubator(QQuickStackElement *element) : QQmlIncubator(Synchronous), element(element) { } protected: - void setInitialState(QObject *object) Q_DECL_OVERRIDE { element->initItem(object); } + void setInitialState(QObject *object) Q_DECL_OVERRIDE { element->incubate(object); } private: QQuickStackElement *element; }; QQuickStackElement::QQuickStackElement() : QQuickItemViewTransitionableItem(Q_NULLPTR), - index(-1), removal(false), ownItem(false), ownComponent(false), + index(-1), init(false), removal(false), ownItem(false), ownComponent(false), context(Q_NULLPTR), component(Q_NULLPTR), incubator(Q_NULLPTR), view(Q_NULLPTR), status(QQuickStackView::Inactive) { @@ -114,11 +114,8 @@ QQuickStackElement *QQuickStackElement::fromObject(QObject *object, QQuickStackV element->ownComponent = true; } element->item = qobject_cast<QQuickItem *>(object); - if (element->item) { + if (element->item) element->originalParent = element->item->parentItem(); - element->item->setParentItem(view); - QQuickItemPrivate::get(element->item)->addItemChangeListener(element, QQuickItemPrivate::Destroyed); - } return element; } @@ -138,32 +135,34 @@ bool QQuickStackElement::load(QQuickStackView *parent) incubator = new QQuickStackIncubator(this); component->create(*incubator, context); } - initProperties(); + initialize(); return item; } -void QQuickStackElement::initItem(QObject *object) +void QQuickStackElement::incubate(QObject *object) { item = qmlobject_cast<QQuickItem *>(object); - if (item) { + if (item) QQmlEngine::setObjectOwnership(item, QQmlEngine::CppOwnership); - QQuickItemPrivate *p = QQuickItemPrivate::get(item); - if (!p->widthValid) { - item->setWidth(view->width()); - p->widthValid = true; - } - if (!p->heightValid) { - item->setHeight(view->height()); - p->heightValid = true; - } - item->setParentItem(view); - p->addItemChangeListener(this, QQuickItemPrivate::Destroyed); - } - initProperties(); } -void QQuickStackElement::initProperties() +void QQuickStackElement::initialize() { + if (!item || init) + return; + + QQuickItemPrivate *p = QQuickItemPrivate::get(item); + if (!p->widthValid) { + item->setWidth(view->width()); + p->widthValid = false; + } + if (!p->heightValid) { + item->setHeight(view->height()); + p->heightValid = false; + } + item->setParentItem(view); + p->addItemChangeListener(this, QQuickItemPrivate::Destroyed); + if (!properties.isUndefined()) { QQmlComponentPrivate *d = QQmlComponentPrivate::get(component); Q_ASSERT(d && d->engine); @@ -174,6 +173,8 @@ void QQuickStackElement::initProperties() d->initializeObjectWithInitialProperties(ipv, item); properties.clear(); } + + init = true; } void QQuickStackElement::setIndex(int value) |