diff options
author | Mitch Curtis <mitch.curtis@qt.io> | 2016-05-10 13:58:05 +0200 |
---|---|---|
committer | Mitch Curtis <mitch.curtis@qt.io> | 2016-05-10 12:07:50 +0000 |
commit | f2342bf0646c65512e4df864495cfd3c6c11da65 (patch) | |
tree | 16f5893006bfb9d90fd79e4f4f8f6817c170cb54 /src/quicktemplates2/qquickmenu.cpp | |
parent | f8ebef12d3e9554217f6476d42200d82628816c9 (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.cpp | 23 |
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); |