diff options
| -rw-r--r-- | src/plugins/accessible/widgets/qaccessiblemenu.cpp | 13 | ||||
| -rw-r--r-- | tests/auto/other/qaccessibility/tst_qaccessibility.cpp | 11 |
2 files changed, 19 insertions, 5 deletions
diff --git a/src/plugins/accessible/widgets/qaccessiblemenu.cpp b/src/plugins/accessible/widgets/qaccessiblemenu.cpp index fd2619f5458..e467ef50bdd 100644 --- a/src/plugins/accessible/widgets/qaccessiblemenu.cpp +++ b/src/plugins/accessible/widgets/qaccessiblemenu.cpp @@ -104,9 +104,16 @@ QAccessibleInterface *QAccessibleMenu::child(int index) const QAccessibleInterface *QAccessibleMenu::parent() const { - QWidget *parent = menu()->parentWidget(); - if (qobject_cast<QMenu*>(parent) || qobject_cast<QMenuBar*>(parent)) { - return new QAccessibleMenuItem(parent, menu()->menuAction()); + if (QAction *menuAction = menu()->menuAction()) { + QList<QWidget *> parentCandidates; + parentCandidates << menu()->parentWidget(); + parentCandidates << menuAction->associatedWidgets(); + foreach (QWidget *w, parentCandidates) { + if (qobject_cast<QMenu*>(w) || qobject_cast<QMenuBar*>(w)) { + if (w->actions().indexOf(menuAction) != -1) + return new QAccessibleMenuItem(w, menuAction); + } + } } return QAccessibleWidget::parent(); } diff --git a/tests/auto/other/qaccessibility/tst_qaccessibility.cpp b/tests/auto/other/qaccessibility/tst_qaccessibility.cpp index ea322b20a10..68fde2fd2ed 100644 --- a/tests/auto/other/qaccessibility/tst_qaccessibility.cpp +++ b/tests/auto/other/qaccessibility/tst_qaccessibility.cpp @@ -1265,14 +1265,21 @@ void tst_QAccessibility::menuTest() mw.menuBar()->addAction("Action!"); + QMenu *childOfMainWindow = new QMenu(QStringLiteral("&Tools"), &mw); + childOfMainWindow->addAction("&Options"); + mw.menuBar()->addMenu(childOfMainWindow); + mw.show(); // triggers layout QTest::qWait(100); - QAccessibleInterface *interface = QAccessible::queryAccessibleInterface(mw.menuBar()); + QAccessibleInterface *interface = QAccessible::queryAccessibleInterface(&mw); QCOMPARE(verifyHierarchy(interface), 0); + delete interface; + + interface = QAccessible::queryAccessibleInterface(mw.menuBar()); QVERIFY(interface); - QCOMPARE(interface->childCount(), 5); + QCOMPARE(interface->childCount(), 6); QCOMPARE(interface->role(), QAccessible::MenuBar); QAccessibleInterface *iFile = interface->child(0); |
