Takashi Iwai
d9591a26ae
Fix dead keys with non-English keyboard in some applications (MAME, Wine) (boo#1218135) OBS-URL: https://build.opensuse.org/request/show/1145090 OBS-URL: https://build.opensuse.org/package/show/M17N/ibus?expand=0&rev=285
67 lines
2.9 KiB
Diff
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;
|