Chromium Code Reviews| Index: content/renderer/render_widget.cc |
| diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc |
| index 198d7d4cdfeef0e149fe91ac495c13cadc3f0f95..7325e41f8d93e136f13d005d3c3f9eded1621f56 100644 |
| --- a/content/renderer/render_widget.cc |
| +++ b/content/renderer/render_widget.cc |
| @@ -1499,6 +1499,7 @@ void RenderWidget::DoDeferredUpdate() { |
| // enable GPU acceleration so they need to be called before any painting |
| // is done. |
| UpdateTextInputType(); |
| + UpdateSelectionRootBounds(); |
| UpdateSelectionBounds(); |
| // Suppress painting if nothing is dirty. This has to be done after updating |
| @@ -1885,6 +1886,7 @@ void RenderWidget::willBeginCompositorFrame() { |
| #if defined(OS_ANDROID) |
| UpdateTextInputState(false, true); |
| #endif |
| + UpdateSelectionRootBounds(); |
| UpdateSelectionBounds(); |
| } |
| @@ -2387,6 +2389,7 @@ void RenderWidget::FinishHandlingImeEvent() { |
| // While handling an ime event, text input state and selection bounds updates |
| // are ignored. These must explicitly be updated once finished handling the |
| // ime event. |
| + UpdateSelectionRootBounds(); |
|
timvolodine
2014/03/05 19:50:46
Should this be android-only? Not sure if the selec
mlamouri (slow - plz ping)
2014/03/10 15:56:45
I was considering making it Android only but I the
|
| UpdateSelectionBounds(); |
| #if defined(OS_ANDROID) |
| UpdateTextInputState(false, false); |
| @@ -2506,6 +2509,25 @@ void RenderWidget::UpdateSelectionBounds() { |
| #endif |
| } |
| +void RenderWidget::GetSelectionRootBounds(gfx::Rect* bounds) { |
| + WebRect bounds_webrect; |
| + webwidget_->selectionRootBounds(bounds_webrect); |
| + *bounds = bounds_webrect; |
| +} |
| + |
| +void RenderWidget::UpdateSelectionRootBounds() { |
|
timvolodine
2014/03/05 19:50:46
I think we need a better name for "UpdateSelection
mlamouri (slow - plz ping)
2014/03/10 15:56:45
I would prefer to have the name reflecting what th
|
| + if (!webwidget_ || handling_ime_event_) { |
| + return; |
| + } |
| + |
| + gfx::Rect bounds; |
| + GetSelectionRootBounds(&bounds); |
| + if (selection_root_rect_ != bounds) { |
| + selection_root_rect_ = bounds; |
| + Send(new ViewHostMsg_SelectionRootBoundsChanged(routing_id_, bounds)); |
| + } |
| +} |
| + |
| // Check blink::WebTextInputType and ui::TextInputType is kept in sync. |
| COMPILE_ASSERT(int(blink::WebTextInputTypeNone) == \ |
| int(ui::TEXT_INPUT_TYPE_NONE), mismatching_enums); |