| Index: mojo/services/public/cpp/input_events/lib/input_events_type_converters.cc
|
| diff --git a/mojo/services/public/cpp/input_events/lib/input_events_type_converters.cc b/mojo/services/public/cpp/input_events/lib/input_events_type_converters.cc
|
| index d7ae1f03ff456b8c419fbd67f9278b92b0f85281..dfa280e2eee097f318da90aa6195af2d4ac5c3b2 100644
|
| --- a/mojo/services/public/cpp/input_events/lib/input_events_type_converters.cc
|
| +++ b/mojo/services/public/cpp/input_events/lib/input_events_type_converters.cc
|
| @@ -4,6 +4,11 @@
|
|
|
| #include "mojo/services/public/cpp/input_events/input_events_type_converters.h"
|
|
|
| +#if defined(USE_X11)
|
| +#include <X11/extensions/XInput2.h>
|
| +#include <X11/Xlib.h>
|
| +#endif
|
| +
|
| #include "mojo/services/public/cpp/geometry/geometry_type_converters.h"
|
| #include "mojo/services/public/interfaces/input_events/input_events.mojom.h"
|
| #include "ui/events/event_utils.h"
|
| @@ -87,6 +92,35 @@ ui::EventType TypeConverter<EventType, ui::EventType>::ConvertTo(
|
| return ui::ET_UNKNOWN;
|
| }
|
|
|
| +class MojoExtendedKeyEventData : public ui::ExtendedKeyEventData {
|
| + public:
|
| + MojoExtendedKeyEventData(int32_t windows_key_code,
|
| + uint16_t text,
|
| + uint16_t unmodified_text)
|
| + : windows_key_code_(windows_key_code),
|
| + text_(text),
|
| + unmodified_text_(unmodified_text) {
|
| + }
|
| + virtual ~MojoExtendedKeyEventData() {}
|
| +
|
| + int32_t windows_key_code() const { return windows_key_code_; }
|
| + uint16_t text() const { return text_; }
|
| + uint16_t unmodified_text() const { return unmodified_text_; }
|
| +
|
| + // ui::ExtendedKeyEventData:
|
| + virtual ExtendedKeyEventData* Clone() const OVERRIDE {
|
| + return new MojoExtendedKeyEventData(windows_key_code_,
|
| + text_,
|
| + unmodified_text_);
|
| + }
|
| +
|
| + private:
|
| + const int32_t windows_key_code_;
|
| + const uint16_t text_;
|
| + const uint16_t unmodified_text_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(MojoExtendedKeyEventData);
|
| +};
|
|
|
| // static
|
| EventPtr TypeConverter<EventPtr, ui::Event>::ConvertFrom(
|
| @@ -125,6 +159,27 @@ EventPtr TypeConverter<EventPtr, ui::Event>::ConvertFrom(
|
| KeyDataPtr key_data(KeyData::New());
|
| key_data->key_code = key_event->key_code();
|
| key_data->is_char = key_event->is_char();
|
| + key_data->native_key_code = key_event->platform_keycode();
|
| +
|
| + if (key_event->HasNativeEvent()) {
|
| + key_data->windows_key_code = static_cast<mojo::KeyboardCode>(
|
| + ui::WindowsKeycodeFromNative(key_event->native_event()));
|
| + key_data->text = ui::TextFromNative(key_event->native_event());
|
| + key_data->unmodified_text =
|
| + ui::UnmodifiedTextFromNative(key_event->native_event());
|
| + } else if (key_event->extended_key_event_data()) {
|
| + const MojoExtendedKeyEventData* data =
|
| + static_cast<const MojoExtendedKeyEventData*>(
|
| + key_event->extended_key_event_data());
|
| + key_data->windows_key_code = static_cast<mojo::KeyboardCode>(
|
| + data->windows_key_code());
|
| + key_data->text = data->text();
|
| + key_data->unmodified_text = data->unmodified_text();
|
| + } else {
|
| + NOTREACHED() << "Synthesized event which never contained a native event "
|
| + "passed to mojo::TypeConverter.";
|
| + }
|
| +
|
| event->key_data = key_data.Pass();
|
| } else if (input.IsMouseWheelEvent()) {
|
| const ui::MouseWheelEvent* wheel_event =
|
| @@ -160,21 +215,30 @@ TypeConverter<EventPtr, scoped_ptr<ui::Event> >::ConvertTo(
|
|
|
| switch (input->action) {
|
| case ui::ET_KEY_PRESSED:
|
| - case ui::ET_KEY_RELEASED:
|
| + case ui::ET_KEY_RELEASED: {
|
| + scoped_ptr<ui::KeyEvent> key_event;
|
| if (input->key_data->is_char) {
|
| - ui_event.reset(new ui::KeyEvent(
|
| + key_event.reset(new ui::KeyEvent(
|
| static_cast<base::char16>(input->key_data->key_code),
|
| static_cast<ui::KeyboardCode>(
|
| input->key_data->key_code),
|
| input->flags));
|
| } else {
|
| - ui_event.reset(new ui::KeyEvent(
|
| + key_event.reset(new ui::KeyEvent(
|
| ui_event_type,
|
| static_cast<ui::KeyboardCode>(
|
| input->key_data->key_code),
|
| input->flags));
|
| }
|
| + key_event->SetExtendedKeyEventData(scoped_ptr<ui::ExtendedKeyEventData>(
|
| + new MojoExtendedKeyEventData(
|
| + static_cast<int32_t>(input->key_data->windows_key_code),
|
| + input->key_data->text,
|
| + input->key_data->unmodified_text)));
|
| + key_event->set_platform_keycode(input->key_data->native_key_code);
|
| + ui_event = key_event.PassAs<ui::KeyEvent>();
|
| break;
|
| + }
|
| case EVENT_TYPE_MOUSE_PRESSED:
|
| case EVENT_TYPE_MOUSE_DRAGGED:
|
| case EVENT_TYPE_MOUSE_RELEASED:
|
|
|