Index: content/browser/renderer_host/render_widget_host_view_aura.cc |
diff --git a/content/browser/renderer_host/render_widget_host_view_aura.cc b/content/browser/renderer_host/render_widget_host_view_aura.cc |
index 61b60b05345b9f7bc3b334c2517a143d09559918..8696db3db8ae30348842429e2c8b01c331c7906b 100644 |
--- a/content/browser/renderer_host/render_widget_host_view_aura.cc |
+++ b/content/browser/renderer_host/render_widget_host_view_aura.cc |
@@ -103,6 +103,7 @@ |
#include "content/browser/accessibility/browser_accessibility_manager_win.h" |
#include "content/browser/accessibility/browser_accessibility_win.h" |
#include "content/browser/renderer_host/legacy_render_widget_host_win.h" |
+#include "ui/accessibility/platform/ax_fake_caret_win.h" |
#include "ui/base/win/hidden_window.h" |
#include "ui/base/win/osk_display_manager.h" |
#include "ui/base/win/osk_display_observer.h" |
@@ -885,7 +886,9 @@ void RenderWidgetHostViewAura::UpdateMouseLockRegion() { |
} |
void RenderWidgetHostViewAura::OnLegacyWindowDestroyed() { |
- legacy_render_widget_host_HWND_ = NULL; |
+ ui::AXFakeCaretWin::Get()->SetTargetForNativeAccessibilityEvent( |
dmazzoni
2017/04/21 21:06:30
Hmmm, I wonder if it'd make more sense for each
HW
|
+ gfx::kNullAcceleratedWidget); |
+ legacy_render_widget_host_HWND_ = nullptr; |
legacy_window_destroyed_ = true; |
} |
#endif |
@@ -1556,6 +1559,8 @@ void RenderWidgetHostViewAura::OnWindowDestroying(aura::Window* window) { |
// The Destroy call above will delete the LegacyRenderWidgetHostHWND |
// instance. |
legacy_render_widget_host_HWND_ = NULL; |
+ ui::AXFakeCaretWin::Get()->SetTargetForNativeAccessibilityEvent( |
+ gfx::kNullAcceleratedWidget); |
} |
#endif |
@@ -2155,6 +2160,8 @@ void RenderWidgetHostViewAura::UpdateLegacyWin() { |
// here. |
if (!host_->is_hidden()) |
legacy_render_widget_host_HWND_->Show(); |
+ ui::AXFakeCaretWin::Get()->SetTargetForNativeAccessibilityEvent( |
+ legacy_render_widget_host_HWND_->hwnd()); |
} |
} |
#endif |
@@ -2333,7 +2340,6 @@ void RenderWidgetHostViewAura::OnSelectionBoundsChanged( |
void RenderWidgetHostViewAura::OnTextSelectionChanged( |
TextInputManager* text_input_manager, |
RenderWidgetHostViewBase* updated_view) { |
-#if defined(USE_X11) && !defined(OS_CHROMEOS) |
if (!GetTextInputManager()) |
return; |
@@ -2350,6 +2356,7 @@ void RenderWidgetHostViewAura::OnTextSelectionChanged( |
if (!focused_view) |
return; |
+#if defined(USE_X11) && !defined(OS_CHROMEOS) |
const TextInputManager::TextSelection* selection = |
GetTextInputManager()->GetTextSelection(focused_view); |
if (selection->selected_text().length()) { |
@@ -2357,7 +2364,24 @@ void RenderWidgetHostViewAura::OnTextSelectionChanged( |
ui::ScopedClipboardWriter clipboard_writer(ui::CLIPBOARD_TYPE_SELECTION); |
clipboard_writer.WriteText(selection->selected_text()); |
} |
-#endif // defined(USE_X11) && !defined(OS_CHROMEOS) |
+ |
+// #endif defined(USE_X11) && !defined(OS_CHROMEOS) |
+#elif defined(OS_WIN) |
+ // Some assistive software need to track the location of the caret. |
+ if (!GetRenderWidgetHost()) |
+ return; |
+ |
+ // Not using |GetCaretBounds| because it includes the whole of the selection, |
+ // not just the focus. |
+ const TextInputManager::SelectionRegion* region = |
+ GetTextInputManager()->GetSelectionRegion(focused_view); |
+ if (!region) |
+ return; |
+ gfx::Rect caret_rect = ConvertRectToScreen(gfx::Rect( |
+ region->focus.edge_top_rounded().x(), |
+ region->focus.edge_top_rounded().y(), 1, region->focus.GetHeight())); |
+ ui::AXFakeCaretWin::Get()->MoveCaretTo(caret_rect); |
+#endif // defined(OS_WIN) |
} |
void RenderWidgetHostViewAura::SetPopupChild( |