Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(641)

Unified Diff: ui/base/ime/input_method_ibus.cc

Issue 10823141: Support reverse conversion for ChromeOS (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Address comments Created 8 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/base/ime/input_method_ibus.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
« no previous file with comments | « ui/base/ime/input_method_ibus.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698