diff options
Diffstat (limited to 'src/widgets/accessible/simplewidgets.cpp')
-rw-r--r-- | src/widgets/accessible/simplewidgets.cpp | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/src/widgets/accessible/simplewidgets.cpp b/src/widgets/accessible/simplewidgets.cpp index 39da1538376..190c7b624f6 100644 --- a/src/widgets/accessible/simplewidgets.cpp +++ b/src/widgets/accessible/simplewidgets.cpp @@ -289,19 +289,32 @@ QToolButton *QAccessibleToolButton::toolButton() const bool QAccessibleToolButton::isSplitButton() const { #if QT_CONFIG(menu) - return toolButton()->menu() && toolButton()->popupMode() == QToolButton::MenuButtonPopup; + return menu() && toolButton()->popupMode() == QToolButton::MenuButtonPopup; #else return false; #endif } +#if QT_CONFIG(menu) +QMenu *QAccessibleToolButton::menu() const +{ + if (QMenu *menu = toolButton()->menu()) + return menu; + + if (QAction *defaultAction = toolButton()->defaultAction()) + return defaultAction->menu(); + + return nullptr; +} +#endif + QAccessible::State QAccessibleToolButton::state() const { QAccessible::State st = QAccessibleButton::state(); if (toolButton()->autoRaise()) st.hotTracked = true; #if QT_CONFIG(menu) - if (toolButton()->menu()) + if (menu()) st.hasPopup = true; #endif return st; @@ -315,9 +328,8 @@ int QAccessibleToolButton::childCount() const QAccessible::Role QAccessibleToolButton::role() const { #if QT_CONFIG(menu) - QAbstractButton *ab = button(); - QToolButton *tb = qobject_cast<QToolButton*>(ab); - if (!tb->menu()) + QToolButton *tb = toolButton(); + if (!menu()) return tb->isCheckable() ? QAccessible::CheckBox : QAccessible::PushButton; else if (tb->popupMode() == QToolButton::DelayedPopup) return QAccessible::ButtonDropDown; @@ -329,10 +341,8 @@ QAccessible::Role QAccessibleToolButton::role() const QAccessibleInterface *QAccessibleToolButton::child(int index) const { #if QT_CONFIG(menu) - if (index == 0 && toolButton()->menu()) - { - return QAccessible::queryAccessibleInterface(toolButton()->menu()); - } + if (index == 0 && menu()) + return QAccessible::queryAccessibleInterface(menu()); #else Q_UNUSED(index); #endif |