summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@gmail.com>2021-10-22 15:05:29 +0000
committerEmmanuele Bassi <ebassi@gmail.com>2021-10-22 15:05:29 +0000
commit82c0654f769b678cbeea77d3fb0fa1a102141a77 (patch)
treed2a51ee327c854b21434bf66d53c3e24fa5ce0b5
parent1d387b5d45ce815b45edec61669b327bd640f346 (diff)
parentbd7b8e87c12cb0fee8a5ccf073e116063e4019ba (diff)
downloadgtk+-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.c30
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");
}