aboutsummaryrefslogtreecommitdiffstats
path: root/src/quicktemplates2/qquickmenu.cpp
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@qt.io>2019-01-10 16:47:26 +0100
committerLiang Qi <liang.qi@qt.io>2019-01-10 16:47:26 +0100
commitefa04c2ae8427c70848477ace3d8f6e82baaab11 (patch)
treec0394c9cd5ce51961337a7a15e169074dd41632b /src/quicktemplates2/qquickmenu.cpp
parent9c7429219d36e8eb40e1fe6e679715c89209fc40 (diff)
parent6476de0b669162cf08c11f5c8d5ad0b42419f365 (diff)
Merge remote-tracking branch 'origin/5.12' into dev
Conflicts: .qmake.conf src/imports/controls/qtquickcontrols2plugin.cpp Change-Id: I27f1260b539354e084beb28be78385e57fda63e1
Diffstat (limited to 'src/quicktemplates2/qquickmenu.cpp')
-rw-r--r--src/quicktemplates2/qquickmenu.cpp59
1 files changed, 17 insertions, 42 deletions
diff --git a/src/quicktemplates2/qquickmenu.cpp b/src/quicktemplates2/qquickmenu.cpp
index 7086db91..f52405c9 100644
--- a/src/quicktemplates2/qquickmenu.cpp
+++ b/src/quicktemplates2/qquickmenu.cpp
@@ -251,41 +251,6 @@ void QQuickMenuPrivate::removeItem(int index, QQuickItem *item)
}
}
-void QQuickMenuPrivate::createAndAppendItem(QObject *object)
-{
- Q_Q(QQuickMenu);
- QQuickItem *item = qobject_cast<QQuickItem *>(object);
- if (!item) {
- if (QQuickAction *action = qobject_cast<QQuickAction *>(object))
- item = createItem(action);
- else if (QQuickMenu *menu = qobject_cast<QQuickMenu *>(object))
- item = createItem(menu);
- }
-
- if (item) {
- if (QQuickItemPrivate::get(item)->isTransparentForPositioner()) {
- QQuickItemPrivate::get(item)->addItemChangeListener(this, QQuickItemPrivate::SiblingOrder);
- item->setParentItem(contentItem);
- } else if (contentModel->indexOf(item, nullptr) == -1) {
- q->addItem(item);
- }
- } else {
- contentData.append(object);
- }
-}
-
-void QQuickMenuPrivate::recreateItems()
-{
- // removeItem() will remove stuff from contentData, so we have to make a copy of it.
- const auto originalContentData = contentData;
-
- while (contentModel->count() > 0)
- removeItem(0, itemAt(0));
-
- for (QObject *object : originalContentData)
- createAndAppendItem(object);
-}
-
QQuickItem *QQuickMenuPrivate::beginCreateItem()
{
Q_Q(QQuickMenu);
@@ -661,14 +626,24 @@ void QQuickMenuPrivate::contentData_append(QQmlListProperty<QObject> *prop, QObj
QQuickMenu *q = qobject_cast<QQuickMenu *>(prop->object);
QQuickMenuPrivate *p = QQuickMenuPrivate::get(q);
- if (!p->complete) {
- // Don't add items until we're complete, as the delegate could change in the meantime.
- // We'll add it to contentData and create it when we're complete.
- p->contentData.append(obj);
- return;
+ QQuickItem *item = qobject_cast<QQuickItem *>(obj);
+ if (!item) {
+ if (QQuickAction *action = qobject_cast<QQuickAction *>(obj))
+ item = p->createItem(action);
+ else if (QQuickMenu *menu = qobject_cast<QQuickMenu *>(obj))
+ item = p->createItem(menu);
}
- p->createAndAppendItem(obj);
+ if (item) {
+ if (QQuickItemPrivate::get(item)->isTransparentForPositioner()) {
+ QQuickItemPrivate::get(item)->addItemChangeListener(p, QQuickItemPrivate::SiblingOrder);
+ item->setParentItem(p->contentItem);
+ } else if (p->contentModel->indexOf(item, nullptr) == -1) {
+ q->addItem(item);
+ }
+ } else {
+ p->contentData.append(obj);
+ }
}
int QQuickMenuPrivate::contentData_count(QQmlListProperty<QObject> *prop)
@@ -1381,7 +1356,7 @@ void QQuickMenu::componentComplete()
{
Q_D(QQuickMenu);
QQuickPopup::componentComplete();
- d->recreateItems();
+ d->resizeItems();
}
void QQuickMenu::contentItemChange(QQuickItem *newItem, QQuickItem *oldItem)