| Index: views/ime/input_method_wayland.cc
|
| diff --git a/views/ime/input_method_wayland.cc b/views/ime/input_method_wayland.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..20d3ff245d6a029d1b8f74f9e08cc75ab063a351
|
| --- /dev/null
|
| +++ b/views/ime/input_method_wayland.cc
|
| @@ -0,0 +1,76 @@
|
| +// 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/input_method_wayland.h"
|
| +
|
| +#include "views/widget/widget.h"
|
| +
|
| +namespace views {
|
| +
|
| +InputMethodWayland::InputMethodWayland(
|
| + internal::InputMethodDelegate *delegate) {
|
| + set_delegate(delegate);
|
| +}
|
| +
|
| +void InputMethodWayland::DispatchKeyEvent(const KeyEvent& key) {
|
| + if (!GetTextInputClient()) {
|
| + DispatchKeyEventPostIME(key);
|
| + return;
|
| + }
|
| +
|
| + if (key.type() == ui::ET_KEY_PRESSED) {
|
| + ProcessKeyPressEvent(key);
|
| + } else if (key.type() == ui::ET_KEY_RELEASED) {
|
| + DispatchKeyEventPostIME(key);
|
| + }
|
| +}
|
| +
|
| +void InputMethodWayland::OnTextInputTypeChanged(View* view) {
|
| + NOTIMPLEMENTED();
|
| +}
|
| +
|
| +void InputMethodWayland::OnCaretBoundsChanged(View* view) {
|
| + NOTIMPLEMENTED();
|
| +}
|
| +
|
| +void InputMethodWayland::CancelComposition(View* view) {
|
| + NOTIMPLEMENTED();
|
| +}
|
| +
|
| +std::string InputMethodWayland::GetInputLocale() {
|
| + return std::string("");
|
| +}
|
| +
|
| +base::i18n::TextDirection InputMethodWayland::GetInputTextDirection() {
|
| + return base::i18n::UNKNOWN_DIRECTION;
|
| +}
|
| +
|
| +bool InputMethodWayland::IsActive() {
|
| + return true;
|
| +}
|
| +
|
| +//////////////////////////////////////////////////////////////////////////////
|
| +// InputMethodWayland private
|
| +
|
| +void InputMethodWayland::ProcessKeyPressEvent(const KeyEvent& key) {
|
| + const View* old_focused_view = focused_view();
|
| + DispatchKeyEventPostIME(key);
|
| +
|
| + // We shouldn't dispatch the character anymore if the key event caused focus
|
| + // change.
|
| + if (old_focused_view != focused_view())
|
| + return;
|
| +
|
| + // If a key event was not filtered by |context_| or |context_simple_|, then
|
| + // it means the key event didn't generate any result text. For some cases,
|
| + // the key event may still generate a valid character, eg. a control-key
|
| + // event (ctrl-a, return, tab, etc.). We need to send the character to the
|
| + // focused text input client by calling TextInputClient::InsertChar().
|
| + char16 ch = key.GetCharacter();
|
| + TextInputClient* client = GetTextInputClient();
|
| + if (ch && client)
|
| + client->InsertChar(ch, key.flags());
|
| +}
|
| +
|
| +} // namespace views
|
|
|