summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gtk/gtkimcontextsimple.c29
1 files changed, 22 insertions, 7 deletions
diff --git a/gtk/gtkimcontextsimple.c b/gtk/gtkimcontextsimple.c
index 71044294e5..a3a2c54c8f 100644
--- a/gtk/gtkimcontextsimple.c
+++ b/gtk/gtkimcontextsimple.c
@@ -761,13 +761,21 @@ gtk_im_context_simple_filter_keypress (GtkIMContext *context,
}
}
+ if (priv->in_hex_sequence || priv->in_compose_sequence)
+ return TRUE; /* Don't leak random key events during preedit */
+
return FALSE;
}
/* Ignore modifier key presses */
for (i = 0; i < G_N_ELEMENTS (gtk_compose_ignore); i++)
if (keyval == gtk_compose_ignore[i])
- return FALSE;
+ {
+ if (priv->in_hex_sequence || priv->in_compose_sequence)
+ return TRUE; /* Don't leak random key events during preedit */
+
+ return FALSE;
+ }
hex_mod_mask = GDK_CONTROL_MASK|GDK_SHIFT_MASK;
@@ -802,16 +810,23 @@ gtk_im_context_simple_filter_keypress (GtkIMContext *context,
no_text_input_mask = GDK_ALT_MASK|GDK_CONTROL_MASK;
- if (state & no_text_input_mask ||
- (priv->in_hex_sequence && priv->modifiers_dropped &&
- (keyval == GDK_KEY_Return ||
- keyval == GDK_KEY_ISO_Enter ||
- keyval == GDK_KEY_KP_Enter)))
+ if (priv->in_hex_sequence && priv->modifiers_dropped &&
+ (keyval == GDK_KEY_Return ||
+ keyval == GDK_KEY_ISO_Enter ||
+ keyval == GDK_KEY_KP_Enter))
{
return FALSE;
}
+
+ if (state & no_text_input_mask)
+ {
+ if (priv->in_hex_sequence || priv->in_compose_sequence)
+ return TRUE; /* Don't leak random key events during preedit */
+
+ return FALSE;
+ }
}
-
+
/* Handle backspace */
if (priv->in_hex_sequence && have_hex_mods && is_backspace)
{