summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorFrederik Gladhorn <frederik.gladhorn@digia.com>2014-07-07 10:45:41 +0200
committerFrederik Gladhorn <frederik.gladhorn@digia.com>2014-07-10 15:56:48 +0200
commit6ac1bf6434f2a508b895f6da7997bd90a5a8c08a (patch)
tree8717c7c6e89c8a3de08b68899ed7a84782c3fb5d /src
parenta9853701193c81c65f80a606943864cd9b1f4431 (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.h1
-rw-r--r--src/webenginewidgets/api/qwebengineview.cpp23
-rw-r--r--src/webenginewidgets/api/qwebengineview_p.h16
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