Index: ui/views/controls/textfield/native_textfield_views.cc |
diff --git a/ui/views/controls/textfield/native_textfield_views.cc b/ui/views/controls/textfield/native_textfield_views.cc |
index 749de28a8c69b629ccf854184d66e767855c1f0c..b9d18466c3c98acbaf276de2224d02feb31aea23 100644 |
--- a/ui/views/controls/textfield/native_textfield_views.cc |
+++ b/ui/views/controls/textfield/native_textfield_views.cc |
@@ -51,6 +51,11 @@ |
#include "base/win/win_util.h" |
#endif |
+#if defined(OS_WIN) |
+#include "ui/base/win/accessibility_misc_utils.h" |
+#include "ui/views/win/hwnd_util.h" |
+#endif |
+ |
namespace { |
void ConvertRectToScreen(const views::View* src, gfx::Rect* r) { |
@@ -696,6 +701,9 @@ void NativeTextfieldViews::HandleBlur() { |
is_cursor_visible_ = false; |
RepaintCursor(); |
} |
+#if defined(OS_WIN) |
+ DestroyCaret(); |
+#endif |
touch_selection_controller_.reset(); |
} |
@@ -1372,6 +1380,20 @@ void NativeTextfieldViews::OnCaretBoundsChanged() { |
// Notify selection controller |
if (touch_selection_controller_.get()) |
touch_selection_controller_->SelectionChanged(); |
+ |
+#if defined(OS_WIN) |
+ // Move an invisible system caret to this location for accessibility. |
+ if (GetRenderText()->focused() && |
+ !model_->HasSelection() && |
sky
2013/11/07 01:34:42
How come you don't do this when there is a selecti
dmazzoni
2013/11/07 20:07:14
You're right - I thought we didn't need to update
|
+ !is_drop_cursor_visible_) { |
+ gfx::Rect caret_rect(GetRenderText()->GetUpdatedCursorBounds()); |
+ caret_rect = ConvertRectToWidget(caret_rect); |
+ caret_rect += GetWidget()->GetClientAreaBoundsInScreen().OffsetFromOrigin(); |
+ base::win::SetInvisibleSystemCaretRect(HWNDForView(this), caret_rect); |
+ } else { |
+ DestroyCaret(); |
+ } |
+#endif |
} |
void NativeTextfieldViews::OnBeforeUserAction() { |