ibus/ibus-enginesimple-dont-commit-any-characters.patch
2024-02-08 11:20:49 +00:00

67 lines
2.9 KiB
Diff

From: fujiwarat <takao.fujiwara1@gmail.com>
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;