diff options
author | Albert Astals Cid | 2021-04-09 16:44:49 +0200 |
---|---|---|
committer | Albert Astals Cid | 2021-04-09 16:46:40 +0200 |
commit | 13609f45aa537444f449d56e73062736b7538127 (patch) | |
tree | 1ca4588573972f1f0a467eeb38a4cc452653d0ea | |
parent | ee9d5f21881975d1a08af3635bb91c428ebe4633 (diff) | |
download | aur-13609f45aa537444f449d56e73062736b7538127.tar.gz |
new gtk
This sadly reverts a lot more changes to deadkeys because they keep
changing things and they broke my patch, so i reverted them too.
-rw-r--r-- | .SRCINFO | 20 | ||||
-rw-r--r-- | 41c3e9873cf2b388d4a91fbd86c360d53b1a00da.patch | 16 | ||||
-rw-r--r-- | 58b3145c90a4681bf1ee026f58e12bfb5cafe81a.patch | 27 | ||||
-rw-r--r-- | 59397005fa8136dd73079d75b0575b00f114ce35.patch | 658 | ||||
-rw-r--r-- | 7b3c387af9e9c6c37c5751258ded6708094d4c73.patch | 51 | ||||
-rw-r--r-- | 8c7846733aa5e2bac866d8b8ac9eb4d8d1d6f527.patch | 141 | ||||
-rw-r--r-- | PKGBUILD | 29 | ||||
-rw-r--r-- | a0cdd25bd4274d6ff12162de3d416326ec0429e4.patch | 57 | ||||
-rw-r--r-- | c26525f87c885929eccf248dd8cae2a2cf28b819.patch | 199 |
9 files changed, 1191 insertions, 7 deletions
@@ -1,7 +1,7 @@ pkgbase = gtk3-no_deadkeys_underline pkgdesc = Like gtk3 in extra but with a patch to disable dead keys having an underline below them while typing - pkgver = 3.24.27 - pkgrel = 4 + pkgver = 3.24.28 + pkgrel = 1 epoch = 1 url = https://www.gtk.org/ install = gtk3.install @@ -52,12 +52,26 @@ pkgbase = gtk3-no_deadkeys_underline conflicts = gtk3-print-backends conflicts = gtk3 replaces = gtk3-print-backends<=3.22.26-1 - source = git+https://gitlab.gnome.org/GNOME/gtk.git#commit=c7df3b9e9790012e6c5fbad6a4f4519bcf75561f + source = git+https://gitlab.gnome.org/GNOME/gtk.git#commit=23db3508899f8304482b68e04a181bb081549081 source = gtk-query-immodules-3.0.hook source = no_deadkeys_underline.patch + source = c26525f87c885929eccf248dd8cae2a2cf28b819.patch + source = a0cdd25bd4274d6ff12162de3d416326ec0429e4.patch + source = 7b3c387af9e9c6c37c5751258ded6708094d4c73.patch + source = 41c3e9873cf2b388d4a91fbd86c360d53b1a00da.patch + source = 59397005fa8136dd73079d75b0575b00f114ce35.patch + source = 58b3145c90a4681bf1ee026f58e12bfb5cafe81a.patch + source = 8c7846733aa5e2bac866d8b8ac9eb4d8d1d6f527.patch sha256sums = SKIP sha256sums = a0319b6795410f06d38de1e8695a9bf9636ff2169f40701671580e60a108e229 sha256sums = SKIP + sha256sums = SKIP + sha256sums = SKIP + sha256sums = SKIP + sha256sums = SKIP + sha256sums = SKIP + sha256sums = SKIP + sha256sums = SKIP pkgname = gtk3-no_deadkeys_underline diff --git a/41c3e9873cf2b388d4a91fbd86c360d53b1a00da.patch b/41c3e9873cf2b388d4a91fbd86c360d53b1a00da.patch new file mode 100644 index 000000000000..9ed252ed5fff --- /dev/null +++ b/41c3e9873cf2b388d4a91fbd86c360d53b1a00da.patch @@ -0,0 +1,16 @@ +commit 41c3e9873cf2b388d4a91fbd86c360d53b1a00da +Author: Matthias Clasen <mclasen@redhat.com> +Date: Sun Mar 21 20:56:17 2021 -0400 + + Move compose related tooling to a subdir + + This reduces the clutter in gtk/. + +diff --git a/gtk/compose-parse.py b/gtk/compose/compose-parse.py +similarity index 100% +rename from gtk/compose-parse.py +rename to gtk/compose/compose-parse.py +diff --git a/gtk/gtk-compose-lookaside.txt b/gtk/compose/gtk-compose-lookaside.txt +similarity index 100% +rename from gtk/gtk-compose-lookaside.txt +rename to gtk/compose/gtk-compose-lookaside.txt diff --git a/58b3145c90a4681bf1ee026f58e12bfb5cafe81a.patch b/58b3145c90a4681bf1ee026f58e12bfb5cafe81a.patch new file mode 100644 index 000000000000..f53529e5ca74 --- /dev/null +++ b/58b3145c90a4681bf1ee026f58e12bfb5cafe81a.patch @@ -0,0 +1,27 @@ +commit 58b3145c90a4681bf1ee026f58e12bfb5cafe81a +Author: Matthias Clasen <mclasen@redhat.com> +Date: Fri Mar 26 19:48:41 2021 -0400 + + composetable: Limit algorithmic checking + + Only check for combinations of up to 2 dead keys with + a base character. We don't want to spend ages generating + all permutations of long sequences. + +diff --git a/gtk/gtkcomposetable.c b/gtk/gtkcomposetable.c +index 512e35e61d..185f89fefe 100644 +--- a/gtk/gtkcomposetable.c ++++ b/gtk/gtkcomposetable.c +@@ -1190,6 +1190,12 @@ gtk_check_algorithmically (const guint16 *compose_buffer, + + for (i = 0; i < n_compose && IS_DEAD_KEY (compose_buffer[i]); i++) + ; ++ ++ /* Allow at most 2 dead keys */ ++ if (i > 2) ++ return FALSE; ++ ++ /* Can't combine if there's no base character */ + if (i == n_compose) + return TRUE; + diff --git a/59397005fa8136dd73079d75b0575b00f114ce35.patch b/59397005fa8136dd73079d75b0575b00f114ce35.patch new file mode 100644 index 000000000000..2f86bcef2ec0 --- /dev/null +++ b/59397005fa8136dd73079d75b0575b00f114ce35.patch @@ -0,0 +1,658 @@ +commit 59397005fa8136dd73079d75b0575b00f114ce35 +Author: Matthias Clasen <mclasen@redhat.com> +Date: Sun Mar 21 21:05:20 2021 -0400 + + Regenerate compose sequence file + + Update our compose sequences based on the current + update xorg Compose.pre file. Beyond that, remove + some deadkey sequences that we are now handling + (better) in code. + +diff --git a/gtk/compose/gtk-compose-lookaside.txt b/gtk/compose/gtk-compose-lookaside.txt +index 3f3b23c69c..c846cc8121 100644 +--- a/gtk/compose/gtk-compose-lookaside.txt ++++ b/gtk/compose/gtk-compose-lookaside.txt +@@ -403,3 +403,7 @@ + <Multi_key> <Greek_omicron> <apostrophe> : "ό" U03CC + <Multi_key> <Greek_upsilon> <apostrophe> : "ύ" U03CD + <Multi_key> <Greek_omega> <apostrophe> : "ώ" U03CE ++ ++# This sequence matches our handling of dead keys better. ++# We remove the xorg sequence that maps this to ' ++<dead_acute> <space> : "´" acute # ACUTE ACCENT +diff --git a/gtk/compose/gtk-compose-remove.txt b/gtk/compose/gtk-compose-remove.txt +new file mode 100644 +index 0000000000..620df9e9ce +--- /dev/null ++++ b/gtk/compose/gtk-compose-remove.txt +@@ -0,0 +1,14 @@ ++<dead_tilde> <dead_tilde> : "~" asciitilde # TILDE ++<dead_acute> <space> : "'" apostrophe # APOSTROPHE ++<dead_acute> <dead_acute> : "´" acute # ACUTE ACCENT ++<dead_grave> <dead_grave> : "`" grave # GRAVE ACCENT ++<dead_abovering> <dead_abovering> : "°" degree # DEGREE SIGN ++<dead_macron> <dead_macron> : "¯" macron # MACRON ++<dead_breve> <dead_breve> : "˘" breve # BREVE ++<dead_abovedot> <dead_abovedot> : "˙" abovedot # DOT ABOVE ++<dead_diaeresis> <dead_diaeresis> : "¨" diaeresis # DIAERESIS ++<dead_doubleacute> <dead_doubleacute> : "˝" U2dd # DOUBLE ACUTE ACCENT ++<dead_caron> <dead_caron> : "ˇ" caron # CARON ++<dead_cedilla> <dead_cedilla> : "¸" cedilla # CEDILLA ++<dead_ogonek> <dead_ogonek> : "˛" ogonek # OGONEK ++<dead_iota> <dead_iota> : "ͺ" U37a # GREEK YPOGEGRAMMENI +diff --git a/gtk/gtkimcontextsimpleseqs.h b/gtk/gtkimcontextsimpleseqs.h +index 9a88b0feca..9cbf37d078 100644 +--- a/gtk/gtkimcontextsimpleseqs.h ++++ b/gtk/gtkimcontextsimpleseqs.h +@@ -66,35 +66,35 @@ + + static const guint16 gtk_compose_seqs_compact[] = { + GDK_KEY_Greek_accentdieresis, 180, 184, 184, 184, 184, +-GDK_KEY_dead_grave, 184, 246, 333, 545, 545, +-GDK_KEY_dead_acute, 545, 609, 705, 981, 981, +-GDK_KEY_dead_circumflex, 981, 1105, 1105, 1305, 1305, +-GDK_KEY_dead_tilde, 1305, 1389, 1452, 1592, 1592, +-GDK_KEY_dead_macron, 1592, 1638, 1656, 1728, 1728, +-GDK_KEY_dead_breve, 1728, 1778, 1778, 1802, 1802, +-GDK_KEY_dead_abovedot, 1802, 1832, 1835, 1871, 1871, +-GDK_KEY_dead_diaeresis, 1871, 1959, 1971, 1995, 1995, +-GDK_KEY_dead_abovering, 1995, 2005, 2005, 2005, 2005, +-GDK_KEY_dead_doubleacute, 2005, 2015, 2015, 2015, 2015, +-GDK_KEY_dead_caron, 2015, 2057, 2057, 2065, 2065, +-GDK_KEY_dead_cedilla, 2065, 2077, 2083, 2083, 2083, +-GDK_KEY_dead_ogonek, 2083, 2093, 2093, 2093, 2093, +-GDK_KEY_dead_iota, 2093, 2115, 2214, 2646, 3306, +-GDK_KEY_dead_voiced_sound, 3306, 3352, 3352, 3352, 3352, +-GDK_KEY_dead_semivoiced_sound, 3352, 3362, 3362, 3362, 3362, +-GDK_KEY_dead_belowdot, 3362, 3378, 3378, 3394, 3394, +-GDK_KEY_dead_hook, 3394, 3472, 3475, 3531, 3531, +-GDK_KEY_dead_horn, 3531, 3541, 3541, 3541, 3541, +-GDK_KEY_dead_stroke, 3541, 3629, 3641, 3641, 3641, +-GDK_KEY_dead_psili, 3641, 3669, 3669, 3669, 3669, +-GDK_KEY_dead_dasia, 3669, 3701, 3701, 3701, 3701, +-GDK_KEY_dead_belowring, 3701, 3703, 3703, 3703, 3703, +-GDK_KEY_dead_belowtilde, 3703, 3705, 3705, 3705, 3705, +-GDK_KEY_dead_belowdiaeresis, 3705, 3705, 3708, 3708, 3708, +-GDK_KEY_dead_belowcomma, 3708, 3722, 3722, 3722, 3722, +-GDK_KEY_dead_currency, 3722, 3820, 3826, 3826, 3826, +-GDK_KEY_dead_greek, 3826, 3928, 3952, 3952, 3952, +-GDK_KEY_Multi_key, 3952, 3952, 10348, 14044, 15919, ++GDK_KEY_dead_grave, 184, 244, 331, 543, 543, ++GDK_KEY_dead_acute, 543, 605, 701, 977, 977, ++GDK_KEY_dead_circumflex, 977, 1101, 1101, 1301, 1301, ++GDK_KEY_dead_tilde, 1301, 1383, 1446, 1586, 1586, ++GDK_KEY_dead_macron, 1586, 1630, 1648, 1720, 1720, ++GDK_KEY_dead_breve, 1720, 1768, 1768, 1792, 1792, ++GDK_KEY_dead_abovedot, 1792, 1820, 1823, 1859, 1859, ++GDK_KEY_dead_diaeresis, 1859, 1945, 1957, 1981, 1981, ++GDK_KEY_dead_abovering, 1981, 1989, 1989, 1989, 1989, ++GDK_KEY_dead_doubleacute, 1989, 1997, 1997, 1997, 1997, ++GDK_KEY_dead_caron, 1997, 2037, 2037, 2045, 2045, ++GDK_KEY_dead_cedilla, 2045, 2055, 2061, 2061, 2061, ++GDK_KEY_dead_ogonek, 2061, 2069, 2069, 2069, 2069, ++GDK_KEY_dead_iota, 2069, 2089, 2188, 2620, 3280, ++GDK_KEY_dead_voiced_sound, 3280, 3326, 3326, 3326, 3326, ++GDK_KEY_dead_semivoiced_sound, 3326, 3336, 3336, 3336, 3336, ++GDK_KEY_dead_belowdot, 3336, 3352, 3352, 3368, 3368, ++GDK_KEY_dead_hook, 3368, 3446, 3449, 3505, 3505, ++GDK_KEY_dead_horn, 3505, 3515, 3515, 3515, 3515, ++GDK_KEY_dead_stroke, 3515, 3603, 3615, 3615, 3615, ++GDK_KEY_dead_psili, 3615, 3643, 3643, 3643, 3643, ++GDK_KEY_dead_dasia, 3643, 3675, 3675, 3675, 3675, ++GDK_KEY_dead_belowring, 3675, 3677, 3677, 3677, 3677, ++GDK_KEY_dead_belowtilde, 3677, 3679, 3679, 3679, 3679, ++GDK_KEY_dead_belowdiaeresis, 3679, 3679, 3682, 3682, 3682, ++GDK_KEY_dead_belowcomma, 3682, 3696, 3696, 3696, 3696, ++GDK_KEY_dead_currency, 3696, 3794, 3800, 3800, 3800, ++GDK_KEY_dead_greek, 3800, 3902, 3926, 3926, 3926, ++GDK_KEY_Multi_key, 3926, 3926, 10637, 14345, 16220, + GDK_KEY_Greek_iota, 0x0390, + GDK_KEY_Greek_upsilon, 0x03B0, + GDK_KEY_space, 0x0060, +@@ -127,7 +127,6 @@ GDK_KEY_Greek_iota, 0x1F76, + GDK_KEY_Greek_omicron, 0x1F78, + GDK_KEY_Greek_upsilon, 0x1F7A, + GDK_KEY_Greek_omega, 0x1F7C, +-GDK_KEY_dead_grave, 0x0060, + GDK_KEY_dead_diaeresis, GDK_KEY_Greek_iota, 0x1FD2, + GDK_KEY_dead_diaeresis, GDK_KEY_Greek_upsilon, 0x1FE2, + GDK_KEY_dead_psili, GDK_KEY_Greek_ALPHA, 0x1F0A, +@@ -210,7 +209,7 @@ GDK_KEY_Multi_key, GDK_KEY_macron, GDK_KEY_E, 0x1E14, + GDK_KEY_Multi_key, GDK_KEY_macron, GDK_KEY_O, 0x1E50, + GDK_KEY_Multi_key, GDK_KEY_macron, GDK_KEY_e, 0x1E15, + GDK_KEY_Multi_key, GDK_KEY_macron, GDK_KEY_o, 0x1E51, +-GDK_KEY_space, 0x0027, ++GDK_KEY_space, 0x00B4, + GDK_KEY_V, 0x01D7, + GDK_KEY_v, 0x01D8, + GDK_KEY_nobreakspace, 0x0301, +@@ -241,7 +240,6 @@ GDK_KEY_Greek_iota, 0x03AF, + GDK_KEY_Greek_omicron, 0x03CC, + GDK_KEY_Greek_upsilon, 0x03CD, + GDK_KEY_Greek_omega, 0x03CE, +-GDK_KEY_dead_acute, 0x00B4, + GDK_KEY_dead_diaeresis, GDK_KEY_space, 0x0385, + GDK_KEY_dead_diaeresis, GDK_KEY_Greek_iota, 0x0390, + GDK_KEY_dead_diaeresis, GDK_KEY_Greek_upsilon, 0x03B0, +@@ -496,7 +494,6 @@ GDK_KEY_Greek_omega, 0x1FF6, + 0x1F61, 0x1F67, + 0x1F68, 0x1F6E, + 0x1F69, 0x1F6F, +-GDK_KEY_dead_tilde, 0x007E, + GDK_KEY_dead_diaeresis, GDK_KEY_Greek_iota, 0x1FD7, + GDK_KEY_dead_diaeresis, GDK_KEY_Greek_upsilon, 0x1FE7, + GDK_KEY_dead_psili, GDK_KEY_Greek_ALPHA, 0x1F0E, +@@ -575,7 +572,6 @@ GDK_KEY_Greek_UPSILON, 0x1FE9, + GDK_KEY_Greek_alpha, 0x1FB1, + GDK_KEY_Greek_iota, 0x1FD1, + GDK_KEY_Greek_upsilon, 0x1FE1, +-GDK_KEY_dead_macron, 0x00AF, + GDK_KEY_dead_greek, GDK_KEY_A, 0x1FB9, + GDK_KEY_dead_greek, GDK_KEY_I, 0x1FD9, + GDK_KEY_dead_greek, GDK_KEY_U, 0x1FE9, +@@ -624,7 +620,6 @@ GDK_KEY_Greek_UPSILON, 0x1FE8, + GDK_KEY_Greek_alpha, 0x1FB0, + GDK_KEY_Greek_iota, 0x1FD0, + GDK_KEY_Greek_upsilon, 0x1FE0, +-GDK_KEY_dead_breve, 0x02D8, + GDK_KEY_Multi_key, GDK_KEY_exclam, GDK_KEY_A, 0x1EB6, + GDK_KEY_Multi_key, GDK_KEY_exclam, GDK_KEY_a, 0x1EB7, + GDK_KEY_Multi_key, GDK_KEY_comma, GDK_KEY_E, 0x1E1C, +@@ -645,7 +640,6 @@ GDK_KEY_Amacron, 0x01E0, + GDK_KEY_Omacron, 0x0230, + GDK_KEY_amacron, 0x01E1, + GDK_KEY_omacron, 0x0231, +-GDK_KEY_dead_abovedot, 0x02D9, + GDK_KEY_dead_stroke, GDK_KEY_j, 0x025F, + GDK_KEY_Multi_key, GDK_KEY_exclam, GDK_KEY_S, 0x1E68, + GDK_KEY_Multi_key, GDK_KEY_exclam, GDK_KEY_s, 0x1E69, +@@ -699,7 +693,6 @@ GDK_KEY_Greek_IOTA, 0x03AA, + GDK_KEY_Greek_UPSILON, 0x03AB, + GDK_KEY_Greek_iota, 0x03CA, + GDK_KEY_Greek_upsilon, 0x03CB, +-GDK_KEY_dead_diaeresis, 0x00A8, + GDK_KEY_dead_acute, GDK_KEY_space, 0x0385, + GDK_KEY_dead_acute, GDK_KEY_Greek_iota, 0x0390, + GDK_KEY_dead_acute, GDK_KEY_Greek_upsilon, 0x03B0, +@@ -714,12 +707,10 @@ GDK_KEY_space, 0x00B0, + GDK_KEY_nobreakspace, 0x030A, + GDK_KEY_Aacute, 0x01FA, + GDK_KEY_aacute, 0x01FB, +-GDK_KEY_dead_abovering, 0x00B0, + GDK_KEY_space, 0x02DD, + GDK_KEY_nobreakspace, 0x030B, + GDK_KEY_Cyrillic_u, 0x04F3, + GDK_KEY_Cyrillic_U, 0x04F2, +-GDK_KEY_dead_doubleacute, 0x02DD, + GDK_KEY_space, 0x02C7, + GDK_KEY_parenleft, 0x208D, + GDK_KEY_parenright, 0x208E, +@@ -740,7 +731,6 @@ GDK_KEY_V, 0x01D9, + GDK_KEY_v, 0x01DA, + GDK_KEY_nobreakspace, 0x030C, + 0x01F2, 0x01C5, +-GDK_KEY_dead_caron, 0x02C7, + GDK_KEY_Multi_key, GDK_KEY_quotedbl, GDK_KEY_U, 0x01D9, + GDK_KEY_Multi_key, GDK_KEY_quotedbl, GDK_KEY_u, 0x01DA, + GDK_KEY_space, 0x00B8, +@@ -748,14 +738,12 @@ GDK_KEY_nobreakspace, 0x0327, + GDK_KEY_cent, 0x20B5, + GDK_KEY_Cacute, 0x1E08, + GDK_KEY_cacute, 0x1E09, +-GDK_KEY_dead_cedilla, 0x00B8, + GDK_KEY_dead_currency, GDK_KEY_C, 0x20B5, + GDK_KEY_dead_currency, GDK_KEY_c, 0x20B5, + GDK_KEY_space, 0x02DB, + GDK_KEY_nobreakspace, 0x0328, + GDK_KEY_Omacron, 0x01EC, + GDK_KEY_omacron, 0x01ED, +-GDK_KEY_dead_ogonek, 0x02DB, + GDK_KEY_space, 0x037A, + GDK_KEY_Greek_alphaaccent, 0x1FB4, + GDK_KEY_Greek_etaaccent, 0x1FC4, +@@ -766,7 +754,6 @@ GDK_KEY_Greek_OMEGA, 0x1FFC, + GDK_KEY_Greek_alpha, 0x1FB3, + GDK_KEY_Greek_eta, 0x1FC3, + GDK_KEY_Greek_omega, 0x1FF3, +-GDK_KEY_dead_iota, 0x037A, + GDK_KEY_dead_grave, GDK_KEY_Greek_alpha, 0x1FB2, + GDK_KEY_dead_grave, GDK_KEY_Greek_eta, 0x1FC2, + GDK_KEY_dead_grave, GDK_KEY_Greek_omega, 0x1FF2, +@@ -1361,6 +1348,7 @@ GDK_KEY_exclam, GDK_KEY_L, 0x1E36, + GDK_KEY_exclam, GDK_KEY_M, 0x1E42, + GDK_KEY_exclam, GDK_KEY_N, 0x1E46, + GDK_KEY_exclam, GDK_KEY_O, 0x1ECC, ++GDK_KEY_exclam, GDK_KEY_P, 0x00B6, + GDK_KEY_exclam, GDK_KEY_R, 0x1E5A, + GDK_KEY_exclam, GDK_KEY_S, 0x1E62, + GDK_KEY_exclam, GDK_KEY_T, 0x1E6C, +@@ -1381,6 +1369,7 @@ GDK_KEY_exclam, GDK_KEY_l, 0x1E37, + GDK_KEY_exclam, GDK_KEY_m, 0x1E43, + GDK_KEY_exclam, GDK_KEY_n, 0x1E47, + GDK_KEY_exclam, GDK_KEY_o, 0x1ECD, ++GDK_KEY_exclam, GDK_KEY_p, 0x00B6, + GDK_KEY_exclam, GDK_KEY_r, 0x1E5B, + GDK_KEY_exclam, GDK_KEY_s, 0x1E63, + GDK_KEY_exclam, GDK_KEY_t, 0x1E6D, +@@ -1576,6 +1565,12 @@ GDK_KEY_apostrophe, 0x2395, 0x235E, + GDK_KEY_parenleft, GDK_KEY_space, 0x02D8, + GDK_KEY_parenleft, GDK_KEY_parenleft, 0x005B, + GDK_KEY_parenleft, GDK_KEY_minus, 0x007B, ++GDK_KEY_parenleft, GDK_KEY_A, 0x0102, ++GDK_KEY_parenleft, GDK_KEY_G, 0x011E, ++GDK_KEY_parenleft, GDK_KEY_a, 0x0103, ++GDK_KEY_parenleft, GDK_KEY_c, 0x00A9, ++GDK_KEY_parenleft, GDK_KEY_g, 0x011F, ++GDK_KEY_parenleft, GDK_KEY_r, 0x00AE, + GDK_KEY_parenleft, GDK_KEY_Greek_ALPHA, 0x1F09, + GDK_KEY_parenleft, GDK_KEY_Greek_EPSILON, 0x1F19, + GDK_KEY_parenleft, GDK_KEY_Greek_ETA, 0x1F29, +@@ -1664,12 +1659,13 @@ GDK_KEY_minus, GDK_KEY_comma, 0x00AC, + GDK_KEY_minus, GDK_KEY_slash, 0x233F, + GDK_KEY_minus, GDK_KEY_colon, 0x00F7, + GDK_KEY_minus, GDK_KEY_greater, 0x2192, +-GDK_KEY_minus, GDK_KEY_A, 0x0100, ++GDK_KEY_minus, GDK_KEY_A, 0x00C3, + GDK_KEY_minus, GDK_KEY_D, 0x0110, + GDK_KEY_minus, GDK_KEY_E, 0x0112, + GDK_KEY_minus, GDK_KEY_I, 0x012A, + GDK_KEY_minus, GDK_KEY_L, 0x00A3, +-GDK_KEY_minus, GDK_KEY_O, 0x014C, ++GDK_KEY_minus, GDK_KEY_N, 0x00D1, ++GDK_KEY_minus, GDK_KEY_O, 0x00D5, + GDK_KEY_minus, GDK_KEY_U, 0x016A, + GDK_KEY_minus, GDK_KEY_Y, 0x00A5, + GDK_KEY_minus, GDK_KEY_backslash, 0x2340, +@@ -1679,6 +1675,7 @@ GDK_KEY_minus, GDK_KEY_d, 0x0111, + GDK_KEY_minus, GDK_KEY_e, 0x0113, + GDK_KEY_minus, GDK_KEY_i, 0x012B, + GDK_KEY_minus, GDK_KEY_l, 0x00A3, ++GDK_KEY_minus, GDK_KEY_n, 0x00F1, + GDK_KEY_minus, GDK_KEY_o, 0x014D, + GDK_KEY_minus, GDK_KEY_u, 0x016B, + GDK_KEY_minus, GDK_KEY_y, 0x00A5, +@@ -1752,6 +1749,7 @@ GDK_KEY_slash, GDK_KEY_I, 0x0197, + GDK_KEY_slash, GDK_KEY_L, 0x0141, + GDK_KEY_slash, GDK_KEY_O, 0x00D8, + GDK_KEY_slash, GDK_KEY_T, 0x0166, ++GDK_KEY_slash, GDK_KEY_U, 0x00B5, + GDK_KEY_slash, GDK_KEY_Z, 0x01B5, + GDK_KEY_slash, GDK_KEY_asciicircum, 0x007C, + GDK_KEY_slash, GDK_KEY_b, 0x0180, +@@ -1780,6 +1778,13 @@ GDK_KEY_slash, 0x2194, 0x21AE, + GDK_KEY_slash, 0x2395, 0x2341, + GDK_KEY_0, GDK_KEY_asterisk, 0x00B0, + GDK_KEY_0, GDK_KEY_3, 0x2189, ++GDK_KEY_0, GDK_KEY_C, 0x00A9, ++GDK_KEY_0, GDK_KEY_S, 0x00A7, ++GDK_KEY_0, GDK_KEY_X, 0x00A4, ++GDK_KEY_0, GDK_KEY_asciicircum, 0x00B0, ++GDK_KEY_0, GDK_KEY_c, 0x00A9, ++GDK_KEY_0, GDK_KEY_s, 0x00A7, ++GDK_KEY_0, GDK_KEY_x, 0x00A4, + GDK_KEY_0, GDK_KEY_asciitilde, 0x236C, + GDK_KEY_1, GDK_KEY_2, 0x00BD, + GDK_KEY_1, GDK_KEY_3, 0x2153, +@@ -1789,14 +1794,20 @@ GDK_KEY_1, GDK_KEY_6, 0x2159, + GDK_KEY_1, GDK_KEY_7, 0x2150, + GDK_KEY_1, GDK_KEY_8, 0x215B, + GDK_KEY_1, GDK_KEY_9, 0x2151, ++GDK_KEY_1, GDK_KEY_S, 0x00B9, + GDK_KEY_1, GDK_KEY_asciicircum, 0x00B9, ++GDK_KEY_1, GDK_KEY_s, 0x00B9, + GDK_KEY_2, GDK_KEY_3, 0x2154, + GDK_KEY_2, GDK_KEY_5, 0x2156, ++GDK_KEY_2, GDK_KEY_S, 0x00B2, + GDK_KEY_2, GDK_KEY_asciicircum, 0x00B2, ++GDK_KEY_2, GDK_KEY_s, 0x00B2, + GDK_KEY_3, GDK_KEY_4, 0x00BE, + GDK_KEY_3, GDK_KEY_5, 0x2157, + GDK_KEY_3, GDK_KEY_8, 0x215C, ++GDK_KEY_3, GDK_KEY_S, 0x00B3, + GDK_KEY_3, GDK_KEY_asciicircum, 0x00B3, ++GDK_KEY_3, GDK_KEY_s, 0x00B3, + GDK_KEY_4, GDK_KEY_5, 0x2158, + GDK_KEY_5, GDK_KEY_6, 0x215A, + GDK_KEY_5, GDK_KEY_8, 0x215D, +@@ -1859,6 +1870,8 @@ GDK_KEY_equal, GDK_KEY_E, 0x20AC, + GDK_KEY_equal, GDK_KEY_L, 0x20A4, + GDK_KEY_equal, GDK_KEY_N, 0x20A6, + GDK_KEY_equal, GDK_KEY_O, 0x0150, ++GDK_KEY_equal, GDK_KEY_P, 0x20BD, ++GDK_KEY_equal, GDK_KEY_R, 0x20B9, + GDK_KEY_equal, GDK_KEY_U, 0x0170, + GDK_KEY_equal, GDK_KEY_W, 0x20A9, + GDK_KEY_equal, GDK_KEY_Y, 0x00A5, +@@ -1866,14 +1879,19 @@ GDK_KEY_equal, GDK_KEY_underscore, 0x2261, + GDK_KEY_equal, GDK_KEY_c, 0x20AC, + GDK_KEY_equal, GDK_KEY_d, 0x20AB, + GDK_KEY_equal, GDK_KEY_e, 0x20AC, ++GDK_KEY_equal, GDK_KEY_l, 0x00A3, + GDK_KEY_equal, GDK_KEY_o, 0x0151, ++GDK_KEY_equal, GDK_KEY_p, 0x20BD, ++GDK_KEY_equal, GDK_KEY_r, 0x20B9, + GDK_KEY_equal, GDK_KEY_u, 0x0171, + GDK_KEY_equal, GDK_KEY_y, 0x00A5, + GDK_KEY_equal, 0x0338, 0x2260, + GDK_KEY_equal, GDK_KEY_Cyrillic_u, 0x04F3, ++GDK_KEY_equal, GDK_KEY_Cyrillic_ze, 0x20BD, + GDK_KEY_equal, GDK_KEY_Cyrillic_IE, 0x20AC, + GDK_KEY_equal, GDK_KEY_Cyrillic_ES, 0x20AC, + GDK_KEY_equal, GDK_KEY_Cyrillic_U, 0x04F2, ++GDK_KEY_equal, GDK_KEY_Cyrillic_ZE, 0x20BD, + GDK_KEY_equal, 0x2395, 0x2338, + GDK_KEY_greater, GDK_KEY_space, 0x005E, + GDK_KEY_greater, GDK_KEY_quotedbl, 0x201D, +@@ -1923,14 +1941,14 @@ GDK_KEY_A, GDK_KEY_apostrophe, 0x00C1, + GDK_KEY_A, GDK_KEY_parenleft, 0x0102, + GDK_KEY_A, GDK_KEY_asterisk, 0x00C5, + GDK_KEY_A, GDK_KEY_comma, 0x0104, +-GDK_KEY_A, GDK_KEY_minus, 0x0100, ++GDK_KEY_A, GDK_KEY_minus, 0x00C3, + GDK_KEY_A, GDK_KEY_semicolon, 0x0104, + GDK_KEY_A, GDK_KEY_greater, 0x00C2, + GDK_KEY_A, GDK_KEY_A, 0x00C5, + GDK_KEY_A, GDK_KEY_E, 0x00C6, + GDK_KEY_A, GDK_KEY_T, 0x0040, + GDK_KEY_A, GDK_KEY_asciicircum, 0x00C2, +-GDK_KEY_A, GDK_KEY_underscore, 0x0100, ++GDK_KEY_A, GDK_KEY_underscore, 0x00AA, + GDK_KEY_A, GDK_KEY_grave, 0x00C0, + GDK_KEY_A, GDK_KEY_asciitilde, 0x00C3, + GDK_KEY_A, GDK_KEY_diaeresis, 0x00C4, +@@ -1940,6 +1958,7 @@ GDK_KEY_C, GDK_KEY_apostrophe, 0x0106, + GDK_KEY_C, GDK_KEY_comma, 0x00C7, + GDK_KEY_C, GDK_KEY_period, 0x010A, + GDK_KEY_C, GDK_KEY_slash, 0x20A1, ++GDK_KEY_C, GDK_KEY_0, 0x00A9, + GDK_KEY_C, GDK_KEY_less, 0x010C, + GDK_KEY_C, GDK_KEY_equal, 0x20AC, + GDK_KEY_C, GDK_KEY_E, 0x20A0, +@@ -1973,7 +1992,9 @@ GDK_KEY_F, GDK_KEY_r, 0x20A3, + GDK_KEY_G, GDK_KEY_parenleft, 0x011E, + GDK_KEY_G, GDK_KEY_comma, 0x0122, + GDK_KEY_G, GDK_KEY_period, 0x0120, ++GDK_KEY_G, GDK_KEY_T, 0x003E, + GDK_KEY_G, GDK_KEY_U, 0x011E, ++GDK_KEY_G, GDK_KEY_u, 0x011E, + GDK_KEY_G, GDK_KEY_breve, 0x011E, + GDK_KEY_H, GDK_KEY_comma, 0x1E28, + GDK_KEY_I, GDK_KEY_quotedbl, 0x00CF, +@@ -1997,11 +2018,13 @@ GDK_KEY_L, GDK_KEY_comma, 0x013B, + GDK_KEY_L, GDK_KEY_minus, 0x00A3, + GDK_KEY_L, GDK_KEY_slash, 0x0141, + GDK_KEY_L, GDK_KEY_less, 0x013D, +-GDK_KEY_L, GDK_KEY_equal, 0x20A4, ++GDK_KEY_L, GDK_KEY_equal, 0x00A3, ++GDK_KEY_L, GDK_KEY_T, 0x003C, + GDK_KEY_L, GDK_KEY_V, 0x007C, + GDK_KEY_M, GDK_KEY_period, 0x1E40, + GDK_KEY_N, GDK_KEY_apostrophe, 0x0143, + GDK_KEY_N, GDK_KEY_comma, 0x0145, ++GDK_KEY_N, GDK_KEY_minus, 0x00D1, + GDK_KEY_N, GDK_KEY_less, 0x0147, + GDK_KEY_N, GDK_KEY_equal, 0x20A6, + GDK_KEY_N, GDK_KEY_G, 0x014A, +@@ -2011,7 +2034,7 @@ GDK_KEY_N, GDK_KEY_asciitilde, 0x00D1, + GDK_KEY_O, GDK_KEY_quotedbl, 0x00D6, + GDK_KEY_O, GDK_KEY_apostrophe, 0x00D3, + GDK_KEY_O, GDK_KEY_comma, 0x01EA, +-GDK_KEY_O, GDK_KEY_minus, 0x014C, ++GDK_KEY_O, GDK_KEY_minus, 0x00D5, + GDK_KEY_O, GDK_KEY_slash, 0x00D8, + GDK_KEY_O, GDK_KEY_semicolon, 0x01EA, + GDK_KEY_O, GDK_KEY_greater, 0x00D4, +@@ -2022,7 +2045,7 @@ GDK_KEY_O, GDK_KEY_R, 0x00AE, + GDK_KEY_O, GDK_KEY_S, 0x00A7, + GDK_KEY_O, GDK_KEY_X, 0x00A4, + GDK_KEY_O, GDK_KEY_asciicircum, 0x00D4, +-GDK_KEY_O, GDK_KEY_underscore, 0x014C, ++GDK_KEY_O, GDK_KEY_underscore, 0x00BA, + GDK_KEY_O, GDK_KEY_grave, 0x00D2, + GDK_KEY_O, GDK_KEY_c, 0x00A9, + GDK_KEY_O, GDK_KEY_r, 0x00AE, +@@ -2032,23 +2055,31 @@ GDK_KEY_O, GDK_KEY_diaeresis, 0x00D6, + GDK_KEY_O, GDK_KEY_acute, 0x00D3, + GDK_KEY_P, GDK_KEY_exclam, 0x00B6, + GDK_KEY_P, GDK_KEY_period, 0x1E56, ++GDK_KEY_P, GDK_KEY_equal, 0x20BD, + GDK_KEY_P, GDK_KEY_P, 0x00B6, + GDK_KEY_P, GDK_KEY_t, 0x20A7, + GDK_KEY_R, GDK_KEY_apostrophe, 0x0154, + GDK_KEY_R, GDK_KEY_comma, 0x0156, + GDK_KEY_R, GDK_KEY_less, 0x0158, ++GDK_KEY_R, GDK_KEY_equal, 0x20B9, + GDK_KEY_R, GDK_KEY_O, 0x00AE, ++GDK_KEY_R, GDK_KEY_o, 0x00AE, + GDK_KEY_R, GDK_KEY_s, 0x20A8, + GDK_KEY_S, GDK_KEY_exclam, 0x00A7, + GDK_KEY_S, GDK_KEY_apostrophe, 0x015A, + GDK_KEY_S, GDK_KEY_comma, 0x015E, + GDK_KEY_S, GDK_KEY_period, 0x1E60, ++GDK_KEY_S, GDK_KEY_0, 0x00A7, ++GDK_KEY_S, GDK_KEY_1, 0x00B9, ++GDK_KEY_S, GDK_KEY_2, 0x00B2, ++GDK_KEY_S, GDK_KEY_3, 0x00B3, + GDK_KEY_S, GDK_KEY_semicolon, 0x0218, + GDK_KEY_S, GDK_KEY_less, 0x0160, + GDK_KEY_S, GDK_KEY_M, 0x2120, + GDK_KEY_S, GDK_KEY_O, 0x00A7, + GDK_KEY_S, GDK_KEY_S, 0x1E9E, + GDK_KEY_S, GDK_KEY_m, 0x2120, ++GDK_KEY_S, GDK_KEY_cedilla, 0x015E, + GDK_KEY_T, GDK_KEY_comma, 0x0162, + GDK_KEY_T, GDK_KEY_minus, 0x0166, + GDK_KEY_T, GDK_KEY_period, 0x1E6A, +@@ -2063,6 +2094,7 @@ GDK_KEY_U, GDK_KEY_apostrophe, 0x00DA, + GDK_KEY_U, GDK_KEY_asterisk, 0x016E, + GDK_KEY_U, GDK_KEY_comma, 0x0172, + GDK_KEY_U, GDK_KEY_minus, 0x016A, ++GDK_KEY_U, GDK_KEY_slash, 0x00B5, + GDK_KEY_U, GDK_KEY_semicolon, 0x0172, + GDK_KEY_U, GDK_KEY_greater, 0x00DB, + GDK_KEY_U, GDK_KEY_A, 0x0102, +@@ -2106,6 +2138,7 @@ GDK_KEY_U, 0x1EA1, 0x1EB7, + GDK_KEY_V, GDK_KEY_L, 0x007C, + GDK_KEY_W, GDK_KEY_equal, 0x20A9, + GDK_KEY_W, GDK_KEY_asciicircum, 0x0174, ++GDK_KEY_X, GDK_KEY_0, 0x00A4, + GDK_KEY_X, GDK_KEY_O, 0x00A4, + GDK_KEY_X, GDK_KEY_o, 0x00A4, + GDK_KEY_Y, GDK_KEY_quotedbl, 0x0178, +@@ -2154,6 +2187,7 @@ GDK_KEY_asciicircum, GDK_KEY_U, 0x00DB, + GDK_KEY_asciicircum, GDK_KEY_W, 0x0174, + GDK_KEY_asciicircum, GDK_KEY_Y, 0x0176, + GDK_KEY_asciicircum, GDK_KEY_Z, 0x1E90, ++GDK_KEY_asciicircum, GDK_KEY_underscore, 0x00AF, + GDK_KEY_asciicircum, GDK_KEY_a, 0x00E2, + GDK_KEY_asciicircum, GDK_KEY_c, 0x0109, + GDK_KEY_asciicircum, GDK_KEY_e, 0x00EA, +@@ -2167,6 +2201,7 @@ GDK_KEY_asciicircum, GDK_KEY_u, 0x00FB, + GDK_KEY_asciicircum, GDK_KEY_w, 0x0175, + GDK_KEY_asciicircum, GDK_KEY_y, 0x0177, + GDK_KEY_asciicircum, GDK_KEY_z, 0x1E91, ++GDK_KEY_asciicircum, GDK_KEY_bar, 0x2191, + GDK_KEY_asciicircum, 0x1EA0, 0x1EAC, + GDK_KEY_asciicircum, 0x1EA1, 0x1EAD, + GDK_KEY_asciicircum, 0x1EB8, 0x1EC6, +@@ -2377,7 +2412,7 @@ GDK_KEY_a, GDK_KEY_minus, 0x0101, + GDK_KEY_a, GDK_KEY_semicolon, 0x0105, + GDK_KEY_a, GDK_KEY_greater, 0x00E2, + GDK_KEY_a, GDK_KEY_asciicircum, 0x00E2, +-GDK_KEY_a, GDK_KEY_underscore, 0x0101, ++GDK_KEY_a, GDK_KEY_underscore, 0x00AA, + GDK_KEY_a, GDK_KEY_grave, 0x00E0, + GDK_KEY_a, GDK_KEY_a, 0x00E5, + GDK_KEY_a, GDK_KEY_e, 0x00E6, +@@ -2421,6 +2456,7 @@ GDK_KEY_c, GDK_KEY_apostrophe, 0x0107, + GDK_KEY_c, GDK_KEY_comma, 0x00E7, + GDK_KEY_c, GDK_KEY_period, 0x010B, + GDK_KEY_c, GDK_KEY_slash, 0x00A2, ++GDK_KEY_c, GDK_KEY_0, 0x00A9, + GDK_KEY_c, GDK_KEY_less, 0x010D, + GDK_KEY_c, GDK_KEY_equal, 0x20AC, + GDK_KEY_c, GDK_KEY_A, 0x01CD, +@@ -2491,6 +2527,8 @@ GDK_KEY_g, GDK_KEY_parenleft, 0x011F, + GDK_KEY_g, GDK_KEY_comma, 0x0123, + GDK_KEY_g, GDK_KEY_period, 0x0121, + GDK_KEY_g, GDK_KEY_U, 0x011F, ++GDK_KEY_g, GDK_KEY_t, 0x003E, ++GDK_KEY_g, GDK_KEY_u, 0x011F, + GDK_KEY_g, GDK_KEY_breve, 0x011F, + GDK_KEY_h, GDK_KEY_comma, 0x1E29, + GDK_KEY_i, GDK_KEY_quotedbl, 0x00EF, +@@ -2514,12 +2552,15 @@ GDK_KEY_l, GDK_KEY_comma, 0x013C, + GDK_KEY_l, GDK_KEY_minus, 0x00A3, + GDK_KEY_l, GDK_KEY_slash, 0x0142, + GDK_KEY_l, GDK_KEY_less, 0x013E, ++GDK_KEY_l, GDK_KEY_equal, 0x00A3, ++GDK_KEY_l, GDK_KEY_t, 0x003C, + GDK_KEY_l, GDK_KEY_v, 0x007C, + GDK_KEY_m, GDK_KEY_period, 0x1E41, + GDK_KEY_m, GDK_KEY_slash, 0x20A5, + GDK_KEY_m, GDK_KEY_u, 0x00B5, + GDK_KEY_n, GDK_KEY_apostrophe, 0x0144, + GDK_KEY_n, GDK_KEY_comma, 0x0146, ++GDK_KEY_n, GDK_KEY_minus, 0x00F1, + GDK_KEY_n, GDK_KEY_less, 0x0148, + GDK_KEY_n, GDK_KEY_g, 0x014B, + GDK_KEY_n, GDK_KEY_asciitilde, 0x00F1, +@@ -2536,7 +2577,7 @@ GDK_KEY_o, GDK_KEY_R, 0x00AE, + GDK_KEY_o, GDK_KEY_U, 0x016E, + GDK_KEY_o, GDK_KEY_X, 0x00A4, + GDK_KEY_o, GDK_KEY_asciicircum, 0x00F4, +-GDK_KEY_o, GDK_KEY_underscore, 0x014D, ++GDK_KEY_o, GDK_KEY_underscore, 0x00BA, + GDK_KEY_o, GDK_KEY_grave, 0x00F2, + GDK_KEY_o, GDK_KEY_a, 0x00E5, + GDK_KEY_o, GDK_KEY_c, 0x00A9, +@@ -2553,13 +2594,19 @@ GDK_KEY_o, GDK_KEY_diaeresis, 0x00F6, + GDK_KEY_o, GDK_KEY_acute, 0x00F3, + GDK_KEY_p, GDK_KEY_exclam, 0x00B6, + GDK_KEY_p, GDK_KEY_period, 0x1E57, ++GDK_KEY_p, GDK_KEY_equal, 0x20BD, + GDK_KEY_r, GDK_KEY_apostrophe, 0x0155, + GDK_KEY_r, GDK_KEY_comma, 0x0157, + GDK_KEY_r, GDK_KEY_less, 0x0159, ++GDK_KEY_r, GDK_KEY_equal, 0x20B9, + GDK_KEY_s, GDK_KEY_exclam, 0x00A7, + GDK_KEY_s, GDK_KEY_apostrophe, 0x015B, + GDK_KEY_s, GDK_KEY_comma, 0x015F, + GDK_KEY_s, GDK_KEY_period, 0x1E61, ++GDK_KEY_s, GDK_KEY_0, 0x00A7, ++GDK_KEY_s, GDK_KEY_1, 0x00B9, ++GDK_KEY_s, GDK_KEY_2, 0x00B2, ++GDK_KEY_s, GDK_KEY_3, 0x00B3, + GDK_KEY_s, GDK_KEY_semicolon, 0x0219, + GDK_KEY_s, GDK_KEY_less, 0x0161, + GDK_KEY_s, GDK_KEY_M, 0x2120, +@@ -2585,20 +2632,59 @@ GDK_KEY_u, GDK_KEY_slash, 0x00B5, + GDK_KEY_u, GDK_KEY_semicolon, 0x0173, + GDK_KEY_u, GDK_KEY_greater, 0x00FB, + GDK_KEY_u, GDK_KEY_A, 0x0102, ++GDK_KEY_u, GDK_KEY_E, 0x0114, ++GDK_KEY_u, GDK_KEY_G, 0x011E, ++GDK_KEY_u, GDK_KEY_I, 0x012C, ++GDK_KEY_u, GDK_KEY_O, 0x014E, + GDK_KEY_u, GDK_KEY_U, 0x016C, + GDK_KEY_u, GDK_KEY_asciicircum, 0x00FB, + GDK_KEY_u, GDK_KEY_underscore, 0x016B, + GDK_KEY_u, GDK_KEY_grave, 0x00F9, + GDK_KEY_u, GDK_KEY_a, 0x0103, ++GDK_KEY_u, GDK_KEY_e, 0x0115, ++GDK_KEY_u, GDK_KEY_g, 0x011F, ++GDK_KEY_u, GDK_KEY_i, 0x012D, ++GDK_KEY_u, GDK_KEY_o, 0x014F, + GDK_KEY_u, GDK_KEY_u, 0x016D, + GDK_KEY_u, GDK_KEY_asciitilde, 0x0169, + GDK_KEY_u, GDK_KEY_diaeresis, 0x00FC, + GDK_KEY_u, GDK_KEY_acute, 0x00FA, + GDK_KEY_v, GDK_KEY_slash, 0x221A, ++GDK_KEY_v, GDK_KEY_A, 0x01CD, ++GDK_KEY_v, GDK_KEY_C, 0x010C, ++GDK_KEY_v, GDK_KEY_D, 0x010E, ++GDK_KEY_v, GDK_KEY_E, 0x011A, ++GDK_KEY_v, GDK_KEY_G, 0x01E6, ++GDK_KEY_v, GDK_KEY_H, 0x021E, ++GDK_KEY_v, GDK_KEY_I, 0x01CF, ++GDK_KEY_v, GDK_KEY_K, 0x01E8, ++GDK_KEY_v, GDK_KEY_N, 0x0147, ++GDK_KEY_v, GDK_KEY_O, 0x01D1, ++GDK_KEY_v, GDK_KEY_R, 0x0158, ++GDK_KEY_v, GDK_KEY_S, 0x0160, ++GDK_KEY_v, GDK_KEY_T, 0x0164, ++GDK_KEY_v, GDK_KEY_U, 0x01D3, + GDK_KEY_v, GDK_KEY_Z, 0x017D, ++GDK_KEY_v, GDK_KEY_a, 0x01CE, ++GDK_KEY_v, GDK_KEY_c, 0x010D, ++GDK_KEY_v, GDK_KEY_d, 0x010F, ++GDK_KEY_v, GDK_KEY_e, 0x011B, ++GDK_KEY_v, GDK_KEY_g, 0x01E7, ++GDK_KEY_v, GDK_KEY_h, 0x021F, ++GDK_KEY_v, GDK_KEY_i, 0x01D0, ++GDK_KEY_v, GDK_KEY_j, 0x01F0, ++GDK_KEY_v, GDK_KEY_k, 0x01E9, + GDK_KEY_v, GDK_KEY_l, 0x007C, ++GDK_KEY_v, GDK_KEY_n, 0x0148, ++GDK_KEY_v, GDK_KEY_o, 0x01D2, ++GDK_KEY_v, GDK_KEY_r, 0x0159, ++GDK_KEY_v, GDK_KEY_s, 0x0161, ++GDK_KEY_v, GDK_KEY_t, 0x0165, ++GDK_KEY_v, GDK_KEY_u, 0x01D4, + GDK_KEY_v, GDK_KEY_z, 0x017E, ++GDK_KEY_v, GDK_KEY_bar, 0x2193, + GDK_KEY_w, GDK_KEY_asciicircum, 0x0175, ++GDK_KEY_x, GDK_KEY_0, 0x00A4, + GDK_KEY_x, GDK_KEY_O, 0x00A4, + GDK_KEY_x, GDK_KEY_o, 0x00A4, + GDK_KEY_x, GDK_KEY_x, 0x00D7, +@@ -2614,7 +2700,9 @@ GDK_KEY_z, GDK_KEY_period, 0x017C, + GDK_KEY_z, GDK_KEY_less, 0x017E, + GDK_KEY_braceleft, GDK_KEY_braceright, 0x2205, + GDK_KEY_bar, GDK_KEY_C, 0x00A2, ++GDK_KEY_bar, GDK_KEY_asciicircum, 0x2191, + GDK_KEY_bar, GDK_KEY_c, 0x00A2, ++GDK_KEY_bar, GDK_KEY_v, 0x2193, + GDK_KEY_bar, GDK_KEY_asciitilde, 0x236D, + GDK_KEY_bar, 0x2190, 0x2345, + GDK_KEY_bar, 0x2192, 0x2346, +@@ -2642,6 +2730,7 @@ GDK_KEY_asciitilde, GDK_KEY_u, 0x0169, + GDK_KEY_asciitilde, GDK_KEY_v, 0x1E7D, + GDK_KEY_asciitilde, GDK_KEY_y, 0x1EF9, + GDK_KEY_asciitilde, GDK_KEY_bar, 0x236D, ++GDK_KEY_asciitilde, GDK_KEY_asciitilde, 0x2248, + GDK_KEY_asciitilde, GDK_KEY_diaeresis, 0x2368, + GDK_KEY_asciitilde, GDK_KEY_Acircumflex, 0x1EAA, + GDK_KEY_asciitilde, GDK_KEY_Ecircumflex, 0x1EC4, +@@ -2927,10 +3016,12 @@ GDK_KEY_breve, GDK_KEY_g, 0x011F, + 0x0654, 0x06D5, 0x06C0, + 0x0655, GDK_KEY_Arabic_alef, 0x0625, + GDK_KEY_Cyrillic_pe, GDK_KEY_Cyrillic_a, 0x00A7, ++GDK_KEY_Cyrillic_ze, GDK_KEY_equal, 0x20BD, + GDK_KEY_Cyrillic_IE, GDK_KEY_equal, 0x20AC, + GDK_KEY_Cyrillic_EN, GDK_KEY_Cyrillic_o, 0x2116, + GDK_KEY_Cyrillic_EN, GDK_KEY_Cyrillic_O, 0x2116, + GDK_KEY_Cyrillic_ES, GDK_KEY_equal, 0x20AC, ++GDK_KEY_Cyrillic_ZE, GDK_KEY_equal, 0x20BD, + GDK_KEY_Greek_ALPHA, GDK_KEY_apostrophe, 0x0386, + GDK_KEY_Greek_EPSILON, GDK_KEY_apostrophe, 0x0388, + GDK_KEY_Greek_ETA, GDK_KEY_apostrophe, 0x0389, +@@ -2944,6 +3035,7 @@ GDK_KEY_Greek_alpha, GDK_KEY_apostrophe, 0x03AC, + GDK_KEY_Greek_epsilon, GDK_KEY_apostrophe, 0x03AD, + GDK_KEY_Greek_eta, GDK_KEY_apostrophe, 0x03AE, + GDK_KEY_Greek_iota, GDK_KEY_quotedbl, 0x03CA, ++GDK_KEY_Greek_iota, GDK_KEY_apostrophe, 0x03AF, + GDK_KEY_Greek_iota, GDK_KEY_Greek_alphaaccent, 0x1FB4, + GDK_KEY_Greek_iota, GDK_KEY_Greek_etaaccent, 0x1FC4, + GDK_KEY_Greek_iota, GDK_KEY_Greek_omegaaccent, 0x1FF4, +@@ -3477,6 +3569,9 @@ GDK_KEY_exclam, GDK_KEY_dead_horn, GDK_KEY_O, 0x1EE2, + GDK_KEY_exclam, GDK_KEY_dead_horn, GDK_KEY_U, 0x1EF0, + GDK_KEY_exclam, GDK_KEY_dead_horn, GDK_KEY_o, 0x1EE3, + GDK_KEY_exclam, GDK_KEY_dead_horn, GDK_KEY_u, 0x1EF1, ++GDK_KEY_quotedbl, GDK_KEY_apostrophe, GDK_KEY_space, 0x0385, ++GDK_KEY_quotedbl, GDK_KEY_apostrophe, GDK_KEY_Greek_iota, 0x0390, ++GDK_KEY_quotedbl, GDK_KEY_apostrophe, GDK_KEY_Greek_upsilon, 0x03B0, + GDK_KEY_quotedbl, GDK_KEY_underscore, GDK_KEY_U, 0x1E7A, + GDK_KEY_quotedbl, GDK_KEY_underscore, GDK_KEY_u, 0x1E7B, + GDK_KEY_quotedbl, GDK_KEY_asciitilde, GDK_KEY_O, 0x1E4E, diff --git a/7b3c387af9e9c6c37c5751258ded6708094d4c73.patch b/7b3c387af9e9c6c37c5751258ded6708094d4c73.patch new file mode 100644 index 000000000000..b2bcf8df374e --- /dev/null +++ b/7b3c387af9e9c6c37c5751258ded6708094d4c73.patch @@ -0,0 +1,51 @@ +commit 7b3c387af9e9c6c37c5751258ded6708094d4c73 +Author: Matthias Clasen <mclasen@redhat.com> +Date: Sun Mar 21 20:53:24 2021 -0400 + + compose-parse: Add a negative lookaside + + Make this script parse gtk-compose-remove.txt for + sequences to remove from the xorg Compose file. + This will be used for removing some deadkey combinations + that we can handle better in code. + + Also, make this script explicitly python2. I tried + porting it to python3, but gave up in the end. + +diff --git a/gtk/compose-parse.py b/gtk/compose-parse.py +index 9a6513a70a..bf0f5bc953 100755 +--- a/gtk/compose-parse.py ++++ b/gtk/compose-parse.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python2 + # -*- coding: utf-8 -*- + # + # compose-parse.py, version 1.4 +@@ -26,6 +26,7 @@ URL_KEYSYMSTXT = "http://www.cl.cam.ac.uk/~mgk25/ucs/keysyms.txt" + URL_GDKKEYSYMSH = "http://git.gnome.org/browse/gtk%2B/plain/gdk/gdkkeysyms.h" + URL_UNICODEDATATXT = 'http://www.unicode.org/Public/6.0.0/ucd/UnicodeData.txt' + FILENAME_COMPOSE_SUPPLEMENTARY = 'gtk-compose-lookaside.txt' ++FILENAME_COMPOSE_NEGATIVE_SUPPLEMENTARY = 'gtk-compose-remove.txt' + + # We currently support keysyms of size 2; once upstream xorg gets sorted, + # we might produce some tables with size 2 and some with size 4. +@@ -448,6 +449,18 @@ xorg_compose_sequences_raw = [] + for seq in composefile.readlines(): + xorg_compose_sequences_raw.append(seq) + ++try: ++ composefile_lookaside = open(FILENAME_COMPOSE_NEGATIVE_SUPPLEMENTARY, 'r') ++ for seq in composefile_lookaside.readlines(): ++ xorg_compose_sequences_raw.remove(seq) ++except IOError, (errno, strerror): ++ if opt_verbose: ++ print "I/O error(%s): %s" % (errno, strerror) ++ print "Did not find negative lookaside compose file. Continuing..." ++except: ++ print "Unexpected error: ", sys.exc_info()[0] ++ sys.exit(-1) ++ + try: + composefile_lookaside = open(FILENAME_COMPOSE_SUPPLEMENTARY, 'r') + for seq in composefile_lookaside.readlines(): diff --git a/8c7846733aa5e2bac866d8b8ac9eb4d8d1d6f527.patch b/8c7846733aa5e2bac866d8b8ac9eb4d8d1d6f527.patch new file mode 100644 index 000000000000..cc0ff2562d21 --- /dev/null +++ b/8c7846733aa5e2bac866d8b8ac9eb4d8d1d6f527.patch @@ -0,0 +1,141 @@ +commit 8c7846733aa5e2bac866d8b8ac9eb4d8d1d6f527 +Author: Matthias Clasen <mclasen@redhat.com> +Date: Fri Mar 26 19:50:05 2021 -0400 + + imcontext: Tweak dead key handling + + Reshuffle things to allow for a limited amount of + dead key 'chaining'. We keep up to 2 dead keys in + the preedit, so you can type + <dead_acute> <dead_cedilla> <c> + to produce ḉ, while still getting ```c with + <dead_grave> <dead_grave> <dead_grave> <c>. + +diff --git a/gtk/gtkimcontextsimple.c b/gtk/gtkimcontextsimple.c +index 204a375535..60ddbc3183 100644 +--- a/gtk/gtkimcontextsimple.c ++++ b/gtk/gtkimcontextsimple.c +@@ -539,28 +539,62 @@ no_sequence_matches (GtkIMContextSimple *context_simple, + } + else + { +- if (n_compose == 2 && is_dead_key (priv->compose_buffer[0])) ++ int i; ++ ++ for (i = 0; i < n_compose && is_dead_key (priv->compose_buffer[i]); i++) ++ ; ++ ++ if (n_compose > 1 && i >= n_compose - 1) + { + gboolean need_space; + GString *s; + + s = g_string_new (""); + +- /* dead keys are never *really* dead */ +- ch = dead_key_to_unicode (priv->compose_buffer[0], &need_space); +- if (ch) ++ if (i == n_compose - 1) + { +- if (need_space) +- g_string_append_c (s, ' '); +- g_string_append_unichar (s, ch); ++ /* dead keys are never *really* dead */ ++ for (int j = 0; j < i; j++) ++ { ++ ch = dead_key_to_unicode (priv->compose_buffer[j], &need_space); ++ if (ch) ++ { ++ if (need_space) ++ g_string_append_c (s, ' '); ++ g_string_append_unichar (s, ch); ++ } ++ } ++ ++ ch = gdk_keyval_to_unicode (priv->compose_buffer[i]); ++ if (ch != 0 && ch != ' ' && !g_unichar_iscntrl (ch)) ++ g_string_append_unichar (s, ch); ++ ++ gtk_im_context_simple_commit_string (context_simple, s->str); + } ++ else ++ { ++ ch = dead_key_to_unicode (priv->compose_buffer[0], &need_space); ++ if (ch) ++ { ++ if (need_space) ++ g_string_append_c (s, ' '); ++ g_string_append_unichar (s, ch); ++ } ++ ++ gtk_im_context_simple_commit_string (context_simple, s->str); ++ ++ for (i = 1; i < n_compose; i++) ++ priv->compose_buffer[i - 1] = priv->compose_buffer[i]; ++ priv->compose_buffer[n_compose - 1] = 0; ++ ++ priv->in_compose_sequence = TRUE; + +- ch = gdk_keyval_to_unicode (priv->compose_buffer[1]); +- if (ch != 0 && !g_unichar_iscntrl (ch)) +- g_string_append_unichar (s, ch); ++ g_signal_emit_by_name (context, "preedit-start"); ++ g_signal_emit_by_name (context, "preedit-changed"); ++ } + +- gtk_im_context_simple_commit_string (context_simple, s->str); + g_string_free (s, TRUE); ++ + return TRUE; + } + +@@ -895,39 +929,6 @@ gtk_im_context_simple_filter_keypress (GtkIMContext *context, + + output = g_string_new (""); + +- if (n_compose == 2) +- { +- /* Special-case deadkey-deadkey sequences. +- * We are not doing chained deadkeys, so we +- * want to commit the first key, and contine +- * preediting with second. +- */ +- if (is_dead_key (priv->compose_buffer[0]) && +- is_dead_key (priv->compose_buffer[1])) +- { +- gunichar ch; +- gboolean need_space; +- guint next; +- +- next = priv->compose_buffer[1]; +- +- ch = dead_key_to_unicode (priv->compose_buffer[0], &need_space); +- if (ch) +- { +- if (need_space) +- g_string_append_c (output, ' '); +- g_string_append_unichar (output, ch); +- +- gtk_im_context_simple_commit_string (context_simple, output->str); +- g_string_set_size (output, 0); +- +- priv->compose_buffer[0] = next; +- priv->compose_buffer[1] = 0; +- n_compose = 1; +- } +- } +- } +- + G_LOCK (global_tables); + + tmp_list = global_tables; +@@ -1013,6 +1014,9 @@ gtk_im_context_simple_filter_keypress (GtkIMContext *context, + + if (output_char) + gtk_im_context_simple_commit_char (context_simple, output_char); ++ else ++ g_signal_emit_by_name (context_simple, "preedit-changed"); ++ + return TRUE; + } + } @@ -3,8 +3,8 @@ # Contributor: Ionut Biru <ibiru@archlinux.org> pkgname=gtk3-no_deadkeys_underline -pkgver=3.24.27 -pkgrel=4 +pkgver=3.24.28 +pkgrel=1 epoch=1 pkgdesc="Like gtk3 in extra but with a patch to disable dead keys having an underline below them while typing" arch=(x86_64) @@ -21,12 +21,26 @@ conflicts=(gtk3-print-backends gtk3) replaces=("gtk3-print-backends<=3.22.26-1") license=(LGPL) install=gtk3.install -_commit=c7df3b9e9790012e6c5fbad6a4f4519bcf75561f # tags/3.24.27^0 +_commit=23db3508899f8304482b68e04a181bb081549081 # tags/3.24.28^0 source=("git+https://gitlab.gnome.org/GNOME/gtk.git#commit=$_commit" gtk-query-immodules-3.0.hook - no_deadkeys_underline.patch) + no_deadkeys_underline.patch + c26525f87c885929eccf248dd8cae2a2cf28b819.patch + a0cdd25bd4274d6ff12162de3d416326ec0429e4.patch + 7b3c387af9e9c6c37c5751258ded6708094d4c73.patch + 41c3e9873cf2b388d4a91fbd86c360d53b1a00da.patch + 59397005fa8136dd73079d75b0575b00f114ce35.patch + 58b3145c90a4681bf1ee026f58e12bfb5cafe81a.patch + 8c7846733aa5e2bac866d8b8ac9eb4d8d1d6f527.patch) sha256sums=('SKIP' 'a0319b6795410f06d38de1e8695a9bf9636ff2169f40701671580e60a108e229' + 'SKIP' + 'SKIP' + 'SKIP' + 'SKIP' + 'SKIP' + 'SKIP' + 'SKIP' 'SKIP') pkgver() { @@ -36,6 +50,13 @@ pkgver() { prepare() { cd gtk + patch -p1 -R < ../8c7846733aa5e2bac866d8b8ac9eb4d8d1d6f527.patch + patch -p1 -R < ../58b3145c90a4681bf1ee026f58e12bfb5cafe81a.patch + patch -p1 -R < ../59397005fa8136dd73079d75b0575b00f114ce35.patch + patch -p1 -R < ../41c3e9873cf2b388d4a91fbd86c360d53b1a00da.patch + patch -p1 -R < ../7b3c387af9e9c6c37c5751258ded6708094d4c73.patch + patch -p1 -R < ../a0cdd25bd4274d6ff12162de3d416326ec0429e4.patch + patch -p1 -R < ../c26525f87c885929eccf248dd8cae2a2cf28b819.patch patch -p1 < ../no_deadkeys_underline.patch } diff --git a/a0cdd25bd4274d6ff12162de3d416326ec0429e4.patch b/a0cdd25bd4274d6ff12162de3d416326ec0429e4.patch new file mode 100644 index 000000000000..76694b8072ce --- /dev/null +++ b/a0cdd25bd4274d6ff12162de3d416326ec0429e4.patch @@ -0,0 +1,57 @@ +commit a0cdd25bd4274d6ff12162de3d416326ec0429e4 +Author: Matthias Clasen <mclasen@redhat.com> +Date: Sun Mar 21 18:51:57 2021 -0400 + + imcontext: Improve dead key handling more + + For sequences like ``, we want to commit the first + deadkey and then continue preedit with the second. + + The alternative is to do chained deadkeys, where + entering ~~a yields ̃̀̃̃a. But we don't do that, and + I think that would be more controversial. + +diff --git a/gtk/gtkimcontextsimple.c b/gtk/gtkimcontextsimple.c +index 0e51bc725d..204a375535 100644 +--- a/gtk/gtkimcontextsimple.c ++++ b/gtk/gtkimcontextsimple.c +@@ -895,6 +895,39 @@ gtk_im_context_simple_filter_keypress (GtkIMContext *context, + + output = g_string_new (""); + ++ if (n_compose == 2) ++ { ++ /* Special-case deadkey-deadkey sequences. ++ * We are not doing chained deadkeys, so we ++ * want to commit the first key, and contine ++ * preediting with second. ++ */ ++ if (is_dead_key (priv->compose_buffer[0]) && ++ is_dead_key (priv->compose_buffer[1])) ++ { ++ gunichar ch; ++ gboolean need_space; ++ guint next; ++ ++ next = priv->compose_buffer[1]; ++ ++ ch = dead_key_to_unicode (priv->compose_buffer[0], &need_space); ++ if (ch) ++ { ++ if (need_space) ++ g_string_append_c (output, ' '); ++ g_string_append_unichar (output, ch); ++ ++ gtk_im_context_simple_commit_string (context_simple, output->str); ++ g_string_set_size (output, 0); ++ ++ priv->compose_buffer[0] = next; ++ priv->compose_buffer[1] = 0; ++ n_compose = 1; ++ } ++ } ++ } ++ + G_LOCK (global_tables); + + tmp_list = global_tables; diff --git a/c26525f87c885929eccf248dd8cae2a2cf28b819.patch b/c26525f87c885929eccf248dd8cae2a2cf28b819.patch new file mode 100644 index 000000000000..3f224bba1292 --- /dev/null +++ b/c26525f87c885929eccf248dd8cae2a2cf28b819.patch @@ -0,0 +1,199 @@ +commit c26525f87c885929eccf248dd8cae2a2cf28b819 +Author: Matthias Clasen <mclasen@redhat.com> +Date: Sun Mar 21 18:17:32 2021 -0400 + + imcontext: Improve dead key handling + + For sequences like `x, where we don't have a compose + sequence, we still want to commit "`x", and not silently + eat the keys. + +diff --git a/gtk/gtkimcontextsimple.c b/gtk/gtkimcontextsimple.c +index cfbaecf3f6..0e51bc725d 100644 +--- a/gtk/gtkimcontextsimple.c ++++ b/gtk/gtkimcontextsimple.c +@@ -422,6 +422,79 @@ beep_window (GdkWindow *window) + gdk_window_beep (window); + } + ++static inline gboolean ++is_dead_key (guint keysym) ++{ ++ return GDK_KEY_dead_grave <= keysym && keysym <= GDK_KEY_dead_greek; ++} ++ ++static gunichar ++dead_key_to_unicode (guint keysym, ++ gboolean *need_space) ++{ ++ /* Sadly, not all the dead keysyms have spacing mark equivalents ++ * in Unicode. For those that don't, we use space + the non-spacing ++ * mark as an approximation ++ */ ++ switch (keysym) ++ { ++#define CASE(keysym, unicode, sp) \ ++ case GDK_KEY_dead_##keysym: *need_space = sp; return unicode; ++ ++ CASE (grave, 0x60, 0); ++ CASE (acute, 0xb4, 0); ++ CASE (circumflex, 0x5e, 0); ++ CASE (tilde, 0x7e, 0); ++ CASE (macron, 0xaf, 0); ++ CASE (breve, 0x2d8, 0); ++ CASE (abovedot, 0x307, 1); ++ CASE (diaeresis, 0xa8, 0); ++ CASE (abovering, 0x2da, 0); ++ CASE (hook, 0x2c0, 0); ++ CASE (doubleacute, 0x2dd, 0); ++ CASE (caron, 0x2c7, 0); ++ CASE (cedilla, 0xb8, 0); ++ CASE (ogonek, 0x2db, 0); ++ CASE (iota, 0x37a, 0); ++ CASE (voiced_sound, 0x3099, 1); ++ CASE (semivoiced_sound, 0x309a, 1); ++ CASE (belowdot, 0x323, 1); ++ CASE (horn, 0x31b, 1); ++ CASE (stroke, 0x335, 1); ++ CASE (abovecomma, 0x2bc, 0); ++ CASE (abovereversedcomma, 0x2bd, 1); ++ CASE (doublegrave, 0x30f, 1); ++ CASE (belowring, 0x2f3, 0); ++ CASE (belowmacron, 0x2cd, 0); ++ CASE (belowcircumflex, 0x32d, 1); ++ CASE (belowtilde, 0x330, 1); ++ CASE (belowbreve, 0x32e, 1); ++ CASE (belowdiaeresis, 0x324, 1); ++ CASE (invertedbreve, 0x32f, 1); ++ CASE (belowcomma, 0x326, 1); ++ CASE (lowline, 0x5f, 0); ++ CASE (aboveverticalline, 0x2c8, 0); ++ CASE (belowverticalline, 0x2cc, 0); ++ CASE (longsolidusoverlay, 0x338, 1); ++ CASE (a, 0x363, 1); ++ CASE (A, 0x363, 1); ++ CASE (e, 0x364, 1); ++ CASE (E, 0x364, 1); ++ CASE (i, 0x365, 1); ++ CASE (I, 0x365, 1); ++ CASE (o, 0x366, 1); ++ CASE (O, 0x366, 1); ++ CASE (u, 0x367, 1); ++ CASE (U, 0x367, 1); ++ CASE (small_schwa, 0x1dea, 1); ++ CASE (capital_schwa, 0x1dea, 1); ++#undef CASE ++ default: ++ *need_space = FALSE; ++ return gdk_keyval_to_unicode (keysym); ++ } ++} ++ + static gboolean + no_sequence_matches (GtkIMContextSimple *context_simple, + int n_compose, +@@ -466,6 +539,31 @@ no_sequence_matches (GtkIMContextSimple *context_simple, + } + else + { ++ if (n_compose == 2 && is_dead_key (priv->compose_buffer[0])) ++ { ++ gboolean need_space; ++ GString *s; ++ ++ s = g_string_new (""); ++ ++ /* dead keys are never *really* dead */ ++ ch = dead_key_to_unicode (priv->compose_buffer[0], &need_space); ++ if (ch) ++ { ++ if (need_space) ++ g_string_append_c (s, ' '); ++ g_string_append_unichar (s, ch); ++ } ++ ++ ch = gdk_keyval_to_unicode (priv->compose_buffer[1]); ++ if (ch != 0 && !g_unichar_iscntrl (ch)) ++ g_string_append_unichar (s, ch); ++ ++ gtk_im_context_simple_commit_string (context_simple, s->str); ++ g_string_free (s, TRUE); ++ return TRUE; ++ } ++ + priv->compose_buffer[0] = 0; + if (n_compose > 1) /* Invalid sequence */ + { +@@ -954,70 +1052,9 @@ gtk_im_context_simple_get_preedit_string (GtkIMContext *context, + gunichar ch; + gboolean need_space; + +- if (GDK_KEY_dead_grave <= priv->compose_buffer[i] && priv->compose_buffer[i] <= GDK_KEY_dead_greek) ++ if (is_dead_key (priv->compose_buffer[i])) + { +- /* Sadly, not all the dead keysyms have spacing mark equivalents +- * in Unicode. For those that don't, we use space + the non-spacing +- * mark as an approximation +- */ +- switch (priv->compose_buffer[i]) +- { +- #define CASE(keysym, unicode, sp) \ +- case GDK_KEY_dead_##keysym: ch = unicode; need_space = sp; break +- +- CASE (grave, 0x60, 0); +- CASE (acute, 0xb4, 0); +- CASE (circumflex, 0x5e, 0); +- CASE (tilde, 0x7e, 0); +- CASE (macron, 0xaf, 0); +- CASE (breve, 0x2d8, 0); +- CASE (abovedot, 0x307, 1); +- CASE (diaeresis, 0xa8, 0); +- CASE (abovering, 0x2da, 0); +- CASE (hook, 0x2c0, 0); +- CASE (doubleacute, 0x2dd, 0); +- CASE (caron, 0x2c7, 0); +- CASE (cedilla, 0xb8, 0); +- CASE (ogonek, 0x2db, 0); +- CASE (iota, 0x37a, 0); +- CASE (voiced_sound, 0x3099, 1); +- CASE (semivoiced_sound, 0x309a, 1); +- CASE (belowdot, 0x323, 1); +- CASE (horn, 0x31b, 1); +- CASE (stroke, 0x335, 1); +- CASE (abovecomma, 0x2bc, 0); +- CASE (abovereversedcomma, 0x2bd, 1); +- CASE (doublegrave, 0x30f, 1); +- CASE (belowring, 0x2f3, 0); +- CASE (belowmacron, 0x2cd, 0); +- CASE (belowcircumflex, 0x32d, 1); +- CASE (belowtilde, 0x330, 1); +- CASE (belowbreve, 0x32e, 1); +- CASE (belowdiaeresis, 0x324, 1); +- CASE (invertedbreve, 0x32f, 1); +- CASE (belowcomma, 0x326, 1); +- CASE (lowline, 0x5f, 0); +- CASE (aboveverticalline, 0x2c8, 0); +- CASE (belowverticalline, 0x2cc, 0); +- CASE (longsolidusoverlay, 0x338, 1); +- CASE (a, 0x363, 1); +- CASE (A, 0x363, 1); +- CASE (e, 0x364, 1); +- CASE (E, 0x364, 1); +- CASE (i, 0x365, 1); +- CASE (I, 0x365, 1); +- CASE (o, 0x366, 1); +- CASE (O, 0x366, 1); +- CASE (u, 0x367, 1); +- CASE (U, 0x367, 1); +- CASE (small_schwa, 0x1dea, 1); +- CASE (capital_schwa, 0x1dea, 1); +- #undef CASE +- default: +- need_space = FALSE; +- ch = gdk_keyval_to_unicode (priv->compose_buffer[i]); +- break; +- } ++ ch = dead_key_to_unicode (priv->compose_buffer[i], &need_space); + if (ch) + { + if (need_space) |