imcontext: Treat keysyms as 32bit values

Our compose table format is still limited to 16bit
values for keysyms, but what we see in key events
can be 32bit values, and we treat them as such now.

Fixes: #4149
This commit is contained in:
Matthias Clasen 2021-08-02 19:15:16 -04:00
parent 5df323fb64
commit bbc36448fb
4 changed files with 24 additions and 24 deletions

View File

@ -493,7 +493,7 @@ parser_remove_duplicates (GtkComposeParser *parser)
g_hash_table_iter_init (&iter, parser->sequences);
while (g_hash_table_iter_next (&iter, (gpointer *)&sequence, (gpointer *)&value))
{
static guint16 keysyms[MAX_COMPOSE_LEN + 1];
static guint keysyms[MAX_COMPOSE_LEN + 1];
int i;
int n_compose = 0;
gboolean remove_sequence = FALSE;
@ -515,8 +515,8 @@ parser_remove_duplicates (GtkComposeParser *parser)
for (i = 0; i < MAX_COMPOSE_LEN + 1; i++)
{
gunichar codepoint = sequence[i];
keysyms[i] = (guint16) codepoint;
guint codepoint = sequence[i];
keysyms[i] = codepoint;
if (codepoint == 0)
break;
@ -1217,7 +1217,7 @@ static int
compare_seq (const void *key, const void *value)
{
int i = 0;
const guint16 *keysyms = key;
const guint *keysyms = key;
const guint16 *seq = value;
while (keysyms[i])
@ -1236,7 +1236,7 @@ compare_seq (const void *key, const void *value)
static int
compare_seq_index (const void *key, const void *value)
{
const guint16 *keysyms = key;
const guint *keysyms = key;
const guint16 *seq = value;
if (keysyms[0] < seq[0])
@ -1262,7 +1262,7 @@ compare_seq_index (const void *key, const void *value)
*/
gboolean
gtk_compose_table_check (const GtkComposeTable *table,
const guint16 *compose_buffer,
const guint *compose_buffer,
int n_compose,
gboolean *compose_finish,
gboolean *compose_match,
@ -1356,7 +1356,7 @@ gtk_compose_table_check (const GtkComposeTable *table,
void
gtk_compose_table_get_prefix (const GtkComposeTable *table,
const guint16 *compose_buffer,
const guint *compose_buffer,
int n_compose,
int *prefix)
{
@ -1381,7 +1381,7 @@ gtk_compose_table_get_prefix (const GtkComposeTable *table,
for (k = 0; k < MIN (len, n_compose) - 1; k++)
{
if (compose_buffer[k + 1] != (gunichar) table->data[j + k])
if (compose_buffer[k + 1] != table->data[j + k])
break;
}
p = MAX (p, k + 1);
@ -1463,9 +1463,9 @@ gtk_compose_table_foreach (const GtkComposeTable *table,
((k) >= GDK_KEY_dead_grave && (k) <= GDK_KEY_dead_greek)
gboolean
gtk_check_algorithmically (const guint16 *compose_buffer,
int n_compose,
GString *output)
gtk_check_algorithmically (const guint *compose_buffer,
int n_compose,
GString *output)
{
int i;

View File

@ -74,18 +74,18 @@ void gtk_compose_table_foreach (const GtkComposeTable *table,
gpointer data);
gboolean gtk_compose_table_check (const GtkComposeTable *table,
const guint16 *compose_buffer,
const guint *compose_buffer,
int n_compose,
gboolean *compose_finish,
gboolean *compose_match,
GString *output);
void gtk_compose_table_get_prefix (const GtkComposeTable *table,
const guint16 *compose_buffer,
const guint *compose_buffer,
int n_compose,
int *prefix);
gboolean gtk_check_algorithmically (const guint16 *compose_buffer,
gboolean gtk_check_algorithmically (const guint *compose_buffer,
int n_compose,
GString *output);

View File

@ -79,7 +79,7 @@
struct _GtkIMContextSimplePrivate
{
guint16 *compose_buffer;
guint *compose_buffer;
int compose_buffer_len;
GString *tentative_match;
int tentative_match_len;
@ -118,7 +118,7 @@ init_builtin_table (void)
G_LOCK_DEFINE_STATIC (global_tables);
static GSList *global_tables;
static const guint16 gtk_compose_ignore[] = {
static const guint gtk_compose_ignore[] = {
0, /* Yes, XKB will send us key press events with NoSymbol :( */
GDK_KEY_Overlay1_Enable,
GDK_KEY_Overlay2_Enable,
@ -384,7 +384,7 @@ gtk_im_context_simple_init (GtkIMContextSimple *context_simple)
priv = context_simple->priv = gtk_im_context_simple_get_instance_private (context_simple);
priv->compose_buffer_len = builtin_compose_table.max_seq_len + 1;
priv->compose_buffer = g_new0 (guint16, priv->compose_buffer_len);
priv->compose_buffer = g_new0 (guint, priv->compose_buffer_len);
priv->tentative_match = g_string_new ("");
priv->tentative_match_len = 0;
}
@ -635,12 +635,12 @@ no_sequence_matches (GtkIMContextSimple *context_simple,
{
int len = priv->tentative_match_len;
int i;
guint16 *compose_buffer;
guint *compose_buffer;
char *str;
compose_buffer = alloca (sizeof (guint16) * priv->compose_buffer_len);
compose_buffer = alloca (sizeof (guint) * priv->compose_buffer_len);
memcpy (compose_buffer, priv->compose_buffer, sizeof (guint16) * priv->compose_buffer_len);
memcpy (compose_buffer, priv->compose_buffer, sizeof (guint) * priv->compose_buffer_len);
str = g_strdup (priv->tentative_match->str);
gtk_im_context_simple_commit_string (context_simple, str);
@ -1015,7 +1015,7 @@ gtk_im_context_simple_filter_keypress (GtkIMContext *context,
if (n_compose + 1 == priv->compose_buffer_len)
{
priv->compose_buffer_len += 1;
priv->compose_buffer = g_renew (guint16, priv->compose_buffer, priv->compose_buffer_len);
priv->compose_buffer = g_renew (guint, priv->compose_buffer, priv->compose_buffer_len);
}
priv->compose_buffer[n_compose++] = keyval;

View File

@ -171,7 +171,7 @@ compose_table_match (void)
{
GtkComposeTable *table;
char *file;
guint16 buffer[8] = { 0, };
guint buffer[8] = { 0, };
gboolean finish, match, ret;
GString *output;
@ -240,7 +240,7 @@ static void
compose_table_match_builtin (void)
{
const GtkComposeTable *table = &builtin_compose_table;
guint16 buffer[8] = { 0, };
guint buffer[8] = { 0, };
gboolean finish, match, ret;
GString *s;
@ -308,7 +308,7 @@ compose_table_match_builtin (void)
static void
match_algorithmic (void)
{
guint16 buffer[8] = { 0, };
guint buffer[8] = { 0, };
gboolean ret;
GString *output;