Chromium Code Reviews| Index: ui/base/ime/input_method_ibus.cc |
| diff --git a/ui/base/ime/input_method_ibus.cc b/ui/base/ime/input_method_ibus.cc |
| index 333dfaf0153c13e2ed670dde5c789eaf56a35f24..e11e717892352c98f9248c66ef414f3925d0a51c 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); |
| + |
| + string16 selection_text; |
|
Yusuke Sato
2012/08/03 05:46:10
nit: move to L.366
Seigo Nonaka
2012/08/03 07:12:44
Done.
|
| + ui::Range selection_range; |
| + |
| + if (!GetTextInputClient()->GetSelectionRange(&selection_range)) { |
| + previous_selected_text_.clear(); |
| + return; |
| + } |
| + 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 surrdounding text in |
|
Yusuke Sato
2012/08/03 05:46:10
surrounding
Seigo Nonaka
2012/08/03 07:12:44
Done.
|
| + // TextInputClient. |
| + // TODO(nona): Implement fully surrounding text retrieval. |
| + GetInputContextClient()->SetSurroundingText(UTF16ToUTF8(selection_text), |
| + 0UL, |
|
Yusuke Sato
2012/08/03 05:46:10
is this a caret pos? add /* parameter_name */
Seigo Nonaka
2012/08/03 07:12:44
Done.
|
| + selection_range.length()); |
| + LOG(ERROR) << selection_text; |
|
Yusuke Sato
2012/08/03 05:46:10
remove
Seigo Nonaka
2012/08/03 07:12:44
Done.
|
| } |
| 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); |