aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@qt.io>2017-07-12 14:15:32 +0200
committerJ-P Nurmi <jpnurmi@qt.io>2017-07-12 14:24:03 +0000
commit5232a0c4005e743942c8f371aeb1ba024d4d4d03 (patch)
tree0432d1da2e9e10460f0497583788b935fe0d1c44 /src
parent732b6608b9357d957eb9d2676fe7207b65c1b73f (diff)
Add QQuickMenuPrivate::setParentMenu()
To help propagating the cascade-property automatically, instead of doing it manually in openSubMenu() that we're trying to get rid of. Change-Id: I3a3d59cafccc85d6affc325eb60e717e22b8f812 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/quicktemplates2/qquickmenu.cpp31
-rw-r--r--src/quicktemplates2/qquickmenu_p.h5
-rw-r--r--src/quicktemplates2/qquickmenu_p_p.h1
3 files changed, 31 insertions, 6 deletions
diff --git a/src/quicktemplates2/qquickmenu.cpp b/src/quicktemplates2/qquickmenu.cpp
index ce10b612..bc19a707 100644
--- a/src/quicktemplates2/qquickmenu.cpp
+++ b/src/quicktemplates2/qquickmenu.cpp
@@ -215,7 +215,7 @@ void QQuickMenuPrivate::insertItem(int index, QQuickItem *item)
Q_Q(QQuickMenu);
QQuickMenuItemPrivate::get(menuItem)->setMenu(q);
if (QQuickMenu *subMenu = menuItem->subMenu())
- QQuickMenuPrivate::get(subMenu)->parentMenu = q;
+ QQuickMenuPrivate::get(subMenu)->setParentMenu(q);
QObjectPrivate::connect(menuItem, &QQuickMenuItem::triggered, this, &QQuickMenuPrivate::onItemTriggered);
QObjectPrivate::connect(menuItem, &QQuickItem::activeFocusChanged, this, &QQuickMenuPrivate::onItemActiveFocusChanged);
QObjectPrivate::connect(menuItem, &QQuickControl::hoveredChanged, this, &QQuickMenuPrivate::onItemHovered);
@@ -239,7 +239,7 @@ void QQuickMenuPrivate::removeItem(int index, QQuickItem *item)
if (menuItem) {
QQuickMenuItemPrivate::get(menuItem)->setMenu(nullptr);
if (QQuickMenu *subMenu = menuItem->subMenu())
- QQuickMenuPrivate::get(subMenu)->parentMenu = nullptr;
+ QQuickMenuPrivate::get(subMenu)->setParentMenu(nullptr);
QObjectPrivate::disconnect(menuItem, &QQuickMenuItem::triggered, this, &QQuickMenuPrivate::onItemTriggered);
QObjectPrivate::disconnect(menuItem, &QQuickItem::activeFocusChanged, this, &QQuickMenuPrivate::onItemActiveFocusChanged);
QObjectPrivate::disconnect(menuItem, &QQuickControl::hoveredChanged, this, &QQuickMenuPrivate::onItemHovered);
@@ -472,10 +472,24 @@ void QQuickMenuPrivate::openSubMenu(QQuickMenuItem *item, bool activate)
p->allowHorizontalFlip = cascade;
if (activate)
p->setCurrentIndex(0, Qt::PopupFocusReason);
- subMenu->setCascade(cascade);
subMenu->open();
}
+void QQuickMenuPrivate::setParentMenu(QQuickMenu *parent)
+{
+ Q_Q(QQuickMenu);
+ if (parentMenu == parent)
+ return;
+
+ if (parentMenu)
+ QObject::disconnect(parentMenu.data(), &QQuickMenu::cascadeChanged, q, &QQuickMenu::setCascade);
+ if (parent)
+ QObject::connect(parent, &QQuickMenu::cascadeChanged, q, &QQuickMenu::setCascade);
+
+ parentMenu = parent;
+ q->resetCascade();
+}
+
void QQuickMenuPrivate::startHoverTimer()
{
Q_Q(QQuickMenu);
@@ -1005,7 +1019,16 @@ void QQuickMenu::setCascade(bool cascade)
if (d->cascade == cascade)
return;
d->cascade = cascade;
- emit cascadeChanged();
+ emit cascadeChanged(cascade);
+}
+
+void QQuickMenu::resetCascade()
+{
+ Q_D(QQuickMenu);
+ if (d->parentMenu)
+ setCascade(d->parentMenu->cascade());
+ else
+ setCascade(shouldCascade());
}
/*!
diff --git a/src/quicktemplates2/qquickmenu_p.h b/src/quicktemplates2/qquickmenu_p.h
index 1211172b..9eeeadd6 100644
--- a/src/quicktemplates2/qquickmenu_p.h
+++ b/src/quicktemplates2/qquickmenu_p.h
@@ -66,7 +66,7 @@ class Q_QUICKTEMPLATES2_PRIVATE_EXPORT QQuickMenu : public QQuickPopup
Q_PROPERTY(QVariant contentModel READ contentModel CONSTANT FINAL)
Q_PROPERTY(QQmlListProperty<QObject> contentData READ contentData FINAL)
Q_PROPERTY(QString title READ title WRITE setTitle NOTIFY titleChanged FINAL)
- Q_PROPERTY(bool cascade READ cascade WRITE setCascade NOTIFY cascadeChanged FINAL REVISION 3)
+ Q_PROPERTY(bool cascade READ cascade WRITE setCascade RESET resetCascade NOTIFY cascadeChanged FINAL REVISION 3)
Q_PROPERTY(qreal overlap READ overlap WRITE setOverlap NOTIFY overlapChanged FINAL REVISION 3)
Q_PROPERTY(QQmlComponent *delegate READ delegate WRITE setDelegate NOTIFY delegateChanged FINAL REVISION 3)
Q_PROPERTY(int currentIndex READ currentIndex WRITE setCurrentIndex NOTIFY currentIndexChanged FINAL REVISION 3)
@@ -103,6 +103,7 @@ public:
bool cascade() const;
void setCascade(bool cascade);
+ void resetCascade();
qreal overlap() const;
void setOverlap(qreal overlap);
@@ -124,7 +125,7 @@ protected:
Q_SIGNALS:
void titleChanged(const QString &title);
- Q_REVISION(3) void cascadeChanged();
+ Q_REVISION(3) void cascadeChanged(bool cascade);
Q_REVISION(3) void overlapChanged();
Q_REVISION(3) void delegateChanged();
Q_REVISION(3) void currentIndexChanged();
diff --git a/src/quicktemplates2/qquickmenu_p_p.h b/src/quicktemplates2/qquickmenu_p_p.h
index 283c3708..b52f0f3f 100644
--- a/src/quicktemplates2/qquickmenu_p_p.h
+++ b/src/quicktemplates2/qquickmenu_p_p.h
@@ -102,6 +102,7 @@ public:
void onItemActiveFocusChanged();
void openSubMenu(QQuickMenuItem *item, bool activate);
+ void setParentMenu(QQuickMenu *parent);
void startHoverTimer();
void stopHoverTimer();