diff options
author | Christian Hergert <christian@hergert.me> | 2022-11-18 20:27:02 +0000 |
---|---|---|
committer | Christian Hergert <christian@hergert.me> | 2022-11-18 15:27:27 -0500 |
commit | 9d85b0868cb814d357f3b85da2c8355cfadecffb (patch) | |
tree | fe9f3b53e38c3eb647153b1d0dd099a9a9dc7f8c | |
parent | f7ebabdd957d5ef107c97b087042dc993e0848a7 (diff) | |
download | gtksourceview-9d85b0868cb814d357f3b85da2c8355cfadecffb.tar.gz |
Merge branch 'wip/chergert/insert-fixes' into 'master'
vim: ignore gtk_text_view_im_context_filter_keypress
See merge request GNOME/gtksourceview!297
(cherry picked from commit 834373dbeb604c630644ba9a44a2948020b32542)
26c2549d vim: ignore gtk_text_view_im_context_filter_keypress
-rw-r--r-- | gtksourceview/vim/gtksourceviminsert.c | 31 |
1 files changed, 22 insertions, 9 deletions
diff --git a/gtksourceview/vim/gtksourceviminsert.c b/gtksourceview/vim/gtksourceviminsert.c index 477ff8b8..85347308 100644 --- a/gtksourceview/vim/gtksourceviminsert.c +++ b/gtksourceview/vim/gtksourceviminsert.c @@ -171,25 +171,38 @@ gtk_source_vim_insert_handle_event (GtkSourceVimState *state, g_assert (GTK_SOURCE_IS_VIM_INSERT (self)); g_assert (event != NULL); - if (!(view = gtk_source_vim_state_get_view (state))) + view = gtk_source_vim_state_get_view (state); + + /* We only handle keypress, otherwise defer to the normal event processing + * flow and/or input methods. + */ + if (view == NULL || gdk_event_get_event_type (event) != GDK_KEY_PRESS) + { return FALSE; + } + /* gtk_text_view_im_context_filter_keypress() will always filter input that + * can be converted into an GtkIMContext::commit emission so we must check + * to see if any of our handlers will check first. + * + * This has a sort of annoying impact with the underlying input method that + * we could collide, but there doesn't seem to be much we can do about that. + * + * https://gitlab.gnome.org/GNOME/gtk/-/issues/5349 + */ keyval = gdk_key_event_get_keyval (event); keycode = gdk_key_event_get_keycode (event); mods = gdk_event_get_modifier_state (event) & gtk_accelerator_get_default_mod_mask (); - /* Allow input methods to complete */ - if (gtk_text_view_im_context_filter_keypress (GTK_TEXT_VIEW (view), event)) - return TRUE; + gtk_source_vim_state_keyval_to_string (keyval, mods, string); - /* Only deal with presses after this */ - if (gdk_event_get_event_type (event) != GDK_KEY_PRESS) + if (GTK_SOURCE_VIM_STATE_GET_CLASS (self)->handle_keypress (state, keyval, keycode, mods, string)) + { return TRUE; + } - gtk_source_vim_state_keyval_to_string (keyval, mods, string); - - return GTK_SOURCE_VIM_STATE_GET_CLASS (self)->handle_keypress (state, keyval, keycode, mods, string); + return FALSE; } static void |