Changeset 234542 in webkit
- Timestamp:
- Aug 3, 2018 3:07:55 AM (6 years ago)
- Location:
- trunk/Tools
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Tools/ChangeLog
r234541 r234542 1 2018-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 1 17 2018-08-03 Carlos Garcia Campos <cgarcia@igalia.com> 2 18 -
trunk/Tools/WebKitTestRunner/wpe/EventSenderProxyWPE.cpp
r234541 r234542 297 297 uint32_t modifiers = wkEventModifiersToWPE(wkModifiers); 298 298 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}; 301 303 wpe_view_backend_dispatch_keyboard_event(m_viewBackend, &event); 302 304 event.pressed = false; 303 305 wpe_view_backend_dispatch_keyboard_event(m_viewBackend, &event); 306 free(entries); 304 307 } 305 308 -
trunk/Tools/wpe/backends/WindowViewBackend.cpp
r234541 r234542 218 218 const struct wl_keyboard_listener WindowViewBackend::s_keyboardListener = { 219 219 // 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 { 223 222 if (format != WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1) { 224 223 close(fd); … … 232 231 } 233 232 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), 236 235 XKB_KEYMAP_FORMAT_TEXT_V1, XKB_KEYMAP_COMPILE_NO_FLAGS); 237 236 munmap(mapping, size); 238 237 close(fd); 239 238 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); 250 241 }, 251 242 // enter … … 276 267 if (!seatData.repeatInfo.rate) 277 268 return; 269 270 auto* keymap = wpe_input_xkb_context_get_keymap(wpe_input_xkb_context_get_default()); 278 271 279 272 if (state == WL_KEYBOARD_KEY_STATE_RELEASED … … 283 276 seatData.repeatData = { 0, 0, 0, 0 }; 284 277 } 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)) { 286 279 287 280 if (seatData.repeatData.eventSource) … … 306 299 [](void* data, struct wl_keyboard*, uint32_t /*serial*/, uint32_t depressedMods, uint32_t latchedMods, uint32_t lockedMods, uint32_t group) 307 300 { 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); 321 303 }, 322 304 // repeat_info … … 482 464 if (m_seat) 483 465 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);489 466 } 490 467 … … 678 655 void WindowViewBackend::handleKeyEvent(uint32_t key, uint32_t state, uint32_t time) 679 656 { 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; 689 660 690 661 if (m_seatData.keyboard.target) { … … 696 667 uint32_t WindowViewBackend::modifiers() const 697 668 { 698 uint32_t mask = m_seatData. xkb.modifiers;669 uint32_t mask = m_seatData.keyboard.modifiers; 699 670 if (m_seatData.pointer.object) 700 671 mask |= m_seatData.pointer.modifiers; -
trunk/Tools/wpe/backends/WindowViewBackend.h
r234541 r234542 30 30 #include <glib.h> 31 31 #include <unordered_map> 32 #include <xkbcommon/xkbcommon.h>33 #include <xkbcommon/xkbcommon-compose.h>34 32 35 33 typedef void* EGLImageKHR; … … 73 71 struct wl_keyboard* object { nullptr }; 74 72 struct wl_surface* target { nullptr }; 73 uint32_t modifiers { 0 }; 75 74 } keyboard; 76 75 … … 80 79 bool tracking { false }; 81 80 } 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;96 81 97 82 struct {
Note: See TracChangeset
for help on using the changeset viewer.