Title: [234542] trunk/Tools
Revision
234542
Author
[email protected]
Date
2018-08-03 03:07:55 -0700 (Fri, 03 Aug 2018)

Log Message

[WPE] Use the new key mapper API from WPEBackend
https://bugs.webkit.org/show_bug.cgi?id=188216

Reviewed by Žan Doberšek.

* WebKitTestRunner/wpe/EventSenderProxyWPE.cpp:
(WTR::EventSenderProxy::keyDown): Use wpe_input_xkb_context_get_entries_for_key_code() to get the hardware key
code.
* wpe/backends/WindowViewBackend.cpp:
(WPEToolingBackends::WindowViewBackend::WindowViewBackend):
(WPEToolingBackends::WindowViewBackend::handleKeyEvent):
(WPEToolingBackends::WindowViewBackend::modifiers const):
* wpe/backends/WindowViewBackend.h:

Modified Paths

Diff

Modified: trunk/Tools/ChangeLog (234541 => 234542)


--- trunk/Tools/ChangeLog	2018-08-03 09:38:18 UTC (rev 234541)
+++ trunk/Tools/ChangeLog	2018-08-03 10:07:55 UTC (rev 234542)
@@ -1,5 +1,21 @@
 2018-08-03  Carlos Garcia Campos  <[email protected]>
 
+        [WPE] Use the new key mapper API from WPEBackend
+        https://bugs.webkit.org/show_bug.cgi?id=188216
+
+        Reviewed by Žan Doberšek.
+
+        * WebKitTestRunner/wpe/EventSenderProxyWPE.cpp:
+        (WTR::EventSenderProxy::keyDown): Use wpe_input_xkb_context_get_entries_for_key_code() to get the hardware key
+        code.
+        * wpe/backends/WindowViewBackend.cpp:
+        (WPEToolingBackends::WindowViewBackend::WindowViewBackend):
+        (WPEToolingBackends::WindowViewBackend::handleKeyEvent):
+        (WPEToolingBackends::WindowViewBackend::modifiers const):
+        * wpe/backends/WindowViewBackend.h:
+
+2018-08-03  Carlos Garcia Campos  <[email protected]>
+
         [WPE] Implement MouseEvent.buttons
         https://bugs.webkit.org/show_bug.cgi?id=187998
 

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;

Modified: trunk/Tools/wpe/backends/WindowViewBackend.h (234541 => 234542)


--- trunk/Tools/wpe/backends/WindowViewBackend.h	2018-08-03 09:38:18 UTC (rev 234541)
+++ trunk/Tools/wpe/backends/WindowViewBackend.h	2018-08-03 10:07:55 UTC (rev 234542)
@@ -29,8 +29,6 @@
 #include "xdg-shell-unstable-v6-client-protocol.h"
 #include <glib.h>
 #include <unordered_map>
-#include <xkbcommon/xkbcommon.h>
-#include <xkbcommon/xkbcommon-compose.h>
 
 typedef void* EGLImageKHR;
 typedef void* EGLSurface;
@@ -72,6 +70,7 @@
         struct {
             struct wl_keyboard* object { nullptr };
             struct wl_surface* target { nullptr };
+            uint32_t modifiers { 0 };
         } keyboard;
 
         struct {
@@ -81,20 +80,6 @@
         } touch;
 
         struct {
-            struct xkb_context* context { nullptr };
-            struct xkb_keymap* keymap { nullptr };
-            struct xkb_state* state { nullptr };
-            struct {
-                xkb_mod_index_t control { 0 };
-                xkb_mod_index_t alt { 0 };
-                xkb_mod_index_t shift { 0 };
-            } indexes;
-            uint32_t modifiers { 0 };
-            struct xkb_compose_table* composeTable { nullptr };
-            struct xkb_compose_state* composeState { nullptr };
-        } xkb;
-
-        struct {
             int32_t rate { 0 };
             int32_t delay { 0 };
         } repeatInfo;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to