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