aboutsummaryrefslogtreecommitdiffstats
path: root/src/controls/qquickstackview_p.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/controls/qquickstackview_p.cpp')
-rw-r--r--src/controls/qquickstackview_p.cpp47
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)