QShortcut: Fall back to cross platform code in absence of QPA menu
On macOS, absence of a QPA menu means that we should be using our own internal logic since there's no entity on the QCocoaMenuDelegate to take care of the shortcuts. Change-Id: I35ed8f0b55445f61d0528709d4debb636a502002 Task-number: QTBUG-61039 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io> Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
This commit is contained in:
parent
49da5ce100
commit
198225983d
@ -289,8 +289,10 @@ static bool correctActionContext(Qt::ShortcutContext context, QAction *a, QWidge
|
||||
// not the QMenu.) Since we can also reach this code by climbing the menu
|
||||
// hierarchy (see below), or when the shortcut is not a key-equivalent, we
|
||||
// need to check whether the QPA menu is actually disabled.
|
||||
// When there is no QPA menu, there will be no QCocoaMenuDelegate checking
|
||||
// for the actual shortcuts. We can then fallback to our own logic.
|
||||
QPlatformMenu *pm = menu->platformMenu();
|
||||
if (!pm || !pm->isEnabled())
|
||||
if (pm && !pm->isEnabled())
|
||||
continue;
|
||||
#endif
|
||||
QAction *a = menu->menuAction();
|
||||
|
@ -133,6 +133,7 @@ private slots:
|
||||
void menuSize_Scrolling_data();
|
||||
void menuSize_Scrolling();
|
||||
void tearOffMenuNotDisplayed();
|
||||
void QTBUG_61039_menu_shortcuts();
|
||||
|
||||
protected slots:
|
||||
void onActivated(QAction*);
|
||||
@ -1609,5 +1610,32 @@ void tst_QMenu::tearOffMenuNotDisplayed()
|
||||
QVERIFY(!torn->isVisible());
|
||||
}
|
||||
|
||||
void tst_QMenu::QTBUG_61039_menu_shortcuts()
|
||||
{
|
||||
QAction *actionKamen = new QAction("Action Kamen");
|
||||
actionKamen->setShortcut(QKeySequence(QLatin1String("K")));
|
||||
|
||||
QAction *actionJoe = new QAction("Action Joe");
|
||||
actionJoe->setShortcut(QKeySequence(QLatin1String("Ctrl+J")));
|
||||
|
||||
QMenu menu;
|
||||
menu.addAction(actionKamen);
|
||||
menu.addAction(actionJoe);
|
||||
QVERIFY(!menu.platformMenu());
|
||||
|
||||
QWidget widget;
|
||||
widget.addAction(menu.menuAction());
|
||||
widget.show();
|
||||
QVERIFY(QTest::qWaitForWindowActive(&widget));
|
||||
|
||||
QSignalSpy actionKamenSpy(actionKamen, &QAction::triggered);
|
||||
QTest::keyClick(&widget, Qt::Key_K);
|
||||
QTRY_COMPARE(actionKamenSpy.count(), 1);
|
||||
|
||||
QSignalSpy actionJoeSpy(actionJoe, &QAction::triggered);
|
||||
QTest::keyClick(&widget, Qt::Key_J, Qt::ControlModifier);
|
||||
QTRY_COMPARE(actionJoeSpy.count(), 1);
|
||||
}
|
||||
|
||||
QTEST_MAIN(tst_QMenu)
|
||||
#include "tst_qmenu.moc"
|
||||
|
Loading…
Reference in New Issue
Block a user