diff options
author | Matthias Clasen <mclasen@redhat.com> | 2021-04-15 22:21:51 +0000 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2021-04-15 22:21:51 +0000 |
commit | 915d0b39a94f745f8cce4bc07187ef435d78cc06 (patch) | |
tree | 43e2fc8c478a9afb97211b78aee096de88ef690c | |
parent | d9a3e07b7ff8da33cdac4b31f136f8492db4a1cf (diff) | |
parent | a926f217d77ac33017e5c6d90dc5beb746449650 (diff) | |
download | gtk+-915d0b39a94f745f8cce4bc07187ef435d78cc06.tar.gz |
Merge branch 'im-context-event-leak-3' into 'gtk-3-24'
imcontext: Eat key events during preedit
See merge request GNOME/gtk!3442
-rw-r--r-- | gtk/gtkimcontextsimple.c | 29 |
1 files changed, 22 insertions, 7 deletions
diff --git a/gtk/gtkimcontextsimple.c b/gtk/gtkimcontextsimple.c index 7ab3e4382b..89221ce80e 100644 --- a/gtk/gtkimcontextsimple.c +++ b/gtk/gtkimcontextsimple.c @@ -731,13 +731,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 (event->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_keymap_get_modifier_mask (gdk_keymap_get_for_display (display), GDK_MODIFIER_INTENT_PRIMARY_ACCELERATOR); @@ -776,16 +784,23 @@ gtk_im_context_simple_filter_keypress (GtkIMContext *context, gdk_keymap_get_modifier_mask (gdk_keymap_get_for_display (display), GDK_MODIFIER_INTENT_NO_TEXT_INPUT); - if (event->state & no_text_input_mask || - (priv->in_hex_sequence && priv->modifiers_dropped && - (event->keyval == GDK_KEY_Return || - event->keyval == GDK_KEY_ISO_Enter || - event->keyval == GDK_KEY_KP_Enter))) + if (priv->in_hex_sequence && priv->modifiers_dropped && + (event->keyval == GDK_KEY_Return || + event->keyval == GDK_KEY_ISO_Enter || + event->keyval == GDK_KEY_KP_Enter)) { return FALSE; } + + if (event->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) { |