Commit ead76a6a authored by moshayedi's avatar moshayedi Committed by Commit bot

IME for Mus: Add ui.mojom.CompositionText and its struct traits.

- Adds ui.mojom.CompositionUnderline and ui.mojom.CompositionText.
- Adds corresponding struct traits + unittest for struct traits.
- Breaks ui.mojom.TextInputClient::OnCompositionEvent() into multiple
  functions, each corresponding to a function in ui::TextInputClient.

BUG=631524

Review-Url: https://codereview.chromium.org/2539453002
Cr-Commit-Position: refs/heads/master@{#436143}
parent 6108971a
......@@ -9,7 +9,7 @@
#include "mojo/public/cpp/bindings/strong_binding.h"
#include "services/service_manager/public/cpp/connector.h"
#include "services/ui/public/interfaces/constants.mojom.h"
#include "services/ui/public/interfaces/ime.mojom.h"
#include "services/ui/public/interfaces/ime/ime.mojom.h"
namespace {
......@@ -31,11 +31,7 @@ class InputMethod : public ui::mojom::InputMethod {
DCHECK(key_event->IsKeyEvent());
if (key_event->AsKeyEvent()->is_char()) {
ui::mojom::CompositionEventPtr composition_event =
ui::mojom::CompositionEvent::New();
composition_event->type = ui::mojom::CompositionEventType::INSERT_CHAR;
composition_event->key_event = std::move(key_event);
client_->OnCompositionEvent(std::move(composition_event));
client_->InsertChar(std::move(key_event));
callback.Run(true);
} else {
callback.Run(false);
......
......@@ -11,7 +11,7 @@
#include <memory>
#include "mojo/public/cpp/bindings/binding.h"
#include "services/ui/public/interfaces/ime.mojom.h"
#include "services/ui/public/interfaces/ime/ime.mojom.h"
class IMEDriver : public ui::mojom::IMEDriver {
public:
......
......@@ -25,6 +25,7 @@ _typemap_imports = [
"//net/interfaces/typemaps.gni",
"//services/service_manager/public/cpp/typemaps.gni",
"//services/ui/public/interfaces/display/typemaps.gni",
"//services/ui/public/interfaces/ime/typemaps.gni",
"//services/video_capture/public/interfaces/typemaps.gni",
"//skia/public/interfaces/typemaps.gni",
"//third_party/WebKit/public/public_typemaps.gni",
......
......@@ -7,7 +7,7 @@
#include "mojo/public/cpp/bindings/binding_set.h"
#include "services/ui/ime/ime_server_impl.h"
#include "services/ui/public/interfaces/ime.mojom.h"
#include "services/ui/public/interfaces/ime/ime.mojom.h"
namespace ui {
......
......@@ -9,7 +9,7 @@
#include "mojo/public/cpp/bindings/binding_set.h"
#include "services/catalog/public/interfaces/catalog.mojom.h"
#include "services/ui/public/interfaces/ime.mojom.h"
#include "services/ui/public/interfaces/ime/ime.mojom.h"
namespace service_manager {
class Connector;
......
......@@ -11,7 +11,7 @@
#include "services/service_manager/public/cpp/service_context.h"
#include "services/service_manager/public/cpp/service_test.h"
#include "services/ui/public/interfaces/constants.mojom.h"
#include "services/ui/public/interfaces/ime.mojom.h"
#include "services/ui/public/interfaces/ime/ime.mojom.h"
#include "ui/events/event.h"
class TestTextInputClient : public ui::mojom::TextInputClient {
......@@ -19,26 +19,30 @@ class TestTextInputClient : public ui::mojom::TextInputClient {
explicit TestTextInputClient(ui::mojom::TextInputClientRequest request)
: binding_(this, std::move(request)) {}
ui::mojom::CompositionEventPtr WaitUntilCompositionEvent() {
if (!receieved_composition_event_) {
std::unique_ptr<ui::Event> WaitUntilInsertChar() {
if (!receieved_event_) {
run_loop_.reset(new base::RunLoop);
run_loop_->Run();
run_loop_.reset();
}
return std::move(receieved_composition_event_);
return std::move(receieved_event_);
}
private:
void OnCompositionEvent(ui::mojom::CompositionEventPtr event) override {
receieved_composition_event_ = std::move(event);
void SetCompositionText(const ui::CompositionText& composition) override {}
void ConfirmCompositionText() override {}
void ClearCompositionText() override {}
void InsertText(const std::string& text) override {}
void InsertChar(std::unique_ptr<ui::Event> event) override {
receieved_event_ = std::move(event);
if (run_loop_)
run_loop_->Quit();
}
mojo::Binding<ui::mojom::TextInputClient> binding_;
std::unique_ptr<base::RunLoop> run_loop_;
ui::mojom::CompositionEventPtr receieved_composition_event_;
std::unique_ptr<ui::Event> receieved_event_;
DISALLOW_COPY_AND_ASSIGN(TestTextInputClient);
};
......@@ -95,15 +99,10 @@ TEST_F(IMEAppTest, ProcessKeyEvent) {
ui::KeyEvent char_event('A', ui::VKEY_A, 0);
EXPECT_TRUE(ProcessKeyEvent(&input_method, ui::Event::Clone(char_event)));
ui::mojom::CompositionEventPtr composition_event =
client.WaitUntilCompositionEvent();
EXPECT_EQ(ui::mojom::CompositionEventType::INSERT_CHAR,
composition_event->type);
EXPECT_TRUE(composition_event->key_event);
EXPECT_TRUE(composition_event->key_event.value()->IsKeyEvent());
std::unique_ptr<ui::Event> received_event = client.WaitUntilInsertChar();
ASSERT_TRUE(received_event && received_event->IsKeyEvent());
ui::KeyEvent* received_key_event =
composition_event->key_event.value()->AsKeyEvent();
ui::KeyEvent* received_key_event = received_event->AsKeyEvent();
EXPECT_EQ(ui::ET_KEY_PRESSED, received_key_event->type());
EXPECT_TRUE(received_key_event->is_char());
EXPECT_EQ(char_event.GetCharacter(), received_key_event->GetCharacter());
......
......@@ -9,7 +9,7 @@
#include "services/service_manager/public/cpp/service_context.h"
#include "services/ui/ime/test_ime_driver/test_ime_driver.h"
#include "services/ui/public/interfaces/constants.mojom.h"
#include "services/ui/public/interfaces/ime.mojom.h"
#include "services/ui/public/interfaces/ime/ime.mojom.h"
namespace ui {
namespace test {
......
......@@ -4,7 +4,7 @@
#include "services/ui/ime/test_ime_driver/test_ime_driver.h"
#include "services/ui/public/interfaces/ime.mojom.h"
#include "services/ui/public/interfaces/ime/ime.mojom.h"
namespace ui {
namespace test {
......@@ -25,11 +25,7 @@ class TestInputMethod : public mojom::InputMethod {
DCHECK(key_event->IsKeyEvent());
if (key_event->AsKeyEvent()->is_char()) {
mojom::CompositionEventPtr composition_event =
mojom::CompositionEvent::New();
composition_event->type = mojom::CompositionEventType::INSERT_CHAR;
composition_event->key_event = std::move(key_event);
client_->OnCompositionEvent(std::move(composition_event));
client_->InsertChar(std::move(key_event));
callback.Run(true);
} else {
callback.Run(false);
......
......@@ -11,7 +11,7 @@
#include <memory>
#include "mojo/public/cpp/bindings/binding.h"
#include "services/ui/public/interfaces/ime.mojom.h"
#include "services/ui/public/interfaces/ime/ime.mojom.h"
namespace ui {
namespace test {
......
......@@ -14,7 +14,6 @@ mojom("interfaces") {
"display_manager.mojom",
"event_matcher.mojom",
"gpu_service.mojom",
"ime.mojom",
"mus_constants.mojom",
"user_access_manager.mojom",
"user_activity_monitor.mojom",
......@@ -37,6 +36,7 @@ mojom("interfaces") {
"//cc/ipc:interfaces",
"//gpu/ipc/common:interfaces",
"//services/ui/public/interfaces/display",
"//services/ui/public/interfaces/ime",
"//ui/events/mojo:interfaces",
"//ui/gfx/geometry/mojo",
"//ui/gfx/mojo",
......@@ -55,6 +55,7 @@ test("ui_struct_traits_unittests") {
sources = [
"display/display_struct_traits_unittest.cc",
"ime/ime_struct_traits_unittest.cc",
]
deps = [
......@@ -62,6 +63,7 @@ test("ui_struct_traits_unittests") {
"//base/test:test_support",
"//mojo/edk/test:run_all_unittests",
"//services/ui/public/interfaces/display:test_interfaces",
"//services/ui/public/interfaces/ime:test_interfaces",
"//testing/gtest",
"//ui/display/types",
"//ui/gfx:test_support",
......
# Copyright 2016 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.
import("//mojo/public/tools/bindings/mojom.gni")
mojom("ime") {
sources = [
"ime.mojom",
]
public_deps = [
"//ui/events/mojo:interfaces",
"//ui/gfx/geometry/mojo",
"//ui/gfx/range/mojo",
]
}
mojom("test_interfaces") {
sources = [
"ime_struct_traits_test.mojom",
]
public_deps = [
":ime",
]
}
per-file *_struct_traits*.*=set noparent
per-file *_struct_traits*.*=file://ipc/SECURITY_OWNERS
per-file *.mojom=set noparent
per-file *.mojom=file://ipc/SECURITY_OWNERS
......@@ -6,24 +6,24 @@ module ui.mojom;
import "ui/events/mojo/event.mojom";
import "ui/gfx/geometry/mojo/geometry.mojom";
struct CompositionEvent {
CompositionEventType type;
// Used when |type| is INSERT_CHAR. See the comments for
// ui::TextInputClient::InsertChar() for more information.
Event? key_event;
// TODO(moshayedi): crbug.com/631524. Add fields required for other types of
// composition event.
import "ui/gfx/range/mojo/range.mojom";
// Represents an underlined segment of text currently composed by IME.
// Corresponds to ui::CompositionUnderline.
struct CompositionUnderline {
uint32 start_offset;
uint32 end_offset;
bool thick;
uint32 color;
uint32 background_color;
};
enum CompositionEventType {
UPDATE,
CONFIRM,
CLEAR,
INSERT_CHAR,
INSERT_TEXT
// Represents a text currently being composed by IME. Corresponds to
// ui::CompositionText.
struct CompositionText {
string text;
array<CompositionUnderline> underlines;
gfx.mojom.Range selection;
};
// See comments for ui::TextInputType for more details.
......@@ -96,7 +96,7 @@ interface InputMethod {
// Called to process a key event. The callback function will be called to
// notify the client if the event was handled or not. A handled event may
// generate zero or more composition events which will be sent to the client
// by calling TextInputClient::OnCompositionEvent().
// using the "input method result" functions of TextInputClient interface.
ProcessKeyEvent(ui.mojom.Event key_event) => (bool handled);
CancelComposition();
......@@ -104,12 +104,32 @@ interface InputMethod {
// IME drivers send updates to clients using the TextInputClient interface.
interface TextInputClient {
// Corresponds to "input method result" functions of ui::TextInputClient.
// See comments for InputMethod::ProcessKeyEvent() for when this is called.
OnCompositionEvent(CompositionEvent event);
// Functions corresponding to "input method result" functions of
// ui::TextInputClient. See comments for InputMethod::ProcessKeyEvent() for
// when these are called.
// Sets composition text and attributes. See comments for
// ui::TextInputClient::SetCompositionText() for more details.
SetCompositionText(CompositionText composition);
// Converts current composition text into final content.
ConfirmCompositionText();
// Removes current composition text.
ClearCompositionText();
// Inserts a given text at the insertion point. Current composition text or
// selection will be removed. This method should never be called when the
// current text input type is TEXT_INPUT_TYPE_NONE.
InsertText(string text);
// Inserts a single character at the insertion point. Unlike InsertText(),
// the character is not processed. See ui::TextInputClient::InsertChar()
// for more details.
InsertChar(ui.mojom.Event event);
// TODO(moshayedi): Add functions corresponding to ui::TextInputClient for:
// - Input text confirmation
// - Input context information
// - Document content operations
// - Miscellaneous functions
// crbug.com/631527.
......
# Copyright 2016 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.
mojom = "//services/ui/public/interfaces/ime/ime.mojom"
public_headers = [
"//ui/base/ime/composition_text.h",
"//ui/base/ime/composition_underline.h",
]
traits_headers = [ "//services/ui/public/interfaces/ime/ime_struct_traits.h" ]
sources = [
"//services/ui/public/interfaces/ime/ime_struct_traits.cc",
]
public_deps = [
"//ui/base/ime",
]
deps = [
"//ui/gfx/range",
]
type_mappings = [
"ui.mojom.CompositionText=ui::CompositionText",
"ui.mojom.CompositionUnderline=ui::CompositionUnderline",
]
// Copyright 2016 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 "services/ui/public/interfaces/ime/ime_struct_traits.h"
#include "ui/gfx/range/mojo/range_struct_traits.h"
namespace mojo {
// static
bool StructTraits<ui::mojom::CompositionUnderlineDataView,
ui::CompositionUnderline>::
Read(ui::mojom::CompositionUnderlineDataView data,
ui::CompositionUnderline* out) {
if (data.is_null())
return false;
out->start_offset = data.start_offset();
out->end_offset = data.end_offset();
out->color = data.color();
out->thick = data.thick();
out->background_color = data.background_color();
return true;
}
// static
bool StructTraits<ui::mojom::CompositionTextDataView, ui::CompositionText>::
Read(ui::mojom::CompositionTextDataView data, ui::CompositionText* out) {
return !data.is_null() && data.ReadText(&out->text) &&
data.ReadUnderlines(&out->underlines) &&
data.ReadSelection(&out->selection);
}
} // namespace mojo
// Copyright 2016 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.
#ifndef SERVICES_UI_PUBLIC_INTERFACES_IME_IME_STRUCT_TRAITS_H_
#define SERVICES_UI_PUBLIC_INTERFACES_IME_IME_STRUCT_TRAITS_H_
#include "base/strings/utf_string_conversions.h"
#include "services/ui/public/interfaces/ime/ime.mojom-shared.h"
#include "ui/base/ime/composition_text.h"
#include "ui/base/ime/composition_underline.h"
namespace mojo {
template <>
struct StructTraits<ui::mojom::CompositionUnderlineDataView,
ui::CompositionUnderline> {
static uint32_t start_offset(const ui::CompositionUnderline& c) {
return c.start_offset;
}
static uint32_t end_offset(const ui::CompositionUnderline& c) {
return c.end_offset;
}
static uint32_t color(const ui::CompositionUnderline& c) { return c.color; }
static uint32_t thick(const ui::CompositionUnderline& c) { return c.thick; }
static uint32_t background_color(const ui::CompositionUnderline& c) {
return c.background_color;
}
static bool Read(ui::mojom::CompositionUnderlineDataView data,
ui::CompositionUnderline* out);
};
template <>
struct StructTraits<ui::mojom::CompositionTextDataView, ui::CompositionText> {
static std::string text(const ui::CompositionText& c) {
return base::UTF16ToUTF8(c.text);
}
static ui::CompositionUnderlines underlines(const ui::CompositionText& c) {
return c.underlines;
}
static gfx::Range selection(const ui::CompositionText& c) {
return c.selection;
}
static bool Read(ui::mojom::CompositionTextDataView data,
ui::CompositionText* out);
};
} // namespace mojo
#endif // SERVICES_UI_PUBLIC_INTERFACES_IME_IME_STRUCT_TRAITS_H_
// Copyright 2016 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.
module ui.mojom;
import "services/ui/public/interfaces/ime/ime.mojom";
interface IMEStructTraitsTest {
[Sync]
EchoCompositionText(CompositionText in) => (CompositionText out);
};
// Copyright 2016 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 "base/message_loop/message_loop.h"
#include "base/strings/utf_string_conversions.h"
#include "mojo/public/cpp/bindings/binding_set.h"
#include "services/ui/public/interfaces/ime/ime_struct_traits_test.mojom.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/base/ime/composition_text.h"
#include "ui/base/ime/composition_underline.h"
namespace ui {
namespace {
class IMEStructTraitsTest : public testing::Test,
public mojom::IMEStructTraitsTest {
public:
IMEStructTraitsTest() {}
protected:
mojom::IMEStructTraitsTestPtr GetTraitsTestProxy() {
return traits_test_bindings_.CreateInterfacePtrAndBind(this);
}
private:
// mojom::IMEStructTraitsTest:
void EchoCompositionText(
const CompositionText& in,
const EchoCompositionTextCallback& callback) override {
callback.Run(in);
}
base::MessageLoop loop_; // A MessageLoop is needed for Mojo IPC to work.
mojo::BindingSet<mojom::IMEStructTraitsTest> traits_test_bindings_;
DISALLOW_COPY_AND_ASSIGN(IMEStructTraitsTest);
};
} // namespace
TEST_F(IMEStructTraitsTest, CompositionText) {
CompositionText input;
input.text = base::UTF8ToUTF16("abcdefghij");
input.underlines.push_back(CompositionUnderline(0, 2, SK_ColorGRAY, false));
input.underlines.push_back(
CompositionUnderline(3, 6, SK_ColorRED, true, SK_ColorGREEN));
input.selection = gfx::Range(1, 7);
mojom::IMEStructTraitsTestPtr proxy = GetTraitsTestProxy();
CompositionText output;
proxy->EchoCompositionText(input, &output);
EXPECT_EQ(input, output);
}
} // namespace ui
# Copyright 2016 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.
typemaps = [ "//services/ui/public/interfaces/ime/ime.typemap" ]
......@@ -24,7 +24,7 @@
#include "services/ui/public/interfaces/clipboard.mojom.h"
#include "services/ui/public/interfaces/display_manager.mojom.h"
#include "services/ui/public/interfaces/gpu_service.mojom.h"
#include "services/ui/public/interfaces/ime.mojom.h"
#include "services/ui/public/interfaces/ime/ime.mojom.h"
#include "services/ui/public/interfaces/user_access_manager.mojom.h"
#include "services/ui/public/interfaces/user_activity_monitor.mojom.h"
#include "services/ui/public/interfaces/window_manager_window_tree_factory.mojom.h"
......
......@@ -7,7 +7,7 @@
#include <utility>
#include "services/ui/public/interfaces/constants.mojom.h"
#include "services/ui/public/interfaces/ime.mojom.h"
#include "services/ui/public/interfaces/ime/ime.mojom.h"
#include "services/ui/public/interfaces/window_tree_constants.mojom.h"
#include "ui/aura/mus/text_input_client_impl.h"
#include "ui/aura/mus/window_port_mus.h"
......
......@@ -8,7 +8,7 @@
#include "base/macros.h"
#include "mojo/public/cpp/bindings/strong_binding.h"
#include "services/service_manager/public/cpp/connector.h"
#include "services/ui/public/interfaces/ime.mojom.h"
#include "services/ui/public/interfaces/ime/ime.mojom.h"
#include "ui/aura/aura_export.h"
#include "ui/base/ime/input_method_base.h"
......
......@@ -4,6 +4,7 @@
#include "ui/aura/mus/text_input_client_impl.h"
#include "base/strings/utf_string_conversions.h"
#include "ui/aura/mus/input_method_mus.h"
#include "ui/base/ime/text_input_client.h"
......@@ -18,29 +19,28 @@ ui::mojom::TextInputClientPtr TextInputClientImpl::CreateInterfacePtrAndBind() {
return binding_.CreateInterfacePtrAndBind();
}
void TextInputClientImpl::OnCompositionEvent(
ui::mojom::CompositionEventPtr event) {
switch (event->type) {
case ui::mojom::CompositionEventType::INSERT_CHAR: {
DCHECK((*event->key_event)->IsKeyEvent());
ui::KeyEvent* key_event = (*event->key_event)->AsKeyEvent();
DCHECK(key_event->is_char());
text_input_client_->InsertChar(*key_event);
break;
}
case ui::mojom::CompositionEventType::CONFIRM:
text_input_client_->ConfirmCompositionText();
break;
case ui::mojom::CompositionEventType::CLEAR:
text_input_client_->ClearCompositionText();
break;
case ui::mojom::CompositionEventType::UPDATE:
case ui::mojom::CompositionEventType::INSERT_TEXT:
// TODO(moshayedi): crbug.com/631524. Implement these types of composition
// events once we have the necessary fields in ui.mojom.CompositionEvent.
NOTIMPLEMENTED();
break;
}
void TextInputClientImpl::SetCompositionText(
const ui::CompositionText& composition) {
text_input_client_->SetCompositionText(composition);
}
void TextInputClientImpl::ConfirmCompositionText() {
text_input_client_->ConfirmCompositionText();
}
void TextInputClientImpl::ClearCompositionText() {
text_input_client_->ClearCompositionText();
}
void TextInputClientImpl::InsertText(const std::string& text) {
text_input_client_->InsertText(base::UTF8ToUTF16(text));
}
void TextInputClientImpl::InsertChar(std::unique_ptr<ui::Event> event) {
DCHECK(event->IsKeyEvent());
ui::KeyEvent* key_event = event->AsKeyEvent();
DCHECK(key_event->is_char());
text_input_client_->InsertChar(*key_event);
}
} // namespace aura
......@@ -6,7 +6,8 @@
#define UI_AURA_MUS_TEXT_INPUT_CLIENT_IMPL_H_
#include "mojo/public/cpp/bindings/binding.h"
#include "services/ui/public/interfaces/ime.mojom.h"
#include "services/ui/public/interfaces/ime/ime.mojom.h"
#include "ui/base/ime/composition_text.h"
namespace ui {
class TextInputClient;
......@@ -25,7 +26,11 @@ class TextInputClientImpl : public ui::mojom::TextInputClient {
private:
// ui::mojom::TextInputClient:
void OnCompositionEvent(ui::mojom::CompositionEventPtr event) override;
void SetCompositionText(const ui::CompositionText& composition) override;
void ConfirmCompositionText() override;
void ClearCompositionText() override;
void InsertText(const std::string& text) override;
void InsertChar(std::unique_ptr<ui::Event> event) override;
ui::TextInputClient* text_input_client_;
mojo::Binding<ui::mojom::TextInputClient> binding_;
......
......@@ -121,6 +121,7 @@ component("ime") {
public_deps = [
":text_input_types",
"//skia",
]
if (!use_aura || (!is_linux && !use_ozone)) {
......
......@@ -8,7 +8,7 @@
#include "services/ui/public/cpp/window.h"
#include "services/ui/public/interfaces/constants.mojom.h"
#include "services/ui/public/interfaces/ime.mojom.h"
#include "services/ui/public/interfaces/ime/ime.mojom.h"
#include "ui/base/ime/text_input_client.h"
#include "ui/events/event.h"
#include "ui/platform_window/mojo/ime_type_converters.h"
......
......@@ -8,7 +8,7 @@
#include "base/macros.h"
#include "mojo/public/cpp/bindings/strong_binding.h"
#include "services/service_manager/public/cpp/connector.h"
#include "services/ui/public/interfaces/ime.mojom.h"
#include "services/ui/public/interfaces/ime/ime.mojom.h"
#include "ui/base/ime/input_method_base.h"
#include "ui/views/mus/mus_export.h"
......
......@@ -4,6 +4,7 @@
#include "ui/views/mus/text_input_client_impl.h"
#include "base/strings/utf_string_conversions.h"
#include "ui/base/ime/text_input_client.h"
#include "ui/views/mus/input_method_mus.h"
......@@ -18,29 +19,28 @@ ui::mojom::TextInputClientPtr TextInputClientImpl::CreateInterfacePtrAndBind() {
return binding_.CreateInterfacePtrAndBind();
}
void TextInputClientImpl::OnCompositionEvent(
ui::mojom::CompositionEventPtr event) {
switch (event->type) {
case ui::mojom::CompositionEventType::INSERT_CHAR: {
DCHECK((*event->key_event)->IsKeyEvent());
ui::KeyEvent* key_event = (*event->key_event)->AsKeyEvent();
DCHECK(key_event->is_char());
text_input_client_->InsertChar(*key_event);
break;
}
case ui::mojom::CompositionEventType::CONFIRM:
text_input_client_->ConfirmCompositionText();
break;
case ui::mojom::CompositionEventType::CLEAR:
text_input_client_->ClearCompositionText();
break;
case ui::mojom::CompositionEventType::UPDATE:
case ui::mojom::CompositionEventType::INSERT_TEXT:
// TODO(moshayedi): crbug.com/631524. Implement these types of composition
// events once we have the necessary fields in ui.mojom.CompositionEvent.
NOTIMPLEMENTED();
break;
}
void TextInputClientImpl::SetCompositionText(
const ui::CompositionText& composition) {
text_input_client_->SetCompositionText(composition);
}
void TextInputClientImpl::ConfirmCompositionText() {
text_input_client_->ConfirmCompositionText();
}
void TextInputClientImpl::ClearCompositionText() {
text_input_client_->ClearCompositionText();
}
void TextInputClientImpl::InsertText(const std::string& text) {
text_input_client_->InsertText(base::UTF8ToUTF16(text));
}
void TextInputClientImpl::InsertChar(std::unique_ptr<ui::Event> event) {
DCHECK(event->IsKeyEvent());
ui::KeyEvent* key_event = event->AsKeyEvent();
DCHECK(key_event->is_char());
text_input_client_->InsertChar(*key_event);
}
} // namespace views
......@@ -6,7 +6,8 @@
#define UI_VIEWS_MUS_TEXT_INPUT_CLIENT_IMPL_H_
#include "mojo/public/cpp/bindings/binding.h"
#include "services/ui/public/interfaces/ime.mojom.h"
#include "services/ui/public/interfaces/ime/ime.mojom.h"
#include "ui/base/ime/composition_text.h"
namespace ui {
class TextInputClient;
......@@ -25,7 +26,11 @@ class TextInputClientImpl : public ui::mojom::TextInputClient {
private:
// ui::mojom::TextInputClient:
void OnCompositionEvent(ui::mojom::CompositionEventPtr event) override;
void SetCompositionText(const ui::CompositionText& composition) override;
void ConfirmCompositionText() override;
void ClearCompositionText() override;
void InsertText(const std::string& text) override;
void InsertChar(std::unique_ptr<ui::Event> event) override;
ui::TextInputClient* text_input_client_;
mojo::Binding<ui::mojom::TextInputClient> binding_;
......
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