summaryrefslogtreecommitdiffstats
path: root/src/core/render_widget_host_view_qt.cpp
diff options
context:
space:
mode:
authorFrederik Gladhorn <frederik.gladhorn@digia.com>2014-07-07 10:28:48 +0200
committerFrederik Gladhorn <frederik.gladhorn@digia.com>2014-07-09 15:09:44 +0200
commita9853701193c81c65f80a606943864cd9b1f4431 (patch)
tree401b380f8636830f8dedbcf40f23a156285fa156 /src/core/render_widget_host_view_qt.cpp
parentbef6cc644f176a69a85c68126bd0d7e50ab5757e (diff)
Add core accessibility
This commit adds the basics to bridge the blink accessibility classes to QAccessibleInterfaces. Note that it needs two follow up commits to implement the bridging from the QWidget/Qt Quick worlds. [ChangeLog][Accessibility] QtWebEngine now has accessibility support, enabling assistive technology such as screen readers to work with it. Change-Id: Ied1d97e61a024115ac7a9245331211f6d9fac1b4 Reviewed-by: Zeno Albisser <zeno.albisser@digia.com> Reviewed-by: Andras Becsi <andras.becsi@digia.com>
Diffstat (limited to 'src/core/render_widget_host_view_qt.cpp')
-rw-r--r--src/core/render_widget_host_view_qt.cpp44
1 files changed, 37 insertions, 7 deletions
diff --git a/src/core/render_widget_host_view_qt.cpp b/src/core/render_widget_host_view_qt.cpp
index 386783f88..21de24d45 100644
--- a/src/core/render_widget_host_view_qt.cpp
+++ b/src/core/render_widget_host_view_qt.cpp
@@ -41,20 +41,25 @@
#include "render_widget_host_view_qt.h"
+#include "browser_accessibility_manager_qt.h"
+#include "browser_accessibility_qt.h"
#include "chromium_overrides.h"
#include "delegated_frame_node.h"
#include "render_widget_host_view_qt_delegate.h"
#include "type_conversion.h"
+#include "web_contents_adapter.h"
#include "web_contents_adapter_client.h"
#include "web_event_factory.h"
#include "base/command_line.h"
#include "cc/output/compositor_frame_ack.h"
+#include "content/browser/accessibility/browser_accessibility_state_impl.h"
#include "content/browser/renderer_host/render_view_host_impl.h"
#include "content/browser/renderer_host/ui_events_helper.h"
-#include "content/public/common/content_switches.h"
#include "content/common/gpu/gpu_messages.h"
#include "content/common/view_messages.h"
+#include "content/public/common/content_switches.h"
+#include "content/public/browser/browser_accessibility_state.h"
#include "third_party/skia/include/core/SkColor.h"
#include "third_party/WebKit/public/platform/WebColor.h"
#include "third_party/WebKit/public/platform/WebCursorInfo.h"
@@ -76,6 +81,7 @@
#include <QVariant>
#include <QWheelEvent>
#include <QWindow>
+#include <QtGui/qaccessible.h>
static inline ui::EventType toUIEventType(Qt::TouchPointState state)
{
@@ -258,9 +264,20 @@ gfx::NativeViewId RenderWidgetHostViewQt::GetNativeViewId() const
gfx::NativeViewAccessible RenderWidgetHostViewQt::GetNativeViewAccessible()
{
- // We are not using accessibility features at this point.
- QT_NOT_USED
- return NULL;
+ CreateBrowserAccessibilityManagerIfNeeded();
+ return GetBrowserAccessibilityManager()->GetRoot();
+}
+
+void RenderWidgetHostViewQt::CreateBrowserAccessibilityManagerIfNeeded()
+{
+ if (GetBrowserAccessibilityManager())
+ return;
+
+ m_accessibilityDelegate = scoped_ptr<BrowserAccessibilityDelegateQt>(new BrowserAccessibilityDelegateQt(this));
+ SetBrowserAccessibilityManager(new content::BrowserAccessibilityManagerQt(
+ m_adapterClient->accessibilityParentObject(),
+ content::BrowserAccessibilityManagerQt::GetEmptyDocument(),
+ m_accessibilityDelegate.get()));
}
// Set focus to the associated View component.
@@ -624,10 +641,10 @@ void RenderWidgetHostViewQt::SetHasHorizontalScrollbar(bool) { }
void RenderWidgetHostViewQt::SetScrollOffsetPinning(bool, bool) { }
-void RenderWidgetHostViewQt::OnAccessibilityEvents(const std::vector<AccessibilityHostMsg_EventParams>&)
+void RenderWidgetHostViewQt::OnAccessibilityEvents(const std::vector<AccessibilityHostMsg_EventParams> &notifications)
{
- // We are not using accessibility features at this point.
- QT_NOT_USED
+ CreateBrowserAccessibilityManagerIfNeeded();
+ GetBrowserAccessibilityManager()->OnAccessibilityEvents(notifications);
}
void RenderWidgetHostViewQt::SelectionChanged(const base::string16 &text, size_t offset, const gfx::Range &range)
@@ -1022,3 +1039,16 @@ void RenderWidgetHostViewQt::handleFocusEvent(QFocusEvent *ev)
ev->accept();
}
}
+
+QAccessibleInterface *RenderWidgetHostViewQt::GetQtAccessible()
+{
+ // Assume we have a screen reader doing stuff
+ CreateBrowserAccessibilityManagerIfNeeded();
+ content::BrowserAccessibilityState::GetInstance()->OnScreenReaderDetected();
+ content::BrowserAccessibilityStateImpl::GetInstance()->SetAccessibilityMode(
+ AccessibilityModeComplete);
+
+ content::BrowserAccessibility *acc = GetBrowserAccessibilityManager()->GetRoot();
+ content::BrowserAccessibilityQt *accQt = static_cast<content::BrowserAccessibilityQt*>(acc);
+ return accQt;
+}