| Index: views/ime/mock_input_method.cc
|
| diff --git a/views/ime/mock_input_method.cc b/views/ime/mock_input_method.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..8864552304f421ed34543f243e8f40cec5ac8220
|
| --- /dev/null
|
| +++ b/views/ime/mock_input_method.cc
|
| @@ -0,0 +1,154 @@
|
| +// 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 "views/ime/mock_input_method.h"
|
| +
|
| +#include "base/basictypes.h"
|
| +#include "base/logging.h"
|
| +#include "ui/base/keycodes/keyboard_codes.h"
|
| +#include "views/events/event.h"
|
| +#include "views/widget/widget.h"
|
| +
|
| +namespace views {
|
| +
|
| +MockInputMethod::MockInputMethod()
|
| + : composition_changed_(false),
|
| + focus_changed_(false),
|
| + text_input_type_changed_(false),
|
| + caret_bounds_changed_(false),
|
| + cancel_composition_called_(false),
|
| + locale_("en-US"),
|
| + direction_(base::i18n::LEFT_TO_RIGHT),
|
| + active_(true) {
|
| +}
|
| +
|
| +MockInputMethod::~MockInputMethod() {
|
| +}
|
| +
|
| +void MockInputMethod::Init(Widget* widget) {
|
| + InputMethodBase::Init(widget);
|
| +}
|
| +
|
| +void MockInputMethod::DispatchKeyEvent(const KeyEvent& key) {
|
| + bool handled = (composition_changed_ || result_text_.length()) &&
|
| + !IsTextInputTypeNone();
|
| +
|
| + ClearStates();
|
| + if (handled) {
|
| + KeyEvent mock_key(ui::ET_KEY_PRESSED, ui::VKEY_PROCESSKEY, key.flags());
|
| + DispatchKeyEventPostIME(mock_key);
|
| + } else {
|
| + DispatchKeyEventPostIME(key);
|
| + }
|
| +
|
| + if (focus_changed_)
|
| + return;
|
| +
|
| + TextInputClient* client = GetTextInputClient();
|
| + if (client) {
|
| + if (handled) {
|
| + if (result_text_.length())
|
| + client->InsertText(result_text_);
|
| + if (composition_changed_) {
|
| + if (composition_.text.length())
|
| + client->SetCompositionText(composition_);
|
| + else
|
| + client->ClearCompositionText();
|
| + }
|
| + } else if (key.type() == ui::ET_KEY_PRESSED) {
|
| + char16 ch = key.GetCharacter();
|
| + client->InsertChar(ch, key.flags());
|
| + }
|
| + }
|
| +
|
| + ClearResult();
|
| +}
|
| +
|
| +void MockInputMethod::OnTextInputTypeChanged(View* view) {
|
| + DCHECK(IsViewFocused(view));
|
| + text_input_type_changed_ = true;
|
| +}
|
| +
|
| +void MockInputMethod::OnCaretBoundsChanged(View* view) {
|
| + DCHECK(IsViewFocused(view));
|
| + caret_bounds_changed_ = true;
|
| +}
|
| +
|
| +void MockInputMethod::CancelComposition(View* view) {
|
| + DCHECK(IsViewFocused(view));
|
| + cancel_composition_called_ = true;
|
| + ClearResult();
|
| +}
|
| +
|
| +std::string MockInputMethod::GetInputLocale() {
|
| + return locale_;
|
| +}
|
| +
|
| +base::i18n::TextDirection MockInputMethod::GetInputTextDirection() {
|
| + return direction_;
|
| +}
|
| +
|
| +bool MockInputMethod::IsActive() {
|
| + return active_;
|
| +}
|
| +
|
| +void MockInputMethod::FocusedViewWillChange() {
|
| + TextInputClient* client = GetTextInputClient();
|
| + if (client && client->HasCompositionText())
|
| + client->ConfirmCompositionText();
|
| + focus_changed_ = true;
|
| + ClearResult();
|
| +}
|
| +
|
| +void MockInputMethod::Clear() {
|
| + ClearStates();
|
| + ClearResult();
|
| +}
|
| +
|
| +void MockInputMethod::SetCompositionTextForNextKey(
|
| + const ui::CompositionText& composition) {
|
| + composition_changed_ = true;
|
| + composition_ = composition;
|
| +}
|
| +
|
| +void MockInputMethod::SetResultTextForNextKey(const string16& result) {
|
| + result_text_ = result;
|
| +}
|
| +
|
| +void MockInputMethod::SetInputLocale(const std::string& locale) {
|
| + if (locale_ != locale) {
|
| + locale_ = locale;
|
| + OnInputMethodChanged();
|
| + }
|
| +}
|
| +
|
| +void MockInputMethod::SetInputTextDirection(
|
| + base::i18n::TextDirection direction) {
|
| + if (direction_ != direction) {
|
| + direction_ = direction;
|
| + OnInputMethodChanged();
|
| + }
|
| +}
|
| +
|
| +void MockInputMethod::SetActive(bool active) {
|
| + if (active_ != active) {
|
| + active_ = active;
|
| + OnInputMethodChanged();
|
| + }
|
| +}
|
| +
|
| +void MockInputMethod::ClearStates() {
|
| + focus_changed_ = false;
|
| + text_input_type_changed_ = false;
|
| + caret_bounds_changed_ = false;
|
| + cancel_composition_called_ = false;
|
| +}
|
| +
|
| +void MockInputMethod::ClearResult() {
|
| + composition_.Clear();
|
| + composition_changed_ = false;
|
| + result_text_.clear();
|
| +}
|
| +
|
| +} // namespace views
|
|
|