diff options
Diffstat (limited to 'src/webengine')
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) |