QMenu: Fix nested popup when keyboard shortcut is used

Task-number: QTBUG-20403

Change-Id: I2a5fe00dd16e9dc1ec0d742a8f48083fc2954996
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
Reviewed-by: Jarek Kobus <jaroslaw.kobus@digia.com>
bb10
Orgad Shaneh 2013-01-10 22:43:22 +02:00 committed by The Qt Project
parent 791eb399d2
commit b6963f109a
2 changed files with 18 additions and 1 deletions

View File

@ -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);

View File

@ -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