Index: content/renderer/render_widget.cc |
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc |
index 05adb9fcf7805f6e2521bd2b3c64ef2292888048..2e3e94eef7e0b2d01746a56bcc8770c19cb94881 100644 |
--- a/content/renderer/render_widget.cc |
+++ b/content/renderer/render_widget.cc |
@@ -234,6 +234,7 @@ RenderWidget::RenderWidget(CompositorDependencies* compositor_deps, |
is_fullscreen_granted_(false), |
display_mode_(blink::WebDisplayModeUndefined), |
ime_event_guard_(nullptr), |
+ ime_in_batch_edit_(false), |
closing_(false), |
host_closing_(false), |
is_swapped_out_(swapped_out), |
@@ -516,6 +517,8 @@ bool RenderWidget::OnMessageReceived(const IPC::Message& message) { |
IPC_MESSAGE_HANDLER(InputMsg_ImeEventAck, OnImeEventAck) |
IPC_MESSAGE_HANDLER(InputMsg_RequestTextInputStateUpdate, |
OnRequestTextInputStateUpdate) |
+ IPC_MESSAGE_HANDLER(InputMsg_ImeBatchEdit, |
+ OnImeBatchEdit) |
IPC_MESSAGE_HANDLER(ViewMsg_ShowImeIfNeeded, OnShowImeIfNeeded) |
#endif |
IPC_MESSAGE_HANDLER(ViewMsg_HandleCompositorProto, OnHandleCompositorProto) |
@@ -981,6 +984,7 @@ void RenderWidget::UpdateTextInputState(ShowIme show_ime, |
#if defined(OS_ANDROID) |
params.is_non_ime_change = |
(change_source == ChangeSource::FROM_NON_IME) || text_field_is_dirty_; |
+ params.batch_edit = ime_in_batch_edit_; |
if (params.is_non_ime_change) |
OnImeEventSentForAck(new_info); |
text_field_is_dirty_ = false; |
@@ -1615,6 +1619,19 @@ void RenderWidget::OnRequestTextInputStateUpdate() { |
UpdateSelectionBounds(); |
UpdateTextInputState(ShowIme::HIDE_IME, ChangeSource::FROM_IME); |
} |
+ |
+void RenderWidget::OnImeBatchEdit(bool begin) { |
+ if (begin) { |
+ ime_in_batch_edit_ = true; |
+ return; |
+ } |
+ if (!ime_in_batch_edit_) |
+ return; |
+ ime_in_batch_edit_ = false; |
+ DCHECK(!ime_event_guard_); |
+ UpdateSelectionBounds(); |
+ UpdateTextInputState(ShowIme::HIDE_IME, ChangeSource::FROM_IME); |
+} |
#endif |
void RenderWidget::OnRequestCompositionUpdate(bool immediate_request, |