summaryrefslogtreecommitdiffstats
path: root/src/widgets
diff options
context:
space:
mode:
Diffstat (limited to 'src/widgets')
-rw-r--r--src/widgets/accessible/complexwidgets.cpp15
-rw-r--r--src/widgets/accessible/complexwidgets_p.h1
-rw-r--r--src/widgets/accessible/qaccessiblewidget.cpp12
3 files changed, 23 insertions, 5 deletions
diff --git a/src/widgets/accessible/complexwidgets.cpp b/src/widgets/accessible/complexwidgets.cpp
index 63c6fbb9bb..5c993262bf 100644
--- a/src/widgets/accessible/complexwidgets.cpp
+++ b/src/widgets/accessible/complexwidgets.cpp
@@ -108,7 +108,10 @@ public:
s.invalid = true;
return s;
}
- return parent()->state();
+
+ QAccessible::State s = parent()->state();
+ s.focused = (m_index == m_parent->currentIndex());
+ return s;
}
QRect rect() const override {
if (!isValid())
@@ -216,6 +219,16 @@ QTabBar *QAccessibleTabBar::tabBar() const
return qobject_cast<QTabBar*>(object());
}
+QAccessibleInterface* QAccessibleTabBar::focusChild() const
+{
+ for (int i = 0; i < childCount(); ++i) {
+ if (child(i)->state().focused)
+ return child(i);
+ }
+
+ return nullptr;
+}
+
QAccessibleInterface* QAccessibleTabBar::child(int index) const
{
if (QAccessible::Id id = m_childInterfaces.value(index))
diff --git a/src/widgets/accessible/complexwidgets_p.h b/src/widgets/accessible/complexwidgets_p.h
index e7a32c7264..335e257476 100644
--- a/src/widgets/accessible/complexwidgets_p.h
+++ b/src/widgets/accessible/complexwidgets_p.h
@@ -112,6 +112,7 @@ public:
explicit QAccessibleTabBar(QWidget *w);
~QAccessibleTabBar();
+ QAccessibleInterface *focusChild() const override;
int childCount() const override;
QString text(QAccessible::Text t) const override;
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 */