Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(354)

Side by Side Diff: content/renderer/render_view.cc

Issue 8073021: Implement Pepper IME API. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Incorporated comments from brettw, yzshen, and kochi. Created 9 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/render_view.h" 5 #include "content/renderer/render_view.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cmath> 8 #include <cmath>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 4244 matching lines...) Expand 10 before | Expand all | Expand 10 after
4255 4255
4256 // Notify all Pepper plugins. 4256 // Notify all Pepper plugins.
4257 pepper_delegate_.OnSetFocus(enable); 4257 pepper_delegate_.OnSetFocus(enable);
4258 } 4258 }
4259 } 4259 }
4260 4260
4261 void RenderView::PpapiPluginFocusChanged() { 4261 void RenderView::PpapiPluginFocusChanged() {
4262 UpdateInputMethod(); 4262 UpdateInputMethod();
4263 } 4263 }
4264 4264
4265 void RenderView::PpapiPluginTextInputTypeChanged() {
4266 UpdateInputMethod();
4267 }
4268
4269 void RenderView::PpapiPluginCancelComposition() {
4270 Send(new ViewHostMsg_ImeCancelComposition(routing_id()));
4271 ui::Range range(ui::Range::InvalidRange());
4272 Send(new ViewHostMsg_ImeCompositionRangeChanged(routing_id(), range));
4273 }
4274
4265 void RenderView::RequestRemoteAccessClientFirewallTraversal() { 4275 void RenderView::RequestRemoteAccessClientFirewallTraversal() {
4266 Send(new ViewHostMsg_RequestRemoteAccessClientFirewallTraversal(routing_id_)); 4276 Send(new ViewHostMsg_RequestRemoteAccessClientFirewallTraversal(routing_id_));
4267 } 4277 }
4268 4278
4269 void RenderView::OnImeSetComposition( 4279 void RenderView::OnImeSetComposition(
4270 const string16& text, 4280 const string16& text,
4271 const std::vector<WebKit::WebCompositionUnderline>& underlines, 4281 const std::vector<WebKit::WebCompositionUnderline>& underlines,
4272 int selection_start, 4282 int selection_start,
4273 int selection_end) { 4283 int selection_end) {
4274 // Until PPAPI has an interface for handling IME events, we skip sending 4284 if (pepper_delegate_.IsPluginFocused()) {
4275 // OnImeSetComposition. Otherwise the composition is canceled when a 4285 pepper_delegate_.OnImeSetComposition(text,
4276 // non-editable DOM element is focused. 4286 underlines,
4277 // 4287 selection_start,
4278 // TODO(kinaba) This temporal remedy can be removed after PPAPI is extended 4288 selection_end);
4279 // with an IME handling interface. 4289 } else {
4280 if (!pepper_delegate_.IsPluginFocused()) {
4281 RenderWidget::OnImeSetComposition(text, 4290 RenderWidget::OnImeSetComposition(text,
4282 underlines, 4291 underlines,
4283 selection_start, 4292 selection_start,
4284 selection_end); 4293 selection_end);
4285 } 4294 }
4286 } 4295 }
4287 4296
4288 void RenderView::OnImeConfirmComposition(const string16& text) { 4297 void RenderView::OnImeConfirmComposition(const string16& text) {
4289 if (pepper_delegate_.IsPluginFocused()) { 4298 if (pepper_delegate_.IsPluginFocused())
4290 // TODO(kinaba) Until PPAPI has an interface for handling IME events, we 4299 pepper_delegate_.OnImeConfirmComposition(text);
4291 // send character events. 4300 else
4292 for (size_t i = 0; i < text.size(); ++i) {
4293 WebKit::WebKeyboardEvent char_event;
4294 char_event.type = WebKit::WebInputEvent::Char;
4295 char_event.timeStampSeconds = base::Time::Now().ToDoubleT();
4296 char_event.modifiers = 0;
4297 char_event.windowsKeyCode = text[i];
4298 char_event.nativeKeyCode = text[i];
4299 char_event.text[0] = text[i];
4300 char_event.unmodifiedText[0] = text[i];
4301 if (webwidget_)
4302 webwidget_->handleInputEvent(char_event);
4303 }
4304 } else {
4305 RenderWidget::OnImeConfirmComposition(text); 4301 RenderWidget::OnImeConfirmComposition(text);
4306 }
4307 } 4302 }
4308 4303
4309 ui::TextInputType RenderView::GetTextInputType() { 4304 ui::TextInputType RenderView::GetTextInputType() {
4310 if (pepper_delegate_.IsPluginFocused()) { 4305 return pepper_delegate_.IsPluginFocused() ?
4311 #if !defined(TOUCH_UI) 4306 pepper_delegate_.GetTextInputType() : RenderWidget::GetTextInputType();
4312 // TODO(kinaba) Until PPAPI has an interface for handling IME events, we 4307 }
4313 // consider all the parts of PPAPI plugins are accepting text inputs. 4308
4314 return ui::TEXT_INPUT_TYPE_TEXT; 4309 gfx::Rect RenderView::GetCaretBounds() {
4315 #else 4310 return pepper_delegate_.IsPluginFocused() ?
4316 // Disable keyboard input in flash for touch ui until PPAPI can support IME 4311 pepper_delegate_.GetCaretBounds() : RenderWidget::GetCaretBounds();
4317 // events.
4318 return ui::TEXT_INPUT_TYPE_NONE;
4319 #endif
4320 }
4321 return RenderWidget::GetTextInputType();
4322 } 4312 }
4323 4313
4324 bool RenderView::CanComposeInline() { 4314 bool RenderView::CanComposeInline() {
4325 if (pepper_delegate_.IsPluginFocused()) { 4315 return pepper_delegate_.IsPluginFocused() ?
4326 // TODO(kinaba) Until PPAPI has an interface for handling IME events, there 4316 pepper_delegate_.CanComposeInline() : true;
4327 // is no way for the browser to know whether the plugin is capable of
4328 // drawing composition text. We assume plugins are incapable and let the
4329 // browser handle composition display for now.
4330 return false;
4331 }
4332 return true;
4333 } 4317 }
4334 4318
4335 #if defined(OS_MACOSX) 4319 #if defined(OS_MACOSX)
4336 void RenderView::PluginFocusChanged(bool focused, int plugin_id) { 4320 void RenderView::PluginFocusChanged(bool focused, int plugin_id) {
4337 IPC::Message* msg = new ViewHostMsg_PluginFocusChanged(routing_id(), 4321 IPC::Message* msg = new ViewHostMsg_PluginFocusChanged(routing_id(),
4338 focused, plugin_id); 4322 focused, plugin_id);
4339 Send(msg); 4323 Send(msg);
4340 } 4324 }
4341 4325
4342 void RenderView::StartPluginIme() { 4326 void RenderView::StartPluginIme() {
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after
4637 main_frame->enableViewSourceMode(true); 4621 main_frame->enableViewSourceMode(true);
4638 } 4622 }
4639 4623
4640 void RenderView::OnLockMouseACK(bool succeeded) { 4624 void RenderView::OnLockMouseACK(bool succeeded) {
4641 pepper_delegate_.OnLockMouseACK(succeeded); 4625 pepper_delegate_.OnLockMouseACK(succeeded);
4642 } 4626 }
4643 4627
4644 void RenderView::OnMouseLockLost() { 4628 void RenderView::OnMouseLockLost() {
4645 pepper_delegate_.OnMouseLockLost(); 4629 pepper_delegate_.OnMouseLockLost();
4646 } 4630 }
4647
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698