Chromium Code Reviews| 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); |
|
Shu Chen
2016/12/09 03:30:17
Not sure whether this has already been considered.
|
| + |
| + 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)) |