From 8b74d6673a79afd4b70c49c16b63fc8e1699218e Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 6 May 2020 10:42:57 +1000 Subject: Fix num-pad access on wayland Always interpret keypad keys as if numpad is enabled, this matches other platforms. Also add missing quote key. --- intern/ghost/intern/GHOST_SystemWayland.cpp | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) (limited to 'intern') diff --git a/intern/ghost/intern/GHOST_SystemWayland.cpp b/intern/ghost/intern/GHOST_SystemWayland.cpp index d0c29efad16..1ec63a0a41b 100644 --- a/intern/ghost/intern/GHOST_SystemWayland.cpp +++ b/intern/ghost/intern/GHOST_SystemWayland.cpp @@ -265,6 +265,7 @@ static GHOST_TKey xkb_map_gkey(const xkb_keysym_t &sym) GXMAP(gkey, XKB_KEY_Escape, GHOST_kKeyEsc); GXMAP(gkey, XKB_KEY_space, GHOST_kKeySpace); + GXMAP(gkey, XKB_KEY_apostrophe, GHOST_kKeyQuote); GXMAP(gkey, XKB_KEY_comma, GHOST_kKeyComma); GXMAP(gkey, XKB_KEY_minus, GHOST_kKeyMinus); GXMAP(gkey, XKB_KEY_plus, GHOST_kKeyPlus); @@ -294,29 +295,19 @@ static GHOST_TKey xkb_map_gkey(const xkb_keysym_t &sym) GXMAP(gkey, XKB_KEY_Scroll_Lock, GHOST_kKeyScrollLock); GXMAP(gkey, XKB_KEY_Left, GHOST_kKeyLeftArrow); - GXMAP(gkey, XKB_KEY_KP_Left, GHOST_kKeyLeftArrow); GXMAP(gkey, XKB_KEY_Right, GHOST_kKeyRightArrow); - GXMAP(gkey, XKB_KEY_KP_Right, GHOST_kKeyRightArrow); GXMAP(gkey, XKB_KEY_Up, GHOST_kKeyUpArrow); - GXMAP(gkey, XKB_KEY_KP_Up, GHOST_kKeyUpArrow); GXMAP(gkey, XKB_KEY_Down, GHOST_kKeyDownArrow); - GXMAP(gkey, XKB_KEY_KP_Down, GHOST_kKeyDownArrow); GXMAP(gkey, XKB_KEY_Print, GHOST_kKeyPrintScreen); GXMAP(gkey, XKB_KEY_Pause, GHOST_kKeyPause); GXMAP(gkey, XKB_KEY_Insert, GHOST_kKeyInsert); - GXMAP(gkey, XKB_KEY_KP_Insert, GHOST_kKeyInsert); GXMAP(gkey, XKB_KEY_Delete, GHOST_kKeyDelete); - GXMAP(gkey, XKB_KEY_KP_Delete, GHOST_kKeyDelete); GXMAP(gkey, XKB_KEY_Home, GHOST_kKeyHome); - GXMAP(gkey, XKB_KEY_KP_Home, GHOST_kKeyHome); GXMAP(gkey, XKB_KEY_End, GHOST_kKeyEnd); - GXMAP(gkey, XKB_KEY_KP_End, GHOST_kKeyEnd); GXMAP(gkey, XKB_KEY_Page_Up, GHOST_kKeyUpPage); - GXMAP(gkey, XKB_KEY_KP_Page_Up, GHOST_kKeyUpPage); GXMAP(gkey, XKB_KEY_Page_Down, GHOST_kKeyDownPage); - GXMAP(gkey, XKB_KEY_KP_Page_Down, GHOST_kKeyDownPage); GXMAP(gkey, XKB_KEY_KP_Decimal, GHOST_kKeyNumpadPeriod); GXMAP(gkey, XKB_KEY_KP_Enter, GHOST_kKeyNumpadEnter); @@ -951,7 +942,19 @@ static xkb_keysym_t xkb_state_key_get_one_sym_without_modifiers(struct xkb_state xkb_keycode_t key) { /* Use an empty keyboard state to access key symbol without modifiers. */ - struct xkb_state *xkb_state_empty = xkb_state_new(xkb_state_get_keymap(xkb_state)); + xkb_state_get_keymap(xkb_state); + struct xkb_keymap *keymap = xkb_state_get_keymap(xkb_state); + struct xkb_state *xkb_state_empty = xkb_state_new(keymap); + + /* Enable number-lock. */ + { + const xkb_mod_index_t mod2 = xkb_keymap_mod_get_index(keymap, XKB_MOD_NAME_NUM); + const xkb_mod_index_t num = xkb_keymap_mod_get_index(keymap, "NumLock"); + if (num != XKB_MOD_INVALID && mod2 != XKB_MOD_INVALID) { + xkb_state_update_mask(xkb_state_empty, (1 << mod2), 0, (1 << num), 0, 0, 0); + } + } + const xkb_keysym_t sym = xkb_state_key_get_one_sym(xkb_state_empty, key); xkb_state_unref(xkb_state_empty); return sym; -- cgit v1.2.3