diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2016-05-02 23:52:27 +0200 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2016-05-02 23:57:00 +0200 |
commit | 85c12f26cf89a352eac4ff3b6e37a2dda2747d27 (patch) | |
tree | 6f5a6d210ff3d5c946c5335aa44d8381d0045963 /src/quicktemplates2/qquickcontainer.cpp | |
parent | fa20ad9024ed2d0e1596cd8a9e24bcb6abd080d8 (diff) | |
parent | b7e022e323e6064cff146268802bfc4af0fc6135 (diff) |
Merge remote-tracking branch 'origin/5.6' into 5.7
Change-Id: I350192e86f53ac863b288683f832688255f6809e
Diffstat (limited to 'src/quicktemplates2/qquickcontainer.cpp')
-rw-r--r-- | src/quicktemplates2/qquickcontainer.cpp | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/src/quicktemplates2/qquickcontainer.cpp b/src/quicktemplates2/qquickcontainer.cpp index 81e6f83f..6c0e6df5 100644 --- a/src/quicktemplates2/qquickcontainer.cpp +++ b/src/quicktemplates2/qquickcontainer.cpp @@ -76,16 +76,24 @@ void QQuickContainerPrivate::init() void QQuickContainerPrivate::cleanup() { + Q_Q(QQuickContainer); // ensure correct destruction order (QTBUG-46798) - delete contentItem; const int count = contentModel->count(); for (int i = 0; i < count; ++i) { QQuickItem *item = itemAt(i); - if (item) { - QQuickItemPrivate::get(item)->removeItemChangeListener(this, QQuickItemPrivate::Destroyed | QQuickItemPrivate::Parent); - delete item; - } + if (item) + QQuickItemPrivate::get(item)->removeItemChangeListener(this, QQuickItemPrivate::Destroyed | QQuickItemPrivate::Parent | QQuickItemPrivate::SiblingOrder); } + + QQuickItem *focusItem = QQuickItemPrivate::get(contentItem)->subFocusItem; + if (focusItem && window) + QQuickWindowPrivate::get(window)->clearFocusInScope(contentItem, focusItem, Qt::OtherFocusReason); + + q->contentItemChange(nullptr, contentItem); + delete contentItem; + + QObject::disconnect(contentModel, &QQmlObjectModel::countChanged, q, &QQuickContainer::countChanged); + QObject::disconnect(contentModel, &QQmlObjectModel::childrenChanged, q, &QQuickContainer::contentChildrenChanged); delete contentModel; } @@ -104,7 +112,7 @@ void QQuickContainerPrivate::insertItem(int index, QQuickItem *item) updatingCurrent = true; item->setParentItem(effectiveContentItem(contentItem)); - QQuickItemPrivate::get(item)->addItemChangeListener(this, QQuickItemPrivate::Destroyed | QQuickItemPrivate::Parent); + QQuickItemPrivate::get(item)->addItemChangeListener(this, QQuickItemPrivate::Destroyed | QQuickItemPrivate::Parent | QQuickItemPrivate::SiblingOrder); contentModel->insert(index, item); q->itemAdded(index, item); @@ -150,7 +158,7 @@ void QQuickContainerPrivate::removeItem(int index, QQuickItem *item) currentChanged = true; } - QQuickItemPrivate::get(item)->removeItemChangeListener(this, QQuickItemPrivate::Destroyed | QQuickItemPrivate::Parent); + QQuickItemPrivate::get(item)->removeItemChangeListener(this, QQuickItemPrivate::Destroyed | QQuickItemPrivate::Parent | QQuickItemPrivate::SiblingOrder); item->setParentItem(nullptr); contentModel->remove(index); @@ -208,12 +216,10 @@ void QQuickContainerPrivate::contentData_append(QQmlListProperty<QObject> *prop, QQuickContainer *q = static_cast<QQuickContainer *>(prop->object); QQuickItem *item = qobject_cast<QQuickItem *>(obj); if (item) { - if (QQuickItemPrivate::get(item)->isTransparentForPositioner()) { - QQuickItemPrivate::get(item)->addItemChangeListener(p, QQuickItemPrivate::SiblingOrder); + if (QQuickItemPrivate::get(item)->isTransparentForPositioner()) item->setParentItem(effectiveContentItem(p->contentItem)); - } else if (p->contentModel->indexOf(item, nullptr) == -1) { + else if (p->contentModel->indexOf(item, nullptr) == -1) q->addItem(item); - } } else { p->contentData.append(obj); } |