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)
#if defined(USE_X11)
NormalizeFlags();
key_ = GetDomKeyFromXEvent(native_event);
SetProperties(GetKeyEventPropertiesFromXKeyEvent(native_event->xkey));
#endif
#if defined(OS_WIN)
#elif defined(OS_WIN)
// Only Windows has native character events.
if (is_char_) {
key_ = DomKey::FromCharacter(static_cast<int32_t>(native_event.wParam));
......@@ -1006,11 +1006,6 @@ void KeyEvent::ApplyLayout() const {
// Native Windows character events always have is_char_ == true,
// so this is a synthetic or native keystroke event.
// Therefore, perform only the fallback action.
#elif defined(USE_X11)
if (native_event()) {
key_ = GetDomKeyFromXEvent(native_event());
return;
}
#elif defined(USE_OZONE)
if (KeyboardLayoutEngineManager::GetKeyboardLayoutEngine()->Lookup(
code, flags(), &key_, &dummy_key_code)) {
......
......@@ -38,6 +38,20 @@ Event::Properties GetEventPropertiesFromXKeyEvent(const XKeyEvent& xev) {
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,
const XEvent& xev) {
std::unique_ptr<TouchEvent> event = std::make_unique<TouchEvent>(
......@@ -57,10 +71,11 @@ std::unique_ptr<ui::Event> TranslateXI2EventToEvent(const XEvent& xev) {
EventType event_type = EventTypeFromXEvent(xev);
switch (event_type) {
case ET_KEY_PRESSED:
case ET_KEY_RELEASED:
return std::make_unique<KeyEvent>(event_type,
KeyboardCodeFromXKeyEvent(&xev),
EventFlagsFromXEvent(xev));
case ET_KEY_RELEASED: {
XEvent xkeyevent = {0};
InitXKeyEventFromXIDeviceEvent(xev, &xkeyevent);
return CreateKeyEvent(xkeyevent);
}
case ET_MOUSE_PRESSED:
case ET_MOUSE_MOVED:
case ET_MOUSE_DRAGGED:
......@@ -124,13 +139,8 @@ std::unique_ptr<ui::Event> TranslateXEventToEvent(const XEvent& xev) {
EventTimeFromXEvent(xev), flags, 0);
case KeyPress:
case KeyRelease: {
auto key_event = std::make_unique<KeyEvent>(
EventTypeFromXEvent(xev), KeyboardCodeFromXKeyEvent(&xev), flags);
// Attach keyboard group to |key_event|'s properties
key_event->SetProperties(GetEventPropertiesFromXKeyEvent(xev.xkey));
return key_event;
}
case KeyRelease:
return CreateKeyEvent(xev);
case ButtonPress:
case ButtonRelease: {
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