diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2017-06-06 20:56:54 +0200 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2017-06-07 08:29:43 +0000 |
commit | f37397ba3125e1ab5dc940270d90844a6010224f (patch) | |
tree | 93dfd97bc95dce7df8243a56a6cc9b8a7fae5561 | |
parent | 026353c74a6343281045d42e717cd67e52aaf24c (diff) |
QQuickMenu::popup(): set the current index
If a specific menu item is passed to popup(), set the current index
appropriately to highlight the item.
Change-Id: Id7b687d1248127fe0c2cdb88d3ebd5689763fe24
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
-rw-r--r-- | src/quicktemplates2/qquickmenu.cpp | 3 | ||||
-rw-r--r-- | tests/auto/menu/tst_menu.cpp | 6 |
2 files changed, 9 insertions, 0 deletions
diff --git a/src/quicktemplates2/qquickmenu.cpp b/src/quicktemplates2/qquickmenu.cpp index c7dd0ea5..4d1cfc52 100644 --- a/src/quicktemplates2/qquickmenu.cpp +++ b/src/quicktemplates2/qquickmenu.cpp @@ -702,6 +702,9 @@ void QQuickMenu::popup(QQmlV4Function *args) if (!pos.isNull) setPosition(pos); + if (menuItem) + d->setCurrentIndex(d->contentModel->indexOf(menuItem, nullptr)); + open(); } diff --git a/tests/auto/menu/tst_menu.cpp b/tests/auto/menu/tst_menu.cpp index 8f4792ae..c394717e 100644 --- a/tests/auto/menu/tst_menu.cpp +++ b/tests/auto/menu/tst_menu.cpp @@ -413,16 +413,19 @@ void tst_menu::popup() QTRY_COMPARE(QCursor::pos(), cursorPos); QVERIFY(QMetaObject::invokeMethod(window, "popupAtCursor")); + QCOMPARE(menu->contentItem()->property("currentIndex").toInt(), -1); QTRY_COMPARE(menu->property("x").toInt(), 11); QTRY_COMPARE(menu->property("y").toInt(), 22); menu->close(); QVERIFY(QMetaObject::invokeMethod(window, "popupAtPos", Q_ARG(QVariant, QPointF(33, 44)))); + QCOMPARE(menu->contentItem()->property("currentIndex").toInt(), -1); QTRY_COMPARE(menu->property("x").toInt(), 33); QTRY_COMPARE(menu->property("y").toInt(), 44); menu->close(); QVERIFY(QMetaObject::invokeMethod(window, "popupAtCoord", Q_ARG(QVariant, 55), Q_ARG(QVariant, 66))); + QCOMPARE(menu->contentItem()->property("currentIndex").toInt(), -1); QTRY_COMPARE(menu->property("x").toInt(), 55); QTRY_COMPARE(menu->property("y").toInt(), 66); menu->close(); @@ -434,16 +437,19 @@ void tst_menu::popup() const QList<QQuickMenuItem *> menuItems = QList<QQuickMenuItem *>() << menuItem1 << menuItem2 << menuItem3; for (QQuickMenuItem *menuItem : menuItems) { QVERIFY(QMetaObject::invokeMethod(window, "popupItemAtCursor", Q_ARG(QVariant, QVariant::fromValue(menuItem)))); + QCOMPARE(menu->contentItem()->property("currentIndex").toInt(), menuItems.indexOf(menuItem)); QTRY_COMPARE(menu->property("x").toInt(), 12); QTRY_COMPARE(menu->property("y").toInt(), window->height() / 2 + menu->topPadding() - menuItem->y()); menu->close(); QVERIFY(QMetaObject::invokeMethod(window, "popupItemAtPos", Q_ARG(QVariant, QPointF(33, window->height() / 3)), Q_ARG(QVariant, QVariant::fromValue(menuItem)))); + QCOMPARE(menu->contentItem()->property("currentIndex").toInt(), menuItems.indexOf(menuItem)); QTRY_COMPARE(menu->property("x").toInt(), 33); QTRY_COMPARE(menu->property("y").toInt(), window->height() / 3 + menu->topPadding() - menuItem->y()); menu->close(); QVERIFY(QMetaObject::invokeMethod(window, "popupItemAtCoord", Q_ARG(QVariant, 55), Q_ARG(QVariant, window->height() / 3 * 2), Q_ARG(QVariant, QVariant::fromValue(menuItem)))); + QCOMPARE(menu->contentItem()->property("currentIndex").toInt(), menuItems.indexOf(menuItem)); QTRY_COMPARE(menu->property("x").toInt(), 55); QTRY_COMPARE(menu->property("y").toInt(), window->height() / 3 * 2 + menu->topPadding() - menuItem->y()); menu->close(); |