summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Hergert <christian@hergert.me>2022-11-18 20:27:02 +0000
committerChristian Hergert <christian@hergert.me>2022-11-18 15:27:27 -0500
commit9d85b0868cb814d357f3b85da2c8355cfadecffb (patch)
treefe9f3b53e38c3eb647153b1d0dd099a9a9dc7f8c
parentf7ebabdd957d5ef107c97b087042dc993e0848a7 (diff)
downloadgtksourceview-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.c31
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