Modified: trunk/Tools/WebKitTestRunner/wpe/EventSenderProxyWPE.cpp (234541 => 234542)
--- trunk/Tools/WebKitTestRunner/wpe/EventSenderProxyWPE.cpp 2018-08-03 09:38:18 UTC (rev 234541)
+++ trunk/Tools/WebKitTestRunner/wpe/EventSenderProxyWPE.cpp 2018-08-03 10:07:55 UTC (rev 234542)
@@ -296,11 +296,14 @@
{
uint32_t modifiers = wkEventModifiersToWPE(wkModifiers);
uint32_t keySym = wpeKeySymForKeyRef(keyRef, location, &modifiers);
- // FIXME: we don't have a way to get hardware key code in WPE.
- struct wpe_input_keyboard_event event { static_cast<uint32_t>(m_time), keySym, 0, true, modifiers};
+ struct wpe_input_xkb_keymap_entry* entries;
+ uint32_t entriesCount;
+ wpe_input_xkb_context_get_entries_for_key_code(wpe_input_xkb_context_get_default(), keySym, &entries, &entriesCount);
+ struct wpe_input_keyboard_event event { static_cast<uint32_t>(m_time), keySym, entriesCount ? entries[0].hardware_key_code : 0, true, modifiers};
wpe_view_backend_dispatch_keyboard_event(m_viewBackend, &event);
event.pressed = false;
wpe_view_backend_dispatch_keyboard_event(m_viewBackend, &event);
+ free(entries);
}
void EventSenderProxy::addTouchPoint(int x, int y)
Modified: trunk/Tools/wpe/backends/WindowViewBackend.cpp (234541 => 234542)
--- trunk/Tools/wpe/backends/WindowViewBackend.cpp 2018-08-03 09:38:18 UTC (rev 234541)
+++ trunk/Tools/wpe/backends/WindowViewBackend.cpp 2018-08-03 10:07:55 UTC (rev 234542)
@@ -217,9 +217,8 @@
const struct wl_keyboard_listener WindowViewBackend::s_keyboardListener = {
// keymap
- [](void* data, struct wl_keyboard*, uint32_t format, int fd, uint32_t size)
+ [](void*, struct wl_keyboard*, uint32_t format, int fd, uint32_t size)
{
- auto& window = *static_cast<WindowViewBackend*>(data);
if (format != WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1) {
close(fd);
return;
@@ -231,22 +230,14 @@
return;
}
- auto& xkb = window.m_seatData.xkb;
- xkb.keymap = xkb_keymap_new_from_string(xkb.context, static_cast<char*>(mapping),
+ auto* xkb = wpe_input_xkb_context_get_default();
+ auto* keymap = xkb_keymap_new_from_string(wpe_input_xkb_context_get_context(xkb), static_cast<char*>(mapping),
XKB_KEYMAP_FORMAT_TEXT_V1, XKB_KEYMAP_COMPILE_NO_FLAGS);
munmap(mapping, size);
close(fd);
- if (!xkb.keymap)
- return;
-
- xkb.state = xkb_state_new(xkb.keymap);
- if (!xkb.state)
- return;
-
- xkb.indexes.control = xkb_keymap_mod_get_index(xkb.keymap, XKB_MOD_NAME_CTRL);
- xkb.indexes.alt = xkb_keymap_mod_get_index(xkb.keymap, XKB_MOD_NAME_ALT);
- xkb.indexes.shift = xkb_keymap_mod_get_index(xkb.keymap, XKB_MOD_NAME_SHIFT);
+ wpe_input_xkb_context_set_keymap(xkb, keymap);
+ xkb_keymap_unref(keymap);
},
// enter
[](void* data, struct wl_keyboard*, uint32_t /*serial*/, struct wl_surface* surface, struct wl_array*)
@@ -276,6 +267,8 @@
if (!seatData.repeatInfo.rate)
return;
+ auto* keymap = wpe_input_xkb_context_get_keymap(wpe_input_xkb_context_get_default());
+
if (state == WL_KEYBOARD_KEY_STATE_RELEASED
&& seatData.repeatData.key == key) {
if (seatData.repeatData.eventSource)
@@ -282,7 +275,7 @@
g_source_remove(seatData.repeatData.eventSource);
seatData.repeatData = { 0, 0, 0, 0 };
} else if (state == WL_KEYBOARD_KEY_STATE_PRESSED
- && xkb_keymap_key_repeats(seatData.xkb.keymap, key)) {
+ && keymap && xkb_keymap_key_repeats(keymap, key)) {
if (seatData.repeatData.eventSource)
g_source_remove(seatData.repeatData.eventSource);
@@ -305,19 +298,8 @@
// modifiers
[](void* data, struct wl_keyboard*, uint32_t /*serial*/, uint32_t depressedMods, uint32_t latchedMods, uint32_t lockedMods, uint32_t group)
{
- auto& xkb = static_cast<WindowViewBackend*>(data)->m_seatData.xkb;
-
- xkb_state_update_mask(xkb.state, depressedMods, latchedMods, lockedMods, 0, 0, group);
-
- auto& modifiers = xkb.modifiers;
- modifiers = 0;
- auto component = static_cast<xkb_state_component>(XKB_STATE_MODS_DEPRESSED | XKB_STATE_MODS_LATCHED);
- if (xkb_state_mod_index_is_active(xkb.state, xkb.indexes.control, component))
- modifiers |= wpe_input_keyboard_modifier_control;
- if (xkb_state_mod_index_is_active(xkb.state, xkb.indexes.alt, component))
- modifiers |= wpe_input_keyboard_modifier_alt;
- if (xkb_state_mod_index_is_active(xkb.state, xkb.indexes.shift, component))
- modifiers |= wpe_input_keyboard_modifier_shift;
+ auto& keyboard = static_cast<WindowViewBackend*>(data)->m_seatData.keyboard;
+ keyboard.modifiers = wpe_input_xkb_context_get_modifiers(wpe_input_xkb_context_get_default(), depressedMods, latchedMods, lockedMods, group);
},
// repeat_info
[](void* data, struct wl_keyboard*, int32_t rate, int32_t delay)
@@ -481,11 +463,6 @@
if (m_seat)
wl_seat_add_listener(m_seat, &s_seatListener, this);
-
- m_seatData.xkb.context = xkb_context_new(XKB_CONTEXT_NO_FLAGS);
- m_seatData.xkb.composeTable = xkb_compose_table_new_from_locale(m_seatData.xkb.context, setlocale(LC_CTYPE, nullptr), XKB_COMPOSE_COMPILE_NO_FLAGS);
- if (m_seatData.xkb.composeTable)
- m_seatData.xkb.composeState = xkb_compose_state_new(m_seatData.xkb.composeTable, XKB_COMPOSE_STATE_NO_FLAGS);
}
m_eventSource = g_source_new(&EventSource::sourceFuncs, sizeof(EventSource));
@@ -677,16 +654,10 @@
void WindowViewBackend::handleKeyEvent(uint32_t key, uint32_t state, uint32_t time)
{
- auto& xkb = m_seatData.xkb;
- uint32_t keysym = xkb_state_key_get_one_sym(xkb.state, key);
+ uint32_t keysym = wpe_input_xkb_context_get_key_code(wpe_input_xkb_context_get_default(), key, state == WL_KEYBOARD_KEY_STATE_PRESSED);
+ if (!keysym)
+ return;
- if (xkb.composeState
- && state == WL_KEYBOARD_KEY_STATE_PRESSED
- && xkb_compose_state_feed(xkb.composeState, keysym) == XKB_COMPOSE_FEED_ACCEPTED
- && xkb_compose_state_get_status(xkb.composeState) == XKB_COMPOSE_COMPOSED) {
- keysym = xkb_compose_state_get_one_sym(xkb.composeState);
- }
-
if (m_seatData.keyboard.target) {
struct wpe_input_keyboard_event event = { time, keysym, key, !!state, modifiers() };
dispatchInputKeyboardEvent(&event);
@@ -695,7 +666,7 @@
uint32_t WindowViewBackend::modifiers() const
{
- uint32_t mask = m_seatData.xkb.modifiers;
+ uint32_t mask = m_seatData.keyboard.modifiers;
if (m_seatData.pointer.object)
mask |= m_seatData.pointer.modifiers;
return mask;