diff options
author | Yuya Nishihara <yuya.nishihara@qt.io> | 2020-08-28 18:55:56 +0900 |
---|---|---|
committer | Yuya Nishihara <yuya.nishihara@qt.io> | 2020-09-02 10:45:17 +0900 |
commit | ccc4f40946ccfc68d5580c9abfd9e2fb4565a608 (patch) | |
tree | fc339b73155a9ce7ee9eb11c6c53e1a01571e94a /tests/auto | |
parent | 6a2f7994e8255107954c11d48595dd171d0102b8 (diff) |
Menu: Do not unblock parent shortcuts while menu popup is open
Otherwise &mnemonic shortcut in the active menu would be stolen by one
of the ambiguous items shadowed by the active menu.
Fixes: QTBUG-86276
Pick-to: 5.15
Change-Id: I5a1caea60da937fef409720f1ca11b99045ed4b8
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'tests/auto')
-rw-r--r-- | tests/auto/qquickmenubar/data/menubar.qml | 7 | ||||
-rw-r--r-- | tests/auto/qquickmenubar/tst_qquickmenubar.cpp | 30 |
2 files changed, 37 insertions, 0 deletions
diff --git a/tests/auto/qquickmenubar/data/menubar.qml b/tests/auto/qquickmenubar/data/menubar.qml index fcfe6c52..1436e66d 100644 --- a/tests/auto/qquickmenubar/data/menubar.qml +++ b/tests/auto/qquickmenubar/data/menubar.qml @@ -52,6 +52,8 @@ import QtQuick import QtQuick.Controls ApplicationWindow { + readonly property Button oopsButton: oopsButton + width: 400 height: 400 visible: true @@ -103,4 +105,9 @@ ApplicationWindow { } } } + + Button { + id: oopsButton + text: "&Oops" + } } diff --git a/tests/auto/qquickmenubar/tst_qquickmenubar.cpp b/tests/auto/qquickmenubar/tst_qquickmenubar.cpp index f18eabc7..5c75c838 100644 --- a/tests/auto/qquickmenubar/tst_qquickmenubar.cpp +++ b/tests/auto/qquickmenubar/tst_qquickmenubar.cpp @@ -41,6 +41,7 @@ #include "../shared/qtest_quickcontrols.h" #include <QtQuickTemplates2/private/qquickapplicationwindow_p.h> +#include <QtQuickTemplates2/private/qquickbutton_p.h> #include <QtQuickTemplates2/private/qquickmenu_p.h> #include <QtQuickTemplates2/private/qquickmenubar_p.h> #include <QtQuickTemplates2/private/qquickmenubaritem_p.h> @@ -435,6 +436,11 @@ void tst_qquickmenubar::mnemonics() QQuickMenuBarItem *helpMenuBarItem = qobject_cast<QQuickMenuBarItem *>(helpMenuBarMenu->parentItem()); QVERIFY(fileMenuBarItem && editMenuBarItem && viewMenuBarItem && helpMenuBarItem); + QQuickButton *oopsButton = window->property("oopsButton").value<QQuickButton *>(); + QVERIFY(oopsButton); + QSignalSpy oopsButtonSpy(oopsButton, &QQuickButton::clicked); + QVERIFY(oopsButtonSpy.isValid()); + // trigger a menubar item to open a menu keySim.press(Qt::Key_Alt); keySim.click(Qt::Key_E); // "&Edit" @@ -514,6 +520,30 @@ void tst_qquickmenubar::mnemonics() QTRY_VERIFY(!viewMenuBarMenu->isVisible()); QTRY_VERIFY(!alignmentSubMenu->isVisible()); QTRY_VERIFY(!verticalSubMenu->isVisible()); + + // trigger a menubar item to open a menu, leave Alt pressed + keySim.press(Qt::Key_Alt); + keySim.click(Qt::Key_F); // "&File" + QVERIFY(fileMenuBarItem->isHighlighted()); + QVERIFY(fileMenuBarMenu->isVisible()); + QTRY_VERIFY(fileMenuBarMenu->isOpened()); + QVERIFY(fileMenuBarMenu->hasActiveFocus()); + + // trigger a menu item to close the menu, which shouldn't trigger a button + // action behind the menu (QTBUG-86276) + QCOMPARE(oopsButtonSpy.count(), 0); + keySim.click(Qt::Key_O); // "&Open..." + keySim.release(Qt::Key_Alt); + QVERIFY(!fileMenuBarItem->isHighlighted()); + QVERIFY(!fileMenuBarMenu->isOpened()); + QTRY_VERIFY(!fileMenuBarMenu->isVisible()); + QCOMPARE(oopsButtonSpy.count(), 0); + + // trigger a button action while menu is closed + keySim.press(Qt::Key_Alt); + keySim.click(Qt::Key_O); // "&Oops" + keySim.release(Qt::Key_Alt); + QCOMPARE(oopsButtonSpy.count(), 1); } void tst_qquickmenubar::addRemove() |