Changeset 234542 in webkit


Ignore:
Timestamp:
Aug 3, 2018 3:07:55 AM (6 years ago)
Author:
Carlos Garcia Campos
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:
Location:
trunk/Tools
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Tools/ChangeLog

    r234541 r234542  
     12018-08-03  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [WPE] Use the new key mapper API from WPEBackend
     4        https://bugs.webkit.org/show_bug.cgi?id=188216
     5
     6        Reviewed by Žan Doberšek.
     7
     8        * WebKitTestRunner/wpe/EventSenderProxyWPE.cpp:
     9        (WTR::EventSenderProxy::keyDown): Use wpe_input_xkb_context_get_entries_for_key_code() to get the hardware key
     10        code.
     11        * wpe/backends/WindowViewBackend.cpp:
     12        (WPEToolingBackends::WindowViewBackend::WindowViewBackend):
     13        (WPEToolingBackends::WindowViewBackend::handleKeyEvent):
     14        (WPEToolingBackends::WindowViewBackend::modifiers const):
     15        * wpe/backends/WindowViewBackend.h:
     16
    1172018-08-03  Carlos Garcia Campos  <cgarcia@igalia.com>
    218
  • trunk/Tools/WebKitTestRunner/wpe/EventSenderProxyWPE.cpp

    r234541 r234542  
    297297    uint32_t modifiers = wkEventModifiersToWPE(wkModifiers);
    298298    uint32_t keySym = wpeKeySymForKeyRef(keyRef, location, &modifiers);
    299     // FIXME: we don't have a way to get hardware key code in WPE.
    300     struct wpe_input_keyboard_event event { static_cast<uint32_t>(m_time), keySym, 0, true, modifiers};
     299    struct wpe_input_xkb_keymap_entry* entries;
     300    uint32_t entriesCount;
     301    wpe_input_xkb_context_get_entries_for_key_code(wpe_input_xkb_context_get_default(), keySym, &entries, &entriesCount);
     302    struct wpe_input_keyboard_event event { static_cast<uint32_t>(m_time), keySym, entriesCount ? entries[0].hardware_key_code : 0, true, modifiers};
    301303    wpe_view_backend_dispatch_keyboard_event(m_viewBackend, &event);
    302304    event.pressed = false;
    303305    wpe_view_backend_dispatch_keyboard_event(m_viewBackend, &event);
     306    free(entries);
    304307}
    305308
  • trunk/Tools/wpe/backends/WindowViewBackend.cpp

    r234541 r234542  
    218218const struct wl_keyboard_listener WindowViewBackend::s_keyboardListener = {
    219219    // keymap
    220     [](void* data, struct wl_keyboard*, uint32_t format, int fd, uint32_t size)
    221     {
    222         auto& window = *static_cast<WindowViewBackend*>(data);
     220    [](void*, struct wl_keyboard*, uint32_t format, int fd, uint32_t size)
     221    {
    223222        if (format != WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1) {
    224223            close(fd);
     
    232231        }
    233232
    234         auto& xkb = window.m_seatData.xkb;
    235         xkb.keymap = xkb_keymap_new_from_string(xkb.context, static_cast<char*>(mapping),
     233        auto* xkb = wpe_input_xkb_context_get_default();
     234        auto* keymap = xkb_keymap_new_from_string(wpe_input_xkb_context_get_context(xkb), static_cast<char*>(mapping),
    236235            XKB_KEYMAP_FORMAT_TEXT_V1, XKB_KEYMAP_COMPILE_NO_FLAGS);
    237236        munmap(mapping, size);
    238237        close(fd);
    239238
    240         if (!xkb.keymap)
    241             return;
    242 
    243         xkb.state = xkb_state_new(xkb.keymap);
    244         if (!xkb.state)
    245             return;
    246 
    247         xkb.indexes.control = xkb_keymap_mod_get_index(xkb.keymap, XKB_MOD_NAME_CTRL);
    248         xkb.indexes.alt = xkb_keymap_mod_get_index(xkb.keymap, XKB_MOD_NAME_ALT);
    249         xkb.indexes.shift = xkb_keymap_mod_get_index(xkb.keymap, XKB_MOD_NAME_SHIFT);
     239        wpe_input_xkb_context_set_keymap(xkb, keymap);
     240        xkb_keymap_unref(keymap);
    250241    },
    251242    // enter
     
    276267        if (!seatData.repeatInfo.rate)
    277268            return;
     269
     270        auto* keymap = wpe_input_xkb_context_get_keymap(wpe_input_xkb_context_get_default());
    278271
    279272        if (state == WL_KEYBOARD_KEY_STATE_RELEASED
     
    283276            seatData.repeatData = { 0, 0, 0, 0 };
    284277        } else if (state == WL_KEYBOARD_KEY_STATE_PRESSED
    285             && xkb_keymap_key_repeats(seatData.xkb.keymap, key)) {
     278            && keymap && xkb_keymap_key_repeats(keymap, key)) {
    286279
    287280            if (seatData.repeatData.eventSource)
     
    306299    [](void* data, struct wl_keyboard*, uint32_t /*serial*/, uint32_t depressedMods, uint32_t latchedMods, uint32_t lockedMods, uint32_t group)
    307300    {
    308         auto& xkb = static_cast<WindowViewBackend*>(data)->m_seatData.xkb;
    309 
    310         xkb_state_update_mask(xkb.state, depressedMods, latchedMods, lockedMods, 0, 0, group);
    311 
    312         auto& modifiers = xkb.modifiers;
    313         modifiers = 0;
    314         auto component = static_cast<xkb_state_component>(XKB_STATE_MODS_DEPRESSED | XKB_STATE_MODS_LATCHED);
    315         if (xkb_state_mod_index_is_active(xkb.state, xkb.indexes.control, component))
    316             modifiers |= wpe_input_keyboard_modifier_control;
    317         if (xkb_state_mod_index_is_active(xkb.state, xkb.indexes.alt, component))
    318             modifiers |= wpe_input_keyboard_modifier_alt;
    319         if (xkb_state_mod_index_is_active(xkb.state, xkb.indexes.shift, component))
    320             modifiers |= wpe_input_keyboard_modifier_shift;
     301        auto& keyboard = static_cast<WindowViewBackend*>(data)->m_seatData.keyboard;
     302        keyboard.modifiers = wpe_input_xkb_context_get_modifiers(wpe_input_xkb_context_get_default(), depressedMods, latchedMods, lockedMods, group);
    321303    },
    322304    // repeat_info
     
    482464        if (m_seat)
    483465            wl_seat_add_listener(m_seat, &s_seatListener, this);
    484 
    485         m_seatData.xkb.context = xkb_context_new(XKB_CONTEXT_NO_FLAGS);
    486         m_seatData.xkb.composeTable = xkb_compose_table_new_from_locale(m_seatData.xkb.context, setlocale(LC_CTYPE, nullptr), XKB_COMPOSE_COMPILE_NO_FLAGS);
    487         if (m_seatData.xkb.composeTable)
    488             m_seatData.xkb.composeState = xkb_compose_state_new(m_seatData.xkb.composeTable, XKB_COMPOSE_STATE_NO_FLAGS);
    489466    }
    490467
     
    678655void WindowViewBackend::handleKeyEvent(uint32_t key, uint32_t state, uint32_t time)
    679656{
    680     auto& xkb = m_seatData.xkb;
    681     uint32_t keysym = xkb_state_key_get_one_sym(xkb.state, key);
    682 
    683     if (xkb.composeState
    684         && state == WL_KEYBOARD_KEY_STATE_PRESSED
    685         && xkb_compose_state_feed(xkb.composeState, keysym) == XKB_COMPOSE_FEED_ACCEPTED
    686         && xkb_compose_state_get_status(xkb.composeState) == XKB_COMPOSE_COMPOSED) {
    687         keysym = xkb_compose_state_get_one_sym(xkb.composeState);
    688     }
     657    uint32_t keysym = wpe_input_xkb_context_get_key_code(wpe_input_xkb_context_get_default(), key, state == WL_KEYBOARD_KEY_STATE_PRESSED);
     658    if (!keysym)
     659        return;
    689660
    690661    if (m_seatData.keyboard.target) {
     
    696667uint32_t WindowViewBackend::modifiers() const
    697668{
    698     uint32_t mask = m_seatData.xkb.modifiers;
     669    uint32_t mask = m_seatData.keyboard.modifiers;
    699670    if (m_seatData.pointer.object)
    700671        mask |= m_seatData.pointer.modifiers;
  • trunk/Tools/wpe/backends/WindowViewBackend.h

    r234541 r234542  
    3030#include <glib.h>
    3131#include <unordered_map>
    32 #include <xkbcommon/xkbcommon.h>
    33 #include <xkbcommon/xkbcommon-compose.h>
    3432
    3533typedef void* EGLImageKHR;
     
    7371            struct wl_keyboard* object { nullptr };
    7472            struct wl_surface* target { nullptr };
     73            uint32_t modifiers { 0 };
    7574        } keyboard;
    7675
     
    8079            bool tracking { false };
    8180        } touch;
    82 
    83         struct {
    84             struct xkb_context* context { nullptr };
    85             struct xkb_keymap* keymap { nullptr };
    86             struct xkb_state* state { nullptr };
    87             struct {
    88                 xkb_mod_index_t control { 0 };
    89                 xkb_mod_index_t alt { 0 };
    90                 xkb_mod_index_t shift { 0 };
    91             } indexes;
    92             uint32_t modifiers { 0 };
    93             struct xkb_compose_table* composeTable { nullptr };
    94             struct xkb_compose_state* composeState { nullptr };
    95         } xkb;
    9681
    9782        struct {
Note: See TracChangeset for help on using the changeset viewer.