| 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..7fd48b2db3c1e38067397b6cdba8d9ace72d3b04 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);
|
|
|