summaryrefslogtreecommitdiffstats
path: root/src/webengine
diff options
context:
space:
mode:
Diffstat (limited to 'src/webengine')
-rw-r--r--src/webengine/api/qquickwebengineview.cpp15
-rw-r--r--src/webengine/api/qquickwebengineview_p_p.h1
-rw-r--r--src/webengine/render_widget_host_view_qt_delegate_quick.cpp31
-rw-r--r--src/webengine/render_widget_host_view_qt_delegate_quick.h3
4 files changed, 42 insertions, 8 deletions
diff --git a/src/webengine/api/qquickwebengineview.cpp b/src/webengine/api/qquickwebengineview.cpp
index 8f5313a9d..bcbf95569 100644
--- a/src/webengine/api/qquickwebengineview.cpp
+++ b/src/webengine/api/qquickwebengineview.cpp
@@ -750,6 +750,17 @@ QQuickWebEngineViewAccessible::QQuickWebEngineViewAccessible(QQuickWebEngineView
: QAccessibleObject(o)
{}
+bool QQuickWebEngineViewAccessible::isValid() const
+{
+ if (!QAccessibleObject::isValid())
+ return false;
+
+ if (!engineView() || !engineView()->d_func())
+ return false;
+
+ return true;
+}
+
QAccessibleInterface *QQuickWebEngineViewAccessible::parent() const
{
QQuickItem *parent = engineView()->parentItem();
@@ -773,9 +784,9 @@ int QQuickWebEngineViewAccessible::childCount() const
QAccessibleInterface *QQuickWebEngineViewAccessible::child(int index) const
{
- if (index == 0 && engineView())
+ if (index == 0 && isValid())
return engineView()->d_func()->adapter->browserAccessible();
- return 0;
+ return nullptr;
}
int QQuickWebEngineViewAccessible::indexOfChild(const QAccessibleInterface *c) const
diff --git a/src/webengine/api/qquickwebengineview_p_p.h b/src/webengine/api/qquickwebengineview_p_p.h
index 1f024167f..6f9b552ec 100644
--- a/src/webengine/api/qquickwebengineview_p_p.h
+++ b/src/webengine/api/qquickwebengineview_p_p.h
@@ -235,6 +235,7 @@ class QQuickWebEngineViewAccessible : public QAccessibleObject
{
public:
QQuickWebEngineViewAccessible(QQuickWebEngineView *o);
+ bool isValid() const override;
QAccessibleInterface *parent() const override;
QAccessibleInterface *focusChild() const override;
int childCount() const override;
diff --git a/src/webengine/render_widget_host_view_qt_delegate_quick.cpp b/src/webengine/render_widget_host_view_qt_delegate_quick.cpp
index ede85ca69..d5aae271f 100644
--- a/src/webengine/render_widget_host_view_qt_delegate_quick.cpp
+++ b/src/webengine/render_widget_host_view_qt_delegate_quick.cpp
@@ -226,6 +226,13 @@ bool RenderWidgetHostViewQtDelegateQuick::event(QEvent *event)
void RenderWidgetHostViewQtDelegateQuick::focusInEvent(QFocusEvent *event)
{
+#if QT_CONFIG(accessibility)
+ if (QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(this)->focusChild()) {
+ QAccessibleEvent focusEvent(iface, QAccessible::Focus);
+ QAccessible::updateAccessibility(&focusEvent);
+ }
+#endif // QT_CONFIG(accessibility)
+
m_client->forwardEvent(event);
}
@@ -380,9 +387,17 @@ RenderWidgetHostViewQtDelegateQuickAccessible::RenderWidgetHostViewQtDelegateQui
{
}
+bool RenderWidgetHostViewQtDelegateQuickAccessible::isValid() const
+{
+ if (!viewAccessible() || !viewAccessible()->isValid())
+ return false;
+
+ return QAccessibleObject::isValid();
+}
+
QAccessibleInterface *RenderWidgetHostViewQtDelegateQuickAccessible::parent() const
{
- return QAccessible::queryAccessibleInterface(m_view)->parent();
+ return viewAccessible()->parent();
}
QString RenderWidgetHostViewQtDelegateQuickAccessible::text(QAccessible::Text) const
@@ -397,29 +412,33 @@ QAccessible::Role RenderWidgetHostViewQtDelegateQuickAccessible::role() const
QAccessible::State RenderWidgetHostViewQtDelegateQuickAccessible::state() const
{
- return QAccessible::queryAccessibleInterface(m_view)->state();
+ return viewAccessible()->state();
}
QAccessibleInterface *RenderWidgetHostViewQtDelegateQuickAccessible::focusChild() const
{
- return QAccessible::queryAccessibleInterface(m_view)->focusChild();
+ return viewAccessible()->focusChild();
}
int RenderWidgetHostViewQtDelegateQuickAccessible::childCount() const
{
- return QAccessible::queryAccessibleInterface(m_view)->childCount();
+ return viewAccessible()->childCount();
}
QAccessibleInterface *RenderWidgetHostViewQtDelegateQuickAccessible::child(int index) const
{
- return QAccessible::queryAccessibleInterface(m_view)->child(index);
+ return viewAccessible()->child(index);
}
int RenderWidgetHostViewQtDelegateQuickAccessible::indexOfChild(const QAccessibleInterface *c) const
{
- return QAccessible::queryAccessibleInterface(m_view)->indexOfChild(c);
+ return viewAccessible()->indexOfChild(c);
}
+QQuickWebEngineViewAccessible *RenderWidgetHostViewQtDelegateQuickAccessible::viewAccessible() const
+{
+ return static_cast<QQuickWebEngineViewAccessible *>(QAccessible::queryAccessibleInterface(m_view));
+}
#endif // QT_CONFIG(accessibility)
} // namespace QtWebEngineCore
diff --git a/src/webengine/render_widget_host_view_qt_delegate_quick.h b/src/webengine/render_widget_host_view_qt_delegate_quick.h
index 6874aac2b..f70de50d7 100644
--- a/src/webengine/render_widget_host_view_qt_delegate_quick.h
+++ b/src/webengine/render_widget_host_view_qt_delegate_quick.h
@@ -47,6 +47,7 @@
QT_BEGIN_NAMESPACE
class QQuickWebEngineView;
+class QQuickWebEngineViewAccessible;
class QQuickWebEngineViewPrivate;
QT_END_NAMESPACE
@@ -122,6 +123,7 @@ class RenderWidgetHostViewQtDelegateQuickAccessible : public QAccessibleObject
public:
RenderWidgetHostViewQtDelegateQuickAccessible(RenderWidgetHostViewQtDelegateQuick *o, QQuickWebEngineView *view);
+ bool isValid() const override;
QAccessibleInterface *parent() const override;
QString text(QAccessible::Text t) const override;
QAccessible::Role role() const override;
@@ -133,6 +135,7 @@ public:
int indexOfChild(const QAccessibleInterface *) const override;
private:
+ QQuickWebEngineViewAccessible *viewAccessible() const;
QQuickWebEngineView *m_view;
};
#endif // QT_CONFIG(accessibility)