Index: ui/base/ime/input_method_chromeos.cc |
diff --git a/ui/base/ime/input_method_chromeos.cc b/ui/base/ime/input_method_chromeos.cc |
index a8ac9028f9b5faefff0d276f20e61e3864d4d359..27d0a5598f68cb4893efac1edac640bfa1cd7568 100644 |
--- a/ui/base/ime/input_method_chromeos.cc |
+++ b/ui/base/ime/input_method_chromeos.cc |
@@ -57,34 +57,9 @@ InputMethodChromeOS::~InputMethodChromeOS() { |
ui::IMEBridge::Get()->SetInputContextHandler(NULL); |
} |
-bool InputMethodChromeOS::OnUntranslatedIMEMessage( |
- const base::NativeEvent& event, |
- NativeEventResult* result) { |
- return false; |
-} |
- |
-void InputMethodChromeOS::ProcessKeyEventDone(ui::KeyEvent* event, |
- bool is_handled) { |
- DCHECK(event); |
- if (event->type() == ET_KEY_PRESSED) { |
- if (is_handled) { |
- // IME event has a priority to be handled, so that character composer |
- // should be reset. |
- character_composer_.Reset(); |
- } else { |
- // If IME does not handle key event, passes keyevent to character composer |
- // to be able to compose complex characters. |
- is_handled = ExecuteCharacterComposer(*event); |
- } |
- } |
- |
- if (event->type() == ET_KEY_PRESSED || event->type() == ET_KEY_RELEASED) |
- ProcessKeyEventPostIME(event, is_handled); |
- |
- handling_key_event_ = false; |
-} |
- |
-void InputMethodChromeOS::DispatchKeyEvent(ui::KeyEvent* event) { |
+void InputMethodChromeOS::DispatchKeyEvent( |
+ ui::KeyEvent* event, |
+ std::unique_ptr<AckCallback> ack_callback) { |
DCHECK(event->IsKeyEvent()); |
DCHECK(!(event->flags() & ui::EF_IS_SYNTHESIZED)); |
@@ -114,28 +89,68 @@ void InputMethodChromeOS::DispatchKeyEvent(ui::KeyEvent* event) { |
// Treating as PostIME event if character composer handles key event and |
// generates some IME event, |
ProcessKeyEventPostIME(event, true); |
+ if (ack_callback) |
+ ack_callback->Run(true); |
return; |
} |
ProcessUnfilteredKeyPressEvent(event); |
} else { |
ignore_result(DispatchKeyEventPostIME(event)); |
} |
+ if (ack_callback) |
+ ack_callback->Run(false); |
return; |
} |
handling_key_event_ = true; |
if (GetEngine()->IsInterestedInKeyEvent()) { |
- ui::IMEEngineHandlerInterface::KeyEventDoneCallback callback = |
- base::Bind(&InputMethodChromeOS::ProcessKeyEventDone, |
- weak_ptr_factory_.GetWeakPtr(), |
- // Pass the ownership of the new copied event. |
- base::Owned(new ui::KeyEvent(*event))); |
+ ui::IMEEngineHandlerInterface::KeyEventDoneCallback callback = base::Bind( |
+ &InputMethodChromeOS::ProcessKeyEventDone, |
+ weak_ptr_factory_.GetWeakPtr(), |
+ // Pass the ownership of the new copied event. |
+ base::Owned(new ui::KeyEvent(*event)), Passed(&ack_callback)); |
GetEngine()->ProcessKeyEvent(*event, callback); |
} else { |
- ProcessKeyEventDone(event, false); |
+ ProcessKeyEventDone(event, std::move(ack_callback), false); |
} |
} |
+bool InputMethodChromeOS::OnUntranslatedIMEMessage( |
+ const base::NativeEvent& event, |
+ NativeEventResult* result) { |
+ return false; |
+} |
+ |
+void InputMethodChromeOS::ProcessKeyEventDone( |
+ ui::KeyEvent* event, |
+ std::unique_ptr<AckCallback> ack_callback, |
+ bool is_handled) { |
+ DCHECK(event); |
+ if (event->type() == ET_KEY_PRESSED) { |
+ if (is_handled) { |
+ // IME event has a priority to be handled, so that character composer |
+ // should be reset. |
+ character_composer_.Reset(); |
+ } else { |
+ // If IME does not handle key event, passes keyevent to character composer |
+ // to be able to compose complex characters. |
+ is_handled = ExecuteCharacterComposer(*event); |
+ } |
+ } |
+ |
+ if (ack_callback) |
+ ack_callback->Run(is_handled); |
+ |
+ if (event->type() == ET_KEY_PRESSED || event->type() == ET_KEY_RELEASED) |
+ ProcessKeyEventPostIME(event, is_handled); |
+ |
+ handling_key_event_ = false; |
+} |
+ |
+void InputMethodChromeOS::DispatchKeyEvent(ui::KeyEvent* event) { |
+ DispatchKeyEvent(event, nullptr); |
+} |
+ |
void InputMethodChromeOS::OnTextInputTypeChanged( |
const TextInputClient* client) { |
if (!IsTextInputClientFocused(client)) |