| Index: ui/base/ime/mock_input_method.cc
|
| diff --git a/ui/base/ime/mock_input_method.cc b/ui/base/ime/mock_input_method.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..827dcc9e08a942d029ac670c3c271ddebe6df9f0
|
| --- /dev/null
|
| +++ b/ui/base/ime/mock_input_method.cc
|
| @@ -0,0 +1,107 @@
|
| +// Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "ui/base/ime/mock_input_method.h"
|
| +
|
| +#include "base/logging.h"
|
| +#include "base/string16.h"
|
| +#include "ui/base/events.h"
|
| +#include "ui/base/ime/input_method_delegate.h"
|
| +#include "ui/base/ime/text_input_client.h"
|
| +
|
| +#if defined(USE_AURA)
|
| +#include "ui/aura/event.h"
|
| +#endif
|
| +
|
| +namespace ui {
|
| +
|
| +MockInputMethod::MockInputMethod(internal::InputMethodDelegate* delegate)
|
| + : delegate_(NULL),
|
| + text_input_client_(NULL),
|
| + consume_next_key_(false) {
|
| + set_delegate(delegate);
|
| +}
|
| +
|
| +MockInputMethod::~MockInputMethod() {
|
| +}
|
| +
|
| +void MockInputMethod::set_delegate(internal::InputMethodDelegate* delegate) {
|
| + delegate_ = delegate;
|
| +}
|
| +
|
| +void MockInputMethod::set_text_input_client(TextInputClient* client) {
|
| + text_input_client_ = client;
|
| +}
|
| +
|
| +TextInputClient* MockInputMethod::text_input_client() const {
|
| + return text_input_client_;
|
| +}
|
| +
|
| +void MockInputMethod::Init() {}
|
| +
|
| +void MockInputMethod::DispatchKeyEvent(gfx::NativeEvent native_key_event) {
|
| + if (native_key_event->type() == ui::ET_KEY_RELEASED) {
|
| + // On key release, just dispatch it.
|
| + delegate_->DispatchKeyEventPostIME(native_key_event);
|
| + } else {
|
| + if (consume_next_key_) {
|
| + // Send the VKEY_PROCESSKEY RawKeyDown event.
|
| + SendFakeProcessKeyEvent(true, native_key_event->flags());
|
| + } else {
|
| + // Send a RawKeyDown event first,
|
| + delegate_->DispatchKeyEventPostIME(native_key_event);
|
| + if (text_input_client_) {
|
| + // then send a Char event via ui::TextInputClient.
|
| +#if defined(USE_AURA)
|
| + aura::KeyEvent* key = static_cast<aura::KeyEvent*>(native_key_event);
|
| + char16 c = key->GetCharacter();
|
| + KeyboardCode key_code = key->key_code();
|
| +#else
|
| + NOTIMPLEMENTED();
|
| + char16 c = 0;
|
| + KeyboardCode key_code = VKEY_UNKNOWN;
|
| +#endif
|
| + if (c && InputMethod::ShouldSendCharEventForKeyboardCode(key_code))
|
| + text_input_client_->InsertChar(c, native_key_event->flags());
|
| + }
|
| + }
|
| + }
|
| + consume_next_key_ = false;
|
| +}
|
| +
|
| +void MockInputMethod::OnTextInputTypeChanged(gfx::NativeWindow window) {}
|
| +void MockInputMethod::OnCaretBoundsChanged(gfx::NativeWindow window) {}
|
| +void MockInputMethod::CancelComposition(gfx::NativeWindow window) {}
|
| +
|
| +std::string MockInputMethod::GetInputLocale() {
|
| + return "";
|
| +}
|
| +
|
| +base::i18n::TextDirection MockInputMethod::GetInputTextDirection() {
|
| + return base::i18n::UNKNOWN_DIRECTION;
|
| +}
|
| +
|
| +bool MockInputMethod::IsActive() {
|
| + return true;
|
| +}
|
| +
|
| +ui::TextInputType MockInputMethod::GetTextInputType() const {
|
| + return ui::TEXT_INPUT_TYPE_NONE;
|
| +}
|
| +
|
| +void MockInputMethod::ConsumeNextKey() {
|
| + consume_next_key_ = true;
|
| +}
|
| +
|
| +void MockInputMethod::SendFakeProcessKeyEvent(bool pressed, int flags) const {
|
| +#if defined(USE_AURA)
|
| + aura::KeyEvent key(pressed ? ET_KEY_PRESSED : ET_KEY_RELEASED,
|
| + VKEY_PROCESSKEY, flags);
|
| + delegate_->DispatchKeyEventPostIME(&key);
|
| +#else
|
| + NOTIMPLEMENTED();
|
| +#endif
|
| +}
|
| +
|
| +} // namespace ui
|
|
|