| Index: components/arc/ime/arc_ime_service.cc
|
| diff --git a/components/arc/ime/arc_ime_service.cc b/components/arc/ime/arc_ime_service.cc
|
| index 9259f31aad29e083415249ddb1dc897270a5f615..3ce001364a93585b667282dbcd90af3dab7b808f 100644
|
| --- a/components/arc/ime/arc_ime_service.cc
|
| +++ b/components/arc/ime/arc_ime_service.cc
|
| @@ -18,6 +18,7 @@
|
| #include "ui/events/base_event_utils.h"
|
| #include "ui/events/event.h"
|
| #include "ui/events/keycodes/keyboard_codes.h"
|
| +#include "ui/gfx/range/range.h"
|
|
|
| namespace arc {
|
|
|
| @@ -209,6 +210,7 @@ void ArcImeService::OnTextInputTypeChanged(ui::TextInputType type) {
|
| }
|
|
|
| void ArcImeService::OnCursorRectChanged(const gfx::Rect& rect) {
|
| + InvalidateSurroundingTextAndSelectionRange();
|
| if (cursor_rect_ == rect)
|
| return;
|
| cursor_rect_ = rect;
|
| @@ -219,6 +221,7 @@ void ArcImeService::OnCursorRectChanged(const gfx::Rect& rect) {
|
| }
|
|
|
| void ArcImeService::OnCancelComposition() {
|
| + InvalidateSurroundingTextAndSelectionRange();
|
| ui::InputMethod* const input_method = GetInputMethod();
|
| if (input_method)
|
| input_method->CancelComposition(this);
|
| @@ -231,6 +234,24 @@ void ArcImeService::ShowImeIfNeeded() {
|
| }
|
| }
|
|
|
| +void ArcImeService::OnCursorRectChangedWithSurroundingText(
|
| + const gfx::Rect& rect,
|
| + const gfx::Range& text_range,
|
| + const base::string16& text_in_range,
|
| + const gfx::Range& selection_range) {
|
| + text_range_ = text_range;
|
| + text_in_range_ = text_in_range;
|
| + selection_range_ = selection_range;
|
| +
|
| + if (cursor_rect_ == rect)
|
| + return;
|
| + cursor_rect_ = rect;
|
| +
|
| + ui::InputMethod* const input_method = GetInputMethod();
|
| + if (input_method)
|
| + input_method->OnCaretBoundsChanged(this);
|
| +}
|
| +
|
| ////////////////////////////////////////////////////////////////////////////////
|
| // Overridden from keyboard::KeyboardControllerObserver
|
| void ArcImeService::OnKeyboardBoundsChanging(const gfx::Rect& new_bounds) {
|
| @@ -250,16 +271,19 @@ void ArcImeService::OnKeyboardClosed() {}
|
|
|
| void ArcImeService::SetCompositionText(
|
| const ui::CompositionText& composition) {
|
| + InvalidateSurroundingTextAndSelectionRange();
|
| has_composition_text_ = !composition.text.empty();
|
| ime_bridge_->SendSetCompositionText(composition);
|
| }
|
|
|
| void ArcImeService::ConfirmCompositionText() {
|
| + InvalidateSurroundingTextAndSelectionRange();
|
| has_composition_text_ = false;
|
| ime_bridge_->SendConfirmCompositionText();
|
| }
|
|
|
| void ArcImeService::ClearCompositionText() {
|
| + InvalidateSurroundingTextAndSelectionRange();
|
| if (has_composition_text_) {
|
| has_composition_text_ = false;
|
| ime_bridge_->SendInsertText(base::string16());
|
| @@ -267,6 +291,7 @@ void ArcImeService::ClearCompositionText() {
|
| }
|
|
|
| void ArcImeService::InsertText(const base::string16& text) {
|
| + InvalidateSurroundingTextAndSelectionRange();
|
| has_composition_text_ = false;
|
| ime_bridge_->SendInsertText(text);
|
| }
|
| @@ -278,6 +303,8 @@ void ArcImeService::InsertChar(const ui::KeyEvent& event) {
|
| if (ime_type_ == ui::TEXT_INPUT_TYPE_NONE)
|
| return;
|
|
|
| + InvalidateSurroundingTextAndSelectionRange();
|
| +
|
| // For apps that doesn't handle hardware keyboard events well, keys that are
|
| // typically on software keyboard and lack of them are fatal, namely,
|
| // unmodified enter and backspace keys are sent through IME.
|
| @@ -337,6 +364,32 @@ gfx::Rect ArcImeService::GetCaretBounds() const {
|
| return converted;
|
| }
|
|
|
| +bool ArcImeService::GetTextRange(gfx::Range* range) const {
|
| + if (!text_range_.IsValid())
|
| + return false;
|
| + *range = text_range_;
|
| + return true;
|
| +}
|
| +
|
| +bool ArcImeService::GetSelectionRange(gfx::Range* range) const {
|
| + if (!selection_range_.IsValid())
|
| + return false;
|
| + *range = selection_range_;
|
| + return true;
|
| +}
|
| +
|
| +bool ArcImeService::GetTextFromRange(const gfx::Range& range,
|
| + base::string16* text) const {
|
| + // It's supposed that this method is called only from
|
| + // InputMethod::OnCaretBoundsChanged(). In that method, the range obtained
|
| + // from GetTextRange() is used as the argument of this method. To prevent an
|
| + // unexpected usage, the check, |range != text_range_|, is added.
|
| + if (!text_range_.IsValid() || range != text_range_)
|
| + return false;
|
| + *text = text_in_range_;
|
| + return true;
|
| +}
|
| +
|
| ui::TextInputMode ArcImeService::GetTextInputMode() const {
|
| return ui::TEXT_INPUT_MODE_DEFAULT;
|
| }
|
| @@ -346,6 +399,7 @@ base::i18n::TextDirection ArcImeService::GetTextDirection() const {
|
| }
|
|
|
| void ArcImeService::ExtendSelectionAndDelete(size_t before, size_t after) {
|
| + InvalidateSurroundingTextAndSelectionRange();
|
| ime_bridge_->SendExtendSelectionAndDelete(before, after);
|
| }
|
|
|
| @@ -366,18 +420,10 @@ bool ArcImeService::HasCompositionText() const {
|
| return has_composition_text_;
|
| }
|
|
|
| -bool ArcImeService::GetTextRange(gfx::Range* range) const {
|
| - return false;
|
| -}
|
| -
|
| bool ArcImeService::GetCompositionTextRange(gfx::Range* range) const {
|
| return false;
|
| }
|
|
|
| -bool ArcImeService::GetSelectionRange(gfx::Range* range) const {
|
| - return false;
|
| -}
|
| -
|
| bool ArcImeService::SetSelectionRange(const gfx::Range& range) {
|
| return false;
|
| }
|
| @@ -386,11 +432,6 @@ bool ArcImeService::DeleteRange(const gfx::Range& range) {
|
| return false;
|
| }
|
|
|
| -bool ArcImeService::GetTextFromRange(
|
| - const gfx::Range& range, base::string16* text) const {
|
| - return false;
|
| -}
|
| -
|
| bool ArcImeService::ChangeTextDirectionAndLayoutAlignment(
|
| base::i18n::TextDirection direction) {
|
| return false;
|
| @@ -401,4 +442,10 @@ bool ArcImeService::IsTextEditCommandEnabled(
|
| return false;
|
| }
|
|
|
| +void ArcImeService::InvalidateSurroundingTextAndSelectionRange() {
|
| + text_range_ = gfx::Range::InvalidRange();
|
| + text_in_range_ = base::string16();
|
| + selection_range_ = gfx::Range::InvalidRange();
|
| +}
|
| +
|
| } // namespace arc
|
|
|