diff options
author | Frederik Gladhorn <frederik.gladhorn@digia.com> | 2014-07-07 10:45:41 +0200 |
---|---|---|
committer | Frederik Gladhorn <frederik.gladhorn@digia.com> | 2014-07-10 15:56:48 +0200 |
commit | 6ac1bf6434f2a508b895f6da7997bd90a5a8c08a (patch) | |
tree | 8717c7c6e89c8a3de08b68899ed7a84782c3fb5d /src | |
parent | a9853701193c81c65f80a606943864cd9b1f4431 (diff) |
Widget based accessibility glue code
With this patch the accessibility hierarchy inside webengine becomes
available when navigating from QWidget based web views.
Change-Id: Ib3625a6ec93b4d3f298fb845ab85209b348349ba
Reviewed-by: Zeno Albisser <zeno.albisser@digia.com>
Reviewed-by: Andras Becsi <andras.becsi@digia.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/webenginewidgets/api/qwebenginepage.h | 1 | ||||
-rw-r--r-- | src/webenginewidgets/api/qwebengineview.cpp | 23 | ||||
-rw-r--r-- | src/webenginewidgets/api/qwebengineview_p.h | 16 |
3 files changed, 40 insertions, 0 deletions
diff --git a/src/webenginewidgets/api/qwebenginepage.h b/src/webenginewidgets/api/qwebenginepage.h index eaeae9a78..6d8d2ddd8 100644 --- a/src/webenginewidgets/api/qwebenginepage.h +++ b/src/webenginewidgets/api/qwebenginepage.h @@ -215,6 +215,7 @@ private: friend class QWebEngineView; friend class QWebEngineViewPrivate; + friend class QWebEngineViewAccessible; }; diff --git a/src/webenginewidgets/api/qwebengineview.cpp b/src/webenginewidgets/api/qwebengineview.cpp index 47afca8ce..71d854ac2 100644 --- a/src/webenginewidgets/api/qwebengineview.cpp +++ b/src/webenginewidgets/api/qwebengineview.cpp @@ -89,11 +89,20 @@ void QWebEngineViewPrivate::bind(QWebEngineView *view, QWebEnginePage *page) } } + +static QAccessibleInterface *webAccessibleFactory(const QString &, QObject *object) +{ + if (QWebEngineView *v = qobject_cast<QWebEngineView*>(object)) + return new QWebEngineViewAccessible(v); + return Q_NULLPTR; +} + QWebEngineViewPrivate::QWebEngineViewPrivate() : QWidgetPrivate(QObjectPrivateVersion) , page(0) , m_pendingContextMenuEvent(false) { + QAccessible::installFactory(&webAccessibleFactory); } QWebEngineView::QWebEngineView(QWidget *parent) @@ -242,6 +251,20 @@ void QWebEngineView::contextMenuEvent(QContextMenuEvent *event) menu->popup(event->globalPos()); } +int QWebEngineViewAccessible::childCount() const +{ + if (view() && child(0)) + return 1; + return 0; +} + +QAccessibleInterface *QWebEngineViewAccessible::child(int index) const +{ + if (index == 0 && view() && view()->page()) + return view()->page()->d_func()->adapter->browserAccessible(); + return Q_NULLPTR; +} + QT_END_NAMESPACE #include "moc_qwebengineview.cpp" diff --git a/src/webenginewidgets/api/qwebengineview_p.h b/src/webenginewidgets/api/qwebengineview_p.h index 774386a21..9f0790117 100644 --- a/src/webenginewidgets/api/qwebengineview_p.h +++ b/src/webenginewidgets/api/qwebengineview_p.h @@ -45,6 +45,8 @@ #include <QtWidgets/private/qwidget_p.h> #include <QtWebEngineWidgets/qwebengineview.h> +#include <QtWidgets/qaccessiblewidget.h> + QT_BEGIN_NAMESPACE class QWebEngineView; @@ -62,6 +64,20 @@ public: bool m_pendingContextMenuEvent; }; +class QWebEngineViewAccessible : public QAccessibleWidget +{ +public: + QWebEngineViewAccessible(QWebEngineView *o) : QAccessibleWidget(o, QAccessible::Document) + {} + + int childCount() const Q_DECL_OVERRIDE; + QAccessibleInterface *child(int index) const Q_DECL_OVERRIDE; + +private: + QWebEngineView *view() const { return static_cast<QWebEngineView*>(object()); } +}; + + QT_END_NAMESPACE #endif // QWEBENGINEVIEW_P_H |