Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1712)

Unified Diff: mojo/services/public/cpp/input_events/lib/input_events_type_converters.cc

Issue 492863002: mojo: Plumb through sufficient context to make real blink::WebInputEvents. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: final sky nits Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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:

Powered by Google App Engine
This is Rietveld 408576698