From: fujiwarat Date: Thu, 21 Dec 2023 08:26:48 +0900 Subject: src/ibusenginesimple.c: Don't commit any characters Git-commit: 4872c1fcdc8bbe146e967d004edf63f5994b21f8 Patch-mainline: yes References: boo#1218135 Revert a part of the previous patch of #2495 because it explains "Super-space and space key can launch IBus Emojier." but I cannot remember what I tried to fix. IBus XKB engines should not commit any keysyms before the key event is sent to the application with IBUS_IGNORED_MASK flag even if the key is not an ASCII because any characters can be control characters by application. E.g. VIM cursor mode "hjkl" keys or game cursor keys with language layouts. Fixes: https://github.com/ibus/ibus/commit/ad883dc BUG=https://github.com/ibus/ibus/issues/2588 --- client/gtk2/ibusimcontext.c | 6 ++++++ src/ibusenginesimple.c | 15 ++++++++++----- 2 files changed, 16 insertions(+), 5 deletions(-) --- ibus-1.5.29-rc2.orig/client/gtk2/ibusimcontext.c +++ ibus-1.5.29-rc2/client/gtk2/ibusimcontext.c @@ -361,6 +361,12 @@ ibus_im_context_commit_event (IBusIMCont keyval == GDK_KEY_KP_Enter) { return FALSE; } + /* #2588 If IBus tries to commit a character, it should be forwarded to + * the application at once with IBUS_IGNORED_MASK before the actual + * commit because any characters can be control characters even if + * they are not ASCII characters, e.g. game cursor keys with a + * language keyboard layout likes VIM cursor mode "hjkl" keys. + */ ch = ibus_keyval_to_unicode (keyval); if (ch != 0 && !g_unichar_iscntrl (ch)) { IBusText *text = ibus_text_new_from_unichar (ch); --- ibus-1.5.29-rc2.orig/src/ibusenginesimple.c +++ ibus-1.5.29-rc2/src/ibusenginesimple.c @@ -647,12 +647,17 @@ no_sequence_matches (IBusEngineSimple *s ibus_engine_simple_update_preedit_text (simple); ch = ibus_keyval_to_unicode (keyval); - /* IBUS_CHANGE: RH#769133 - * Since we use ibus xkb engines as the disable state, - * Super-space and space key can launch IBus Emojier. + /* IBUS_CHANGE: RH#769133, #2588 + * Since we use ibus xkb engines as the disable IM mode, + * do not commit the characters locally without in_hex_sequence. + * If IBus tries to commit a character, it should be forwarded to + * the application at once with IBUS_IGNORED_MASK before the actual + * commit because any characters can be control characters even if + * they are not ASCII characters, e.g. game cursor keys with a + * language keyboard layout likes VIM cursor mode "hjkl" keys. */ - if (ch != 0 && !g_unichar_iscntrl (ch) && ch > 0x7F) { - ibus_engine_simple_commit_char (simple, ch); + if (ch != 0 && !g_unichar_iscntrl (ch) && + priv->in_hex_sequence) { return TRUE; } else { return FALSE;