Chromium Code Reviews| Index: content/renderer/render_view_impl.cc |
| diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc |
| index 22a3a8831d6481beb49639f065e827e457edb2bc..2f587951f07708ad2ef9c280abd96a4ec2cc6eb6 100644 |
| --- a/content/renderer/render_view_impl.cc |
| +++ b/content/renderer/render_view_impl.cc |
| @@ -867,6 +867,14 @@ bool RenderViewImpl::OnMessageReceived(const IPC::Message& message) { |
| IPC_MESSAGE_HANDLER(ViewMsg_Replace, OnReplace) |
| IPC_MESSAGE_HANDLER(ViewMsg_Delete, OnDelete) |
| IPC_MESSAGE_HANDLER(ViewMsg_SelectAll, OnSelectAll) |
| + IPC_MESSAGE_HANDLER(ViewMsg_ReplaceAll, OnReplaceAll) |
| + IPC_MESSAGE_HANDLER(ViewMsg_Unselect, OnUnselect) |
| + IPC_MESSAGE_HANDLER(ViewMsg_SetEditableSelectionOffsets, |
| + OnSetEditableSelectionOffsets) |
| + IPC_MESSAGE_HANDLER(ViewMsg_SetComposingRegion, |
| + OnSetComposingRegion) |
| + IPC_MESSAGE_HANDLER(ViewMsg_DeleteSurroundingText, |
| + OnDeleteSurroundingText) |
| IPC_MESSAGE_HANDLER(ViewMsg_SelectRange, OnSelectRange) |
| IPC_MESSAGE_HANDLER(ViewMsg_CopyImageAt, OnCopyImageAt) |
| IPC_MESSAGE_HANDLER(ViewMsg_ExecuteEditCommand, OnExecuteEditCommand) |
| @@ -1280,6 +1288,64 @@ void RenderViewImpl::OnSelectAll() { |
| WebString::fromUTF8("SelectAll")); |
| } |
| +void RenderViewImpl::OnReplaceAll(const string16& text) { |
| + WebKit::WebNode node = GetFocusedNode(); |
| + if (node.isNull() || !IsEditableNode(node)) |
| + return; |
| + |
| + OnSelectAll(); |
| + OnReplace(text); |
| +} |
| + |
| +void RenderViewImpl::OnUnselect() { |
| + if (!webview()) |
| + return; |
| + |
| + webview()->focusedFrame()->executeCommand(WebString::fromUTF8("Unselect")); |
| +} |
| + |
| +void RenderViewImpl::OnSetEditableSelectionOffsets(int start, int end) { |
| + webview()->setEditableSelectionOffsets(start, end); |
| +} |
| + |
| +void RenderViewImpl::OnSetComposingRegion(int start, int end, |
|
bulach
2012/08/01 20:09:45
nit: params on the next line
olilan
2012/08/21 14:36:15
Done.
|
| + const std::vector<WebKit::WebCompositionUnderline>& underlines) { |
| + if (!webview() || !webview()->focusedFrame()) |
| + return; |
| + WebKit::WebTextInputInfo info; |
| + if (end > start) { |
| + // WebCore's Editor does not provide a way to set a composition without |
| + // inserting the composing text. So, we select, then save and then delete |
| + // the required composing text, then reinsert it as a new composition. |
| + info = webview()->textInputInfo(); |
| + if (info.type == WebKit::WebTextInputTypeNone) |
| + return; |
| + if (info.compositionStart < info.compositionEnd) |
| + webview()->confirmComposition(""); |
| + webview()->setEditableSelectionOffsets(start, end); |
| + WebString text = webview()->focusedFrame()->selectionAsText(); |
| + webview()->focusedFrame()->executeCommand(WebString::fromUTF8("Delete")); |
| + OnImeSetComposition(text, underlines, 0, text.length()); |
| + // Set the selection back to what it was. |
| + webview()->setEditableSelectionOffsets(info.selectionStart, |
|
rniwa-cr
2012/08/02 17:11:54
We should just add a new method to Editor that doe
olilan
2012/08/21 14:36:15
Replaced by a call to new WebKit method setComposi
|
| + info.selectionEnd); |
| + } else { |
| + // Clear the existing composition. |
| + webview()->confirmComposition(""); |
| + } |
| +} |
| + |
| +void RenderViewImpl::OnDeleteSurroundingText(int before, int after) { |
| + if (!webview() || !webview()->focusedFrame()) |
| + return; |
| + for (int i = 0; i < before; ++i) |
| + webview()->focusedFrame()->executeCommand( |
|
darin (slow to review)
2012/08/02 06:25:13
can't executing this command have side-effects? f
olilan
2012/08/02 09:55:44
Yes, agreed this implementation is not ideal. At t
rniwa-cr
2012/08/02 17:11:54
First off, we should move all of this to Source/We
olilan
2012/08/03 15:55:08
Thanks. One question: is there a way to delete a R
rniwa-cr
2012/08/03 20:00:07
There isn't if it needs to be in the undo stack.
olilan
2012/08/21 14:36:15
Implementation replaced by call to new WebKit meth
|
| + WebString::fromUTF8("DeleteBackward")); |
| + for (int i = 0; i < after; ++i) |
| + webview()->focusedFrame()->executeCommand( |
| + WebString::fromUTF8("DeleteForward")); |
| +} |
| + |
| void RenderViewImpl::OnSelectRange(const gfx::Point& start, |
| const gfx::Point& end) { |
| if (!webview()) |