Commit 5ab84908 authored by Nick Diego Yamane's avatar Nick Diego Yamane Committed by Commit Bot

x11, ozone: Extract DomKey at key event construction

So far, KeyEvent's DomKey extraction used to happen lazily at
GetDomKey()/GetCharacter() calls. Such approach assumes native_event()
is available and holds the underlying XEvent instance so it is able to
extract event info straight out of it.

Document [1] details the effort to eliminate native event usage outside
platform code so that it is possible to migrate Aura/X11's PlatformEvent
away from XEvent* to ui::Event instead (part of broader X11 migration to
Ozone). This issue addressed in this CL is one those remaining cases
listed in doc [1].

CL modifies it to extract DomKey value at KeyEvent construction as it is
done in most Ozone backends (e.g: ozone/evdev). Additionally this
modifies X11EventSourceDefault, currently used by Ozone/X11, to do the
same.

[1] https://docs.google.com/document/d/1Neh2p6f8pew9SPuEAtnJMafozAY7uhAIfhwd43CLETc

Bug: 987939
Change-Id: I9dddad2359b1c345fcb98dabce4506c677269b94
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1813417
Commit-Queue: Nick Yamane <nickdiego@igalia.com>
Reviewed-by: default avatarSadrul Chowdhury <sadrul@chromium.org>
Cr-Commit-Position: refs/heads/master@{#698675}
parent 6f4efdad
...@@ -908,9 +908,9 @@ KeyEvent::KeyEvent(const PlatformEvent& native_event, int event_flags) ...@@ -908,9 +908,9 @@ KeyEvent::KeyEvent(const PlatformEvent& native_event, int event_flags)
#if defined(USE_X11) #if defined(USE_X11)
NormalizeFlags(); NormalizeFlags();
key_ = GetDomKeyFromXEvent(native_event);
SetProperties(GetKeyEventPropertiesFromXKeyEvent(native_event->xkey)); SetProperties(GetKeyEventPropertiesFromXKeyEvent(native_event->xkey));
#endif #elif defined(OS_WIN)
#if defined(OS_WIN)
// Only Windows has native character events. // Only Windows has native character events.
if (is_char_) { if (is_char_) {
key_ = DomKey::FromCharacter(static_cast<int32_t>(native_event.wParam)); key_ = DomKey::FromCharacter(static_cast<int32_t>(native_event.wParam));
...@@ -1006,11 +1006,6 @@ void KeyEvent::ApplyLayout() const { ...@@ -1006,11 +1006,6 @@ void KeyEvent::ApplyLayout() const {
// Native Windows character events always have is_char_ == true, // Native Windows character events always have is_char_ == true,
// so this is a synthetic or native keystroke event. // so this is a synthetic or native keystroke event.
// Therefore, perform only the fallback action. // Therefore, perform only the fallback action.
#elif defined(USE_X11)
if (native_event()) {
key_ = GetDomKeyFromXEvent(native_event());
return;
}
#elif defined(USE_OZONE) #elif defined(USE_OZONE)
if (KeyboardLayoutEngineManager::GetKeyboardLayoutEngine()->Lookup( if (KeyboardLayoutEngineManager::GetKeyboardLayoutEngine()->Lookup(
code, flags(), &key_, &dummy_key_code)) { code, flags(), &key_, &dummy_key_code)) {
......
...@@ -38,6 +38,20 @@ Event::Properties GetEventPropertiesFromXKeyEvent(const XKeyEvent& xev) { ...@@ -38,6 +38,20 @@ Event::Properties GetEventPropertiesFromXKeyEvent(const XKeyEvent& xev) {
return properties; return properties;
} }
std::unique_ptr<KeyEvent> CreateKeyEvent(const XEvent& xev) {
base::TimeTicks timestamp = EventTimeFromXEvent(xev);
ValidateEventTimeClock(&timestamp);
auto key_event = std::make_unique<KeyEvent>(
EventTypeFromXEvent(xev), KeyboardCodeFromXKeyEvent(&xev),
CodeFromXEvent(&xev), EventFlagsFromXEvent(xev),
GetDomKeyFromXEvent(&xev), timestamp);
// Attach keyboard group to |key_event|'s properties
key_event->SetProperties(GetEventPropertiesFromXKeyEvent(xev.xkey));
return key_event;
}
std::unique_ptr<TouchEvent> CreateTouchEvent(EventType event_type, std::unique_ptr<TouchEvent> CreateTouchEvent(EventType event_type,
const XEvent& xev) { const XEvent& xev) {
std::unique_ptr<TouchEvent> event = std::make_unique<TouchEvent>( std::unique_ptr<TouchEvent> event = std::make_unique<TouchEvent>(
...@@ -57,10 +71,11 @@ std::unique_ptr<ui::Event> TranslateXI2EventToEvent(const XEvent& xev) { ...@@ -57,10 +71,11 @@ std::unique_ptr<ui::Event> TranslateXI2EventToEvent(const XEvent& xev) {
EventType event_type = EventTypeFromXEvent(xev); EventType event_type = EventTypeFromXEvent(xev);
switch (event_type) { switch (event_type) {
case ET_KEY_PRESSED: case ET_KEY_PRESSED:
case ET_KEY_RELEASED: case ET_KEY_RELEASED: {
return std::make_unique<KeyEvent>(event_type, XEvent xkeyevent = {0};
KeyboardCodeFromXKeyEvent(&xev), InitXKeyEventFromXIDeviceEvent(xev, &xkeyevent);
EventFlagsFromXEvent(xev)); return CreateKeyEvent(xkeyevent);
}
case ET_MOUSE_PRESSED: case ET_MOUSE_PRESSED:
case ET_MOUSE_MOVED: case ET_MOUSE_MOVED:
case ET_MOUSE_DRAGGED: case ET_MOUSE_DRAGGED:
...@@ -124,13 +139,8 @@ std::unique_ptr<ui::Event> TranslateXEventToEvent(const XEvent& xev) { ...@@ -124,13 +139,8 @@ std::unique_ptr<ui::Event> TranslateXEventToEvent(const XEvent& xev) {
EventTimeFromXEvent(xev), flags, 0); EventTimeFromXEvent(xev), flags, 0);
case KeyPress: case KeyPress:
case KeyRelease: { case KeyRelease:
auto key_event = std::make_unique<KeyEvent>( return CreateKeyEvent(xev);
EventTypeFromXEvent(xev), KeyboardCodeFromXKeyEvent(&xev), flags);
// Attach keyboard group to |key_event|'s properties
key_event->SetProperties(GetEventPropertiesFromXKeyEvent(xev.xkey));
return key_event;
}
case ButtonPress: case ButtonPress:
case ButtonRelease: { case ButtonRelease: {
switch (EventTypeFromXEvent(xev)) { switch (EventTypeFromXEvent(xev)) {
......
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