diff options
author | Frederik Gladhorn <frederik.gladhorn@digia.com> | 2014-07-07 10:28:48 +0200 |
---|---|---|
committer | Frederik Gladhorn <frederik.gladhorn@digia.com> | 2014-07-09 15:09:44 +0200 |
commit | a9853701193c81c65f80a606943864cd9b1f4431 (patch) | |
tree | 401b380f8636830f8dedbcf40f23a156285fa156 /src/core/render_widget_host_view_qt.cpp | |
parent | bef6cc644f176a69a85c68126bd0d7e50ab5757e (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.cpp | 44 |
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> ¬ifications) { - // 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; +} |