aboutsummaryrefslogtreecommitdiffstats
path: root/src/quicktemplates2/qquickmenu.cpp
diff options
context:
space:
mode:
authorMitch Curtis <mitch.curtis@qt.io>2016-05-10 13:58:05 +0200
committerMitch Curtis <mitch.curtis@qt.io>2016-05-10 12:07:50 +0000
commitf2342bf0646c65512e4df864495cfd3c6c11da65 (patch)
tree16f5893006bfb9d90fd79e4f4f8f6817c170cb54 /src/quicktemplates2/qquickmenu.cpp
parentf8ebef12d3e9554217f6476d42200d82628816c9 (diff)
Menu: support dynamically added items in the same way as static ones
Task-number: QTBUG-53274 Change-Id: I172e431cd456b91dee569b510288d0eccbdb4cef Reviewed-by: J-P Nurmi <jpnurmi@qt.io>
Diffstat (limited to 'src/quicktemplates2/qquickmenu.cpp')
-rw-r--r--src/quicktemplates2/qquickmenu.cpp23
1 files changed, 16 insertions, 7 deletions
diff --git a/src/quicktemplates2/qquickmenu.cpp b/src/quicktemplates2/qquickmenu.cpp
index fdebf6fb..f85dd207 100644
--- a/src/quicktemplates2/qquickmenu.cpp
+++ b/src/quicktemplates2/qquickmenu.cpp
@@ -112,6 +112,14 @@ void QQuickMenuPrivate::insertItem(int index, QQuickItem *item)
resizeItem(item);
QQuickItemPrivate::get(item)->addItemChangeListener(this, QQuickItemPrivate::Destroyed | QQuickItemPrivate::Parent);
contentModel->insert(index, item);
+
+ QQuickMenuItem *menuItem = qobject_cast<QQuickMenuItem *>(item);
+ if (menuItem) {
+ Q_Q(QQuickMenu);
+ QObjectPrivate::connect(menuItem, &QQuickMenuItem::pressed, this, &QQuickMenuPrivate::onItemPressed);
+ QObject::connect(menuItem, &QQuickMenuItem::triggered, q, &QQuickPopup::close);
+ QObjectPrivate::connect(menuItem, &QQuickItem::activeFocusChanged, this, &QQuickMenuPrivate::onItemActiveFocusChanged);
+ }
}
void QQuickMenuPrivate::moveItem(int from, int to)
@@ -126,6 +134,14 @@ void QQuickMenuPrivate::removeItem(int index, QQuickItem *item)
QQuickItemPrivate::get(item)->removeItemChangeListener(this, QQuickItemPrivate::Destroyed | QQuickItemPrivate::Parent);
item->setParentItem(nullptr);
contentModel->remove(index);
+
+ QQuickMenuItem *menuItem = qobject_cast<QQuickMenuItem *>(item);
+ if (menuItem) {
+ Q_Q(QQuickMenu);
+ QObjectPrivate::disconnect(menuItem, &QQuickMenuItem::pressed, this, &QQuickMenuPrivate::onItemPressed);
+ QObject::disconnect(menuItem, &QQuickMenuItem::triggered, q, &QQuickPopup::close);
+ QObjectPrivate::disconnect(menuItem, &QQuickItem::activeFocusChanged, this, &QQuickMenuPrivate::onItemActiveFocusChanged);
+ }
}
void QQuickMenuPrivate::resizeItem(QQuickItem *item)
@@ -231,13 +247,6 @@ void QQuickMenuPrivate::contentData_append(QQmlListProperty<QObject> *prop, QObj
item->setParentItem(p->contentItem);
} else if (p->contentModel->indexOf(item, nullptr) == -1) {
q->addItem(item);
-
- QQuickMenuItem *menuItem = qobject_cast<QQuickMenuItem *>(item);
- if (menuItem) {
- QObjectPrivate::connect(menuItem, &QQuickMenuItem::pressed, p, &QQuickMenuPrivate::onItemPressed);
- QObject::connect(menuItem, &QQuickMenuItem::triggered, q, &QQuickPopup::close);
- QObjectPrivate::connect(menuItem, &QQuickItem::activeFocusChanged, p, &QQuickMenuPrivate::onItemActiveFocusChanged);
- }
}
} else {
p->contentData.append(obj);