Fix game control keys with language layout

This commit is contained in:
Takao Fujiwara 2023-12-21 09:34:20 +09:00
parent 93ea339c0f
commit 27145fdaf3
2 changed files with 75 additions and 1 deletions

View File

@ -1622,3 +1622,74 @@ index e3fab8d9..26bded99 100644
--
2.41.0
From 4872c1fcdc8bbe146e967d004edf63f5994b21f8 Mon Sep 17 00:00:00 2001
From: fujiwarat <takao.fujiwara1@gmail.com>
Date: Thu, 21 Dec 2023 08:26:48 +0900
Subject: [PATCH] src/ibusenginesimple.c: Don't commit any characters
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(-)
diff --git a/client/gtk2/ibusimcontext.c b/client/gtk2/ibusimcontext.c
index cfc08c20..ebc8d869 100644
--- a/client/gtk2/ibusimcontext.c
+++ b/client/gtk2/ibusimcontext.c
@@ -361,6 +361,12 @@ ibus_im_context_commit_event (IBusIMContext *ibusimcontext,
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);
diff --git a/src/ibusenginesimple.c b/src/ibusenginesimple.c
index 31cb416c..4bee8cb3 100644
--- a/src/ibusenginesimple.c
+++ b/src/ibusenginesimple.c
@@ -647,12 +647,17 @@ no_sequence_matches (IBusEngineSimple *simple,
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;
--
2.43.0

View File

@ -58,7 +58,7 @@
Name: ibus
Version: 1.5.29~rc2
Release: 5%{?dist}
Release: 6%{?dist}
Summary: Intelligent Input Bus for Linux OS
License: LGPL-2.1-or-later
URL: https://github.com/ibus/%name/wiki
@ -581,6 +581,9 @@ dconf update || :
%{_datadir}/installed-tests/ibus
%changelog
* Thu Dec 21 2023 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.29~rc2-6
- Fix game control keys with language layout
* Fri Dec 15 2023 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.29~rc2-5
- Refactor object initialization
- Fix some warnings