Commit 87822492 authored by Nick Diego Yamane's avatar Nick Diego Yamane Committed by Commit Bot

ozone/wayland: Support dead keys

This patch adds character composition capabilities to ozone
wayland text input backend. To accomplish this it modifies
WaylandInputMethodContext, reusing ui::CharacterComposer
(previously chromeos-only) to handle key events forwared
by InputMethodAuraLinux.

BUG=921947

Change-Id: I9f06ed253ad0ba67b437ef683a6ed235cb57a1f2
Reviewed-on: https://chromium-review.googlesource.com/c/1448136Reviewed-by: default avatarShu Chen <shuchen@chromium.org>
Reviewed-by: default avatarRobert Kroeger <rjkroege@chromium.org>
Commit-Queue: Nick Yamane <nickdiego@igalia.com>
Cr-Commit-Position: refs/heads/master@{#629160}
parent bbd1e571
...@@ -2,6 +2,7 @@ include_rules = [ ...@@ -2,6 +2,7 @@ include_rules = [
"+ui/base/buildflags.h", # Doesn't bring in all of ui/base. "+ui/base/buildflags.h", # Doesn't bring in all of ui/base.
"+ui/base/hit_test.h", # UI hit test doesn't bring in all of ui/base. "+ui/base/hit_test.h", # UI hit test doesn't bring in all of ui/base.
"+ui/base/ui_base_features.h", "+ui/base/ui_base_features.h",
"+ui/base/ime/character_composer.h",
"+ui/base/ime/composition_text.h", "+ui/base/ime/composition_text.h",
"+ui/base/ime/linux/linux_input_method_context.h", "+ui/base/ime/linux/linux_input_method_context.h",
"+ui/base/ime/linux/linux_input_method_context_factory.h", "+ui/base/ime/linux/linux_input_method_context_factory.h",
......
...@@ -70,10 +70,19 @@ void WaylandInputMethodContext::Init(bool initialize_for_testing) { ...@@ -70,10 +70,19 @@ void WaylandInputMethodContext::Init(bool initialize_for_testing) {
bool WaylandInputMethodContext::DispatchKeyEvent( bool WaylandInputMethodContext::DispatchKeyEvent(
const ui::KeyEvent& key_event) { const ui::KeyEvent& key_event) {
return false; if (key_event.type() != ET_KEY_PRESSED ||
!character_composer_.FilterKeyPress(key_event))
return false;
// TODO(nickdiego): Handle preedit string
auto composed = character_composer_.composed_character();
if (!composed.empty())
delegate_->OnCommit(composed);
return true;
} }
void WaylandInputMethodContext::Reset() { void WaylandInputMethodContext::Reset() {
character_composer_.Reset();
if (text_input_) if (text_input_)
text_input_->Reset(); text_input_->Reset();
} }
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
#define UI_OZONE_PLATFORM_WAYLAND_WAYLAND_INPUT_METHOD_CONTEXT_H_ #define UI_OZONE_PLATFORM_WAYLAND_WAYLAND_INPUT_METHOD_CONTEXT_H_
#include "base/macros.h" #include "base/macros.h"
#include "ui/base/ime/character_composer.h"
#include "ui/base/ime/linux/linux_input_method_context.h" #include "ui/base/ime/linux/linux_input_method_context.h"
#include "ui/events/ozone/evdev/event_dispatch_callback.h" #include "ui/events/ozone/evdev/event_dispatch_callback.h"
#include "ui/ozone/platform/wayland/zwp_text_input_wrapper.h" #include "ui/ozone/platform/wayland/zwp_text_input_wrapper.h"
...@@ -51,6 +52,10 @@ class WaylandInputMethodContext : public LinuxInputMethodContext, ...@@ -51,6 +52,10 @@ class WaylandInputMethodContext : public LinuxInputMethodContext,
std::unique_ptr<ZWPTextInputWrapper> text_input_; std::unique_ptr<ZWPTextInputWrapper> text_input_;
// An object to compose a character from a sequence of key presses
// including dead key etc.
CharacterComposer character_composer_;
DISALLOW_COPY_AND_ASSIGN(WaylandInputMethodContext); DISALLOW_COPY_AND_ASSIGN(WaylandInputMethodContext);
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment