summaryrefslogtreecommitdiffstats
path: root/src/widgets/accessible
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@qt.io>2020-01-04 15:32:34 +0100
committerLiang Qi <liang.qi@qt.io>2020-01-04 15:32:34 +0100
commita503bf54705d89204007e8f887b668fe5ef519fc (patch)
treeb2d1a452da39450eac78a1aeb1df116a73f64b23 /src/widgets/accessible
parente65c43fd0ffa57248e7d750570b7deae171a82f5 (diff)
parent1f87fb359fdff14e42662384a9c8a0bcb3837671 (diff)
Merge remote-tracking branch 'origin/5.15' into dev
Conflicts: src/corelib/tools/qvector.h Make QVector(DataPointer dd) public to be able to properly merge 5b4b437b30b320e2cd7c9a566999a39772e5d431 from 5.15 into dev. src/widgets/kernel/qapplication.cpp tests/auto/tools/moc/allmocs_baseline_in.json Done-With: Christian Ehrlicher <ch.ehrlicher@gmx.de> Change-Id: I929ba7c036d570382d0454c2c75f6f0d96ddbc01
Diffstat (limited to 'src/widgets/accessible')
-rw-r--r--src/widgets/accessible/complexwidgets.cpp15
-rw-r--r--src/widgets/accessible/complexwidgets_p.h1
-rw-r--r--src/widgets/accessible/qaccessiblewidget.cpp8
3 files changed, 21 insertions, 3 deletions
diff --git a/src/widgets/accessible/complexwidgets.cpp b/src/widgets/accessible/complexwidgets.cpp
index 4d9a629ab6..ce2ceac938 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 64083d09b9..1a7372728d 100644
--- a/src/widgets/accessible/qaccessiblewidget.cpp
+++ b/src/widgets/accessible/qaccessiblewidget.cpp
@@ -375,8 +375,12 @@ QAccessibleInterface *QAccessibleWidget::focusChild() const
if (!fw)
return nullptr;
- if (isAncestor(widget(), fw) || fw == widget())
- return QAccessible::queryAccessibleInterface(fw);
+ if (isAncestor(widget(), fw)) {
+ QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(fw);
+ if (!iface || iface == this || !iface->focusChild())
+ return iface;
+ return iface->focusChild();
+ }
return nullptr;
}