Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2020-05-06 03:42:57 +0300
committerCampbell Barton <ideasman42@gmail.com>2020-05-06 04:10:29 +0300
commit8b74d6673a79afd4b70c49c16b63fc8e1699218e (patch)
tree822f244e8acffaeabd585de79e3c4b3e96525e1d /intern/ghost
parent4af9578ab794b10ea6742db0dc8d528646beee07 (diff)
Fix num-pad access on wayland
Always interpret keypad keys as if numpad is enabled, this matches other platforms. Also add missing quote key.
Diffstat (limited to 'intern/ghost')
-rw-r--r--intern/ghost/intern/GHOST_SystemWayland.cpp25
1 files changed, 14 insertions, 11 deletions
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;