summaryrefslogtreecommitdiffstats
path: root/content/renderer
diff options
context:
space:
mode:
authorkinaba@chromium.org <kinaba@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-21 22:40:50 +0000
committerkinaba@chromium.org <kinaba@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-21 22:40:50 +0000
commit3f783369aa10fa323d79b6ec69afbd7035350fcd (patch)
treee1a5000171b7c854a8625947817e541a5843f419 /content/renderer
parent5d921d4cb8e9d5c90366183a523817b99c9bc63f (diff)
downloadchromium_src-3f783369aa10fa323d79b6ec69afbd7035350fcd.zip
chromium_src-3f783369aa10fa323d79b6ec69afbd7035350fcd.tar.gz
chromium_src-3f783369aa10fa323d79b6ec69afbd7035350fcd.tar.bz2
Handle the change from CaretBounds to SelectionBounds for PPAPI Plugins.
BUG=101173 TEST=Manual: run ppapi_example_ime and verify the candidate window to pop up in a correct place, or open a Flash website with text field on Chrome OS, and verify that the candidate window is displayed in the bottom-left corner of the Flash rect. This CL is to reflect the refactoring http://crrev.com/105699 on IPCs also for Pepper plugins, and make IME candidate windows to be displayed on intended positions. Review URL: http://codereview.chromium.org/8363015 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@106796 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/renderer')
-rw-r--r--content/renderer/pepper_plugin_delegate_impl.cc6
-rw-r--r--content/renderer/pepper_plugin_delegate_impl.h2
-rw-r--r--content/renderer/render_view_impl.cc20
-rw-r--r--content/renderer/render_view_impl.h3
-rw-r--r--content/renderer/render_widget.cc19
-rw-r--r--content/renderer/render_widget.h2
6 files changed, 37 insertions, 15 deletions
diff --git a/content/renderer/pepper_plugin_delegate_impl.cc b/content/renderer/pepper_plugin_delegate_impl.cc
index 0dd156d..9c798a1 100644
--- a/content/renderer/pepper_plugin_delegate_impl.cc
+++ b/content/renderer/pepper_plugin_delegate_impl.cc
@@ -867,6 +867,12 @@ void PepperPluginDelegateImpl::PluginTextInputTypeChanged(
render_view_->PpapiPluginTextInputTypeChanged();
}
+void PepperPluginDelegateImpl::PluginCaretPositionChanged(
+ webkit::ppapi::PluginInstance* instance) {
+ if (focused_plugin_ == instance && render_view_)
+ render_view_->PpapiPluginCaretPositionChanged();
+}
+
void PepperPluginDelegateImpl::PluginRequestedCancelComposition(
webkit::ppapi::PluginInstance* instance) {
if (focused_plugin_ == instance && render_view_)
diff --git a/content/renderer/pepper_plugin_delegate_impl.h b/content/renderer/pepper_plugin_delegate_impl.h
index 9380ec7..e99e2e0 100644
--- a/content/renderer/pepper_plugin_delegate_impl.h
+++ b/content/renderer/pepper_plugin_delegate_impl.h
@@ -200,6 +200,8 @@ class PepperPluginDelegateImpl
bool focused) OVERRIDE;
virtual void PluginTextInputTypeChanged(
webkit::ppapi::PluginInstance* instance) OVERRIDE;
+ virtual void PluginCaretPositionChanged(
+ webkit::ppapi::PluginInstance* instance) OVERRIDE;
virtual void PluginRequestedCancelComposition(
webkit::ppapi::PluginInstance* instance) OVERRIDE;
virtual void PluginCrashed(webkit::ppapi::PluginInstance* instance);
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
index ac6f1aa..d92fd2f 100644
--- a/content/renderer/render_view_impl.cc
+++ b/content/renderer/render_view_impl.cc
@@ -4201,12 +4201,17 @@ void RenderViewImpl::OnSetFocus(bool enable) {
void RenderViewImpl::PpapiPluginFocusChanged() {
UpdateTextInputState();
+ UpdateSelectionBounds();
}
void RenderViewImpl::PpapiPluginTextInputTypeChanged() {
UpdateTextInputState();
}
+void RenderViewImpl::PpapiPluginCaretPositionChanged() {
+ UpdateSelectionBounds();
+}
+
void RenderViewImpl::PpapiPluginCancelComposition() {
Send(new ViewHostMsg_ImeCancelComposition(routing_id()));
ui::Range range(ui::Range::InvalidRange());
@@ -4297,9 +4302,18 @@ ui::TextInputType RenderViewImpl::GetTextInputType() {
pepper_delegate_.GetTextInputType() : RenderWidget::GetTextInputType();
}
-gfx::Rect RenderViewImpl::GetCaretBounds() {
- return pepper_delegate_.IsPluginFocused() ?
- pepper_delegate_.GetCaretBounds() : RenderWidget::GetCaretBounds();
+void RenderViewImpl::GetSelectionBounds(gfx::Rect* start, gfx::Rect* end) {
+ if (pepper_delegate_.IsPluginFocused()) {
+ // TODO(kinaba) http://crbug.com/101101
+ // Current Pepper IME API does not handle selection bounds. So we simply
+ // use the caret position as an empty range for now. It will be updated
+ // after Pepper API equips features related to surrounding text retrieval.
+ gfx::Rect caret = pepper_delegate_.GetCaretBounds();
+ *start = caret;
+ *end = caret;
+ return;
+ }
+ RenderWidget::GetSelectionBounds(start, end);
}
bool RenderViewImpl::CanComposeInline() {
diff --git a/content/renderer/render_view_impl.h b/content/renderer/render_view_impl.h
index d816f0b..7b5e7d6 100644
--- a/content/renderer/render_view_impl.h
+++ b/content/renderer/render_view_impl.h
@@ -255,6 +255,7 @@ class RenderViewImpl : public RenderWidget,
// Informs the render view that a PPAPI plugin has changed text input status.
void PpapiPluginTextInputTypeChanged();
+ void PpapiPluginCaretPositionChanged();
// Cancels current composition.
void PpapiPluginCancelComposition();
@@ -649,7 +650,7 @@ class RenderViewImpl : public RenderWidget,
virtual void OnImeConfirmComposition(
const string16& text, const ui::Range& replacement_range) OVERRIDE;
virtual ui::TextInputType GetTextInputType() OVERRIDE;
- virtual gfx::Rect GetCaretBounds() OVERRIDE;
+ virtual void GetSelectionBounds(gfx::Rect* start, gfx::Rect* end) OVERRIDE;
virtual bool CanComposeInline() OVERRIDE;
virtual bool WebWidgetHandlesCompositorScheduling() const OVERRIDE;
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc
index 960fa49..f7c7362 100644
--- a/content/renderer/render_widget.cc
+++ b/content/renderer/render_widget.cc
@@ -1313,22 +1313,21 @@ void RenderWidget::UpdateTextInputState() {
}
}
-gfx::Rect RenderWidget::GetCaretBounds() {
- if (!webwidget_)
- return gfx::Rect();
- return webwidget_->caretOrSelectionBounds();
+void RenderWidget::GetSelectionBounds(gfx::Rect* start, gfx::Rect* end) {
+ WebRect start_webrect;
+ WebRect end_webrect;
+ webwidget_->selectionBounds(start_webrect, end_webrect);
+ *start = start_webrect;
+ *end = end_webrect;
}
void RenderWidget::UpdateSelectionBounds() {
if (!webwidget_)
return;
- WebRect start;
- WebRect end;
- webwidget_->selectionBounds(start, end);
-
- gfx::Rect start_rect = start;
- gfx::Rect end_rect = end;
+ gfx::Rect start_rect;
+ gfx::Rect end_rect;
+ GetSelectionBounds(&start_rect, &end_rect);
if (selection_start_rect_ == start_rect && selection_end_rect_ == end_rect)
return;
diff --git a/content/renderer/render_widget.h b/content/renderer/render_widget.h
index 44a1106..d30b027 100644
--- a/content/renderer/render_widget.h
+++ b/content/renderer/render_widget.h
@@ -292,7 +292,7 @@ class CONTENT_EXPORT RenderWidget
// Override point to obtain that the current input method state and caret
// position.
virtual ui::TextInputType GetTextInputType();
- virtual gfx::Rect GetCaretBounds();
+ virtual void GetSelectionBounds(gfx::Rect* start, gfx::Rect* end);
// Override point to obtain that the current input method state about
// composition text.