diff options
author | nona@chromium.org <nona@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-08-03 09:29:57 +0000 |
---|---|---|
committer | nona@chromium.org <nona@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-08-03 09:29:57 +0000 |
commit | a13ac7ddea08262f685d52d20575b1602164e0ac (patch) | |
tree | beaf4d85f5290ecd9b68f7edaf9124b5d51d1b97 /ui | |
parent | aa73d27453daf11d9b7eaa6401b349a279e53579 (diff) | |
download | chromium_src-a13ac7ddea08262f685d52d20575b1602164e0ac.zip chromium_src-a13ac7ddea08262f685d52d20575b1602164e0ac.tar.gz chromium_src-a13ac7ddea08262f685d52d20575b1602164e0ac.tar.bz2 |
Support reverse conversion for ChromeOS
This cl does not support fully surrounding text retrieval, but it is enough to send selection text for reverse conversion.
I will revisit fully SetSurroundingText implementation when it is required.
BUG=127032
TEST=ran content_unittests, ui_unittests, chromeos_unittests
Review URL: https://chromiumcodereview.appspot.com/10823141
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@149824 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui')
-rw-r--r-- | ui/base/ime/input_method_ibus.cc | 33 | ||||
-rw-r--r-- | ui/base/ime/input_method_ibus.h | 2 |
2 files changed, 33 insertions, 2 deletions
diff --git a/ui/base/ime/input_method_ibus.cc b/ui/base/ime/input_method_ibus.cc index 333dfaf..7fd48b2 100644 --- a/ui/base/ime/input_method_ibus.cc +++ b/ui/base/ime/input_method_ibus.cc @@ -43,6 +43,7 @@ const char kClientName[] = "chrome"; // http://ibus.googlecode.com/svn/docs/ibus-1.4/ibus-ibustypes.html#IBusCapabilite const uint32 kIBusCapabilityPreeditText = 1U; const uint32 kIBusCapabilityFocus = 8U; +const uint32 kIBusCapabilitySurroundingText = 32U; XKeyEvent* GetKeyEvent(XEvent* event) { DCHECK(event && (event->type == KeyPress || event->type == KeyRelease)); @@ -354,6 +355,33 @@ void InputMethodIBus::OnCaretBoundsChanged(const TextInputClient* client) { // This function runs asynchronously. ibus_client_->SetCursorLocation(rect, composition_head); + + ui::Range selection_range; + if (!GetTextInputClient()->GetSelectionRange(&selection_range)) { + previous_selected_text_.clear(); + return; + } + + string16 selection_text; + if (!GetTextInputClient()->GetTextFromRange(selection_range, + &selection_text)) { + previous_selected_text_.clear(); + return; + } + + if (previous_selected_text_ == selection_text) + return; + + previous_selected_text_ = selection_text; + + // In the original meaning of SetSurroundingText is not just selection text, + // but currently there are no way to retrieve surrounding text in + // TextInputClient. + // TODO(nona): Implement fully surrounding text retrieval. + GetInputContextClient()->SetSurroundingText( + UTF16ToUTF8(selection_text), + 0UL, /* cursor position. */ + selection_range.length()); /* selection anchor position. */ } void InputMethodIBus::CancelComposition(const TextInputClient* client) { @@ -438,7 +466,8 @@ void InputMethodIBus::SetUpSignalHandlers() { weak_ptr_factory_.GetWeakPtr())); GetInputContextClient()->SetCapabilities( - kIBusCapabilityPreeditText | kIBusCapabilityFocus); + kIBusCapabilityPreeditText | kIBusCapabilityFocus | + kIBusCapabilitySurroundingText); UpdateContextFocusState(); // Since ibus-daemon is launched in an on-demand basis on Chrome OS, RWHVA (or @@ -535,7 +564,7 @@ void InputMethodIBus::UpdateContextFocusState() { GetInputContextClient()->FocusIn(); if (context_focused_) { - uint32 capability = kIBusCapabilityFocus; + uint32 capability = kIBusCapabilityFocus | kIBusCapabilitySurroundingText; if (CanComposeInline()) capability |= kIBusCapabilityPreeditText; GetInputContextClient()->SetCapabilities(capability); diff --git a/ui/base/ime/input_method_ibus.h b/ui/base/ime/input_method_ibus.h index d6adc38..69e280f 100644 --- a/ui/base/ime/input_method_ibus.h +++ b/ui/base/ime/input_method_ibus.h @@ -188,6 +188,8 @@ class UI_EXPORT InputMethodIBus : public InputMethodBase { // processing result of the pending key event. string16 result_text_; + string16 previous_selected_text_; + // Indicates if input context is focused or not. bool context_focused_; |