Index: third_party/WebKit/Source/web/WebViewImpl.cpp |
diff --git a/third_party/WebKit/Source/web/WebViewImpl.cpp b/third_party/WebKit/Source/web/WebViewImpl.cpp |
index 218f70fe9f3dfa61695497b476055adf4a9d0b69..dfa198acd7008ee6b11f6249e40b6071d0667698 100644 |
--- a/third_party/WebKit/Source/web/WebViewImpl.cpp |
+++ b/third_party/WebKit/Source/web/WebViewImpl.cpp |
@@ -2368,32 +2368,51 @@ bool WebViewImpl::setComposition( |
return text.isEmpty() || inputMethodController.hasComposition(); |
} |
-bool WebViewImpl::confirmComposition() |
+bool WebViewImpl::confirmComposition(int newCursorPosition) |
{ |
- return confirmComposition(DoNotKeepSelection); |
+ return confirmComposition(DoNotKeepSelection, newCursorPosition); |
} |
-bool WebViewImpl::confirmComposition(ConfirmCompositionBehavior selectionBehavior) |
+bool WebViewImpl::confirmComposition(ConfirmCompositionBehavior selectionBehavior, int newCursorPosition) |
{ |
- return confirmComposition(WebString(), selectionBehavior); |
+ return confirmComposition(WebString(), selectionBehavior, newCursorPosition); |
} |
-bool WebViewImpl::confirmComposition(const WebString& text) |
+bool WebViewImpl::confirmComposition(const WebString& text, int newCursorPosition) |
{ |
UserGestureIndicator gestureIndicator(DefinitelyProcessingNewUserGesture); |
- return confirmComposition(text, DoNotKeepSelection); |
+ return confirmComposition(text, DoNotKeepSelection, newCursorPosition); |
} |
-bool WebViewImpl::confirmComposition(const WebString& text, ConfirmCompositionBehavior selectionBehavior) |
+bool WebViewImpl::confirmComposition(const WebString& text, ConfirmCompositionBehavior selectionBehavior, int newCursorPosition) |
{ |
LocalFrame* focused = toLocalFrame(focusedCoreFrame()); |
if (!focused || !m_imeAcceptEvents) |
return false; |
+ InputMethodController& inputMethodController = focused->inputMethodController(); |
+ if (inputMethodController.hasComposition()) { |
+ if (newCursorPosition < 1) { |
+ newCursorPosition = newCursorPosition + textInputInfo().compositionStart; |
Changwan Ryu
2016/05/24 08:35:50
1. Don't call textInputInfo() repeatedly, as it is
yabinh
2016/07/06 11:44:30
InputMethodController::m_compositionRange doesn't
|
+ } else { |
+ newCursorPosition = newCursorPosition + textInputInfo().compositionEnd - 1; |
+ } |
+ } else { |
+ if (newCursorPosition < 1) { |
+ newCursorPosition = newCursorPosition + textInputInfo().selectionStart; |
+ } else { |
+ newCursorPosition = newCursorPosition + textInputInfo().selectionStart + text.length() - 1; |
+ } |
+ } |
+ |
if (WebPlugin* plugin = focusedPluginIfInputMethodSupported(focused)) |
- return plugin->confirmComposition(text, selectionBehavior); |
+ return plugin->confirmComposition(text, selectionBehavior, newCursorPosition); |
+ |
+ if (selectionBehavior == KeepSelection) |
Changwan Ryu
2016/05/24 08:35:50
Why couldn't you pass selectionBehavior to confirm
|
+ return inputMethodController.confirmCompositionOrInsertText(text, InputMethodController::KeepSelection); |
- return focused->inputMethodController().confirmCompositionOrInsertText(text, selectionBehavior == KeepSelection ? InputMethodController::KeepSelection : InputMethodController::DoNotKeepSelection); |
+ return inputMethodController.confirmCompositionOrInsertText(text, InputMethodController::DoNotKeepSelection) |
+ && inputMethodController.setEditableSelectionOffsetsWithBoundaryCheck(newCursorPosition, newCursorPosition); |
} |
bool WebViewImpl::compositionRange(size_t* location, size_t* length) |