summaryrefslogtreecommitdiffstats
path: root/src/widgets/accessible/qaccessiblewidget.cpp
diff options
context:
space:
mode:
authorPeter Varga <pvarga@inf.u-szeged.hu>2019-11-18 15:00:58 +0100
committerPeter Varga <pvarga@inf.u-szeged.hu>2019-12-19 08:39:10 +0100
commita132e0254005b2954b11705b32650c9018049187 (patch)
treed9fac428bac869dfcd7901199d8bac24249300f3 /src/widgets/accessible/qaccessiblewidget.cpp
parentcaa82e1fc24907af0a81e31cf9b77ae8e82e44cc (diff)
Fix QAccessibleWidget::focusChild() to return focused descendant
This method should not ignore accessibility objects without corresponding widget. The widget may have parts with their own QAccessibilityInterface and these can be also focused. VoiceOver ignores them if they are not returned by focusChild(). QAccessibleTabBar::focusChild() has been implemented to demonstrate the concept and make tab titles of QTabBar readable by VoiceOver. Task-number: QTBUG-78284 Change-Id: Id7c62d86154bbd5d47d6bbee8cb7d05268c2e151 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'src/widgets/accessible/qaccessiblewidget.cpp')
-rw-r--r--src/widgets/accessible/qaccessiblewidget.cpp12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/widgets/accessible/qaccessiblewidget.cpp b/src/widgets/accessible/qaccessiblewidget.cpp
index 27e6b09dc7..3ab66c4ce4 100644
--- a/src/widgets/accessible/qaccessiblewidget.cpp
+++ b/src/widgets/accessible/qaccessiblewidget.cpp
@@ -374,11 +374,15 @@ QAccessibleInterface *QAccessibleWidget::focusChild() const
QWidget *fw = widget()->focusWidget();
if (!fw)
- return 0;
+ return nullptr;
- if (isAncestor(widget(), fw) || fw == widget())
- return QAccessible::queryAccessibleInterface(fw);
- return 0;
+ if (isAncestor(widget(), fw)) {
+ QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(fw);
+ if (!iface || iface == this || !iface->focusChild())
+ return iface;
+ return iface->focusChild();
+ }
+ return nullptr;
}
/*! \reimp */