From b6963f109ad54c6f03b3391d57db9a536d49ba7d Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Thu, 10 Jan 2013 22:43:22 +0200 Subject: QMenu: Fix nested popup when keyboard shortcut is used Task-number: QTBUG-20403 Change-Id: I2a5fe00dd16e9dc1ec0d742a8f48083fc2954996 Reviewed-by: Friedemann Kleint Reviewed-by: Olivier Goffart Reviewed-by: Jarek Kobus --- src/widgets/widgets/qmenu.cpp | 2 +- tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/widgets/widgets/qmenu.cpp b/src/widgets/widgets/qmenu.cpp index 17f9ca7911..b3fc6524c5 100644 --- a/src/widgets/widgets/qmenu.cpp +++ b/src/widgets/widgets/qmenu.cpp @@ -2722,7 +2722,7 @@ void QMenu::keyPressEvent(QKeyEvent *e) key_consumed = true; if(d->scroll) d->scrollMenu(nextAction, QMenuPrivate::QMenuScroller::ScrollCenter, false); - d->setCurrentAction(nextAction, 20, QMenuPrivate::SelectedFromElsewhere, true); + d->setCurrentAction(nextAction, 0, QMenuPrivate::SelectedFromElsewhere, true); if (!nextAction->menu() && activateAction) { d->setSyncAction(); d->activateAction(nextAction, QAction::Trigger); diff --git a/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp b/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp index 4e5b82a712..9da1dd389a 100644 --- a/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp +++ b/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp @@ -101,6 +101,7 @@ private slots: void pushButtonPopulateOnAboutToShow(); void QTBUG7907_submenus_autoselect(); void QTBUG7411_submenus_activate(); + void QTBUG20403_nested_popup_on_shortcut_trigger(); void QTBUG_10735_crashWithDialog(); protected slots: void onActivated(QAction*); @@ -895,6 +896,22 @@ void tst_QMenu::QTBUG7411_submenus_activate() QTRY_VERIFY(sub1.isVisible()); } +void tst_QMenu::QTBUG20403_nested_popup_on_shortcut_trigger() +{ + QMenu menu("Test Menu"); + QMenu sub1("&sub1"); + QMenu subsub1("&subsub1"); + subsub1.addAction("foo"); + sub1.addMenu(&subsub1); + menu.addMenu(&sub1); + menu.show(); + QVERIFY(QTest::qWaitForWindowExposed(&menu)); + QTest::keyPress(&menu, Qt::Key_S); + QTest::qWait(100); // 20ms delay with previous behavior + QTRY_VERIFY(sub1.isVisible()); + QVERIFY(!subsub1.isVisible()); +} + class MyMenu : public QMenu { Q_OBJECT -- cgit v1.2.3