diff options
author | Emmanuele Bassi <ebassi@gmail.com> | 2021-10-22 15:05:29 +0000 |
---|---|---|
committer | Emmanuele Bassi <ebassi@gmail.com> | 2021-10-22 15:05:29 +0000 |
commit | 82c0654f769b678cbeea77d3fb0fa1a102141a77 (patch) | |
tree | d2a51ee327c854b21434bf66d53c3e24fa5ce0b5 | |
parent | 1d387b5d45ce815b45edec61669b327bd640f346 (diff) | |
parent | bd7b8e87c12cb0fee8a5ccf073e116063e4019ba (diff) | |
download | gtk+-82c0654f769b678cbeea77d3fb0fa1a102141a77.tar.gz |
Merge branch 'fix-mac-kana-eisu' into 'master'
Correct translation of Mac JIS Eisu & Kana keys
Closes #4117
See merge request GNOME/gtk!3782
-rw-r--r-- | gdk/macos/gdkmacoskeymap.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/gdk/macos/gdkmacoskeymap.c b/gdk/macos/gdkmacoskeymap.c index 4d54311874..5cf34d3ed3 100644 --- a/gdk/macos/gdkmacoskeymap.c +++ b/gdk/macos/gdkmacoskeymap.c @@ -141,6 +141,29 @@ const static struct { { 92, GDK_KEY_9, GDK_KEY_KP_9 } }; +/* Keys only in JIS layout. + * The rationale of these key codes is <HIToolbox/Events.h> in Carbon. + */ +const static struct { + guint keycode; + guint keyval; +} jis_keys[] = { +#if 0 + /* Although These keys are also defined in <HIToolbox/Events.h>, they can be + * translated by UCKeyTranslate correctly. + */ + { 0x5D, GDK_KEY_yen }, + { 0x5E, GDK_KEY_underscore }, + { 0x5F, GDK_KEY_comma }, +#endif + /* These keys are unexpectedly translated to Space key by UCKeyTranslate, + * and there is no suitable ucs value for them to add to special_ucs_table. + * So we should translate them particularly. + */ + { 0x66 /* 102 */, GDK_KEY_Eisu_toggle }, + { 0x68 /* 104 */, GDK_KEY_Hiragana } +}; + /* These values aren't covered by gdk_unicode_to_keyval */ const static struct { gunichar ucs_value; @@ -346,6 +369,13 @@ gdk_macos_keymap_update (GdkMacosKeymap *self) if (p[0] == known_numeric_keys[i].normal_keyval) p[0] = known_numeric_keys[i].keypad_keyval; } + + for (i = 0; i < G_N_ELEMENTS (jis_keys); i++) + { + p = keyval_array + jis_keys[i].keycode * KEYVALS_PER_KEYCODE; + p[0] = jis_keys[i].keyval; + p[1] = p[2] = p[3] = 0; + } g_signal_emit_by_name (self, "keys-changed"); } |