diff --git a/gtk/gtkcomposetable.c b/gtk/gtkcomposetable.c index 538003923a..a369abbd90 100644 --- a/gtk/gtkcomposetable.c +++ b/gtk/gtkcomposetable.c @@ -231,7 +231,7 @@ parse_compose_sequence (const char *seq, char *start = words[i]; char *end = strchr (words[i], '>'); char *match; - gunichar codepoint; + guint keyval; if (words[i][0] == '\0') continue; @@ -248,18 +248,24 @@ parse_compose_sequence (const char *seq, if (is_codepoint (match)) { - codepoint = (gunichar) g_ascii_strtoll (match + 1, NULL, 16); - sequence[n] = codepoint; + keyval = gdk_unicode_to_keyval ((gunichar) g_ascii_strtoll (match + 1, NULL, 16)); + if (keyval > 0xffff) + g_warning ("Can't handle >16bit keyvals"); + + sequence[n] = (guint16) keyval; sequence[n + 1] = 0; } else { - codepoint = (gunichar) gdk_keyval_from_name (match); - sequence[n] = codepoint; + keyval = gdk_keyval_from_name (match); + if (keyval > 0xffff) + g_warning ("Can't handle >16bit keyvals"); + + sequence[n] = (guint16) keyval; sequence[n + 1] = 0; } - if (codepoint == GDK_KEY_VoidSymbol) + if (keyval == GDK_KEY_VoidSymbol) g_warning ("Could not get code point of keysym %s", match); g_free (match); n++;