Enhance Xutf8TextListToTextProperty in ibus-x11

This commit is contained in:
Takao Fujiwara 2022-07-29 17:21:00 +09:00
parent aa6ee1ee71
commit 355503863c
2 changed files with 95 additions and 1 deletions

View File

@ -4435,3 +4435,94 @@ index f8dced6b..92464234 100755
-- --
2.35.3 2.35.3
From d47dbfada41aa4fb5df9f7cffe873786fc4849cc Mon Sep 17 00:00:00 2001
From: fujiwarat <takao.fujiwara1@gmail.com>
Date: Mon, 25 Jul 2022 17:22:21 +0900
Subject: [PATCH] client/x11: Enhance Xutf8TextListToTextProperty
XCompoundTextStyle depends on the current locale and some locales fail
to to get the compound text style.
If Xutf8TextListToTextProperty() fails, now ibus-x11 tries to get
the compound text style with UTF-8 encoding.
BUG=https://github.com/ibus/ibus/issues/2422
---
client/x11/main.c | 41 ++++++++++++++++++++++++++++++++++-------
1 file changed, 34 insertions(+), 7 deletions(-)
diff --git a/client/x11/main.c b/client/x11/main.c
index fe30c1d6..6057cc03 100644
--- a/client/x11/main.c
+++ b/client/x11/main.c
@@ -2,7 +2,7 @@
/* vim:set et sts=4: */
/* ibus
* Copyright (C) 2007-2015 Peng Huang <shawn.p.huang@gmail.com>
- * Copyright (C) 2015-2021 Takao Fujiwara <takao.fujiwara1@gmail.com>
+ * Copyright (C) 2015-2022 Takao Fujiwara <takao.fujiwara1@gmail.com>
* Copyright (C) 2007-2015 Red Hat, Inc.
*
* main.c:
@@ -48,6 +48,8 @@
#include <getopt.h>
+#define ESC_SEQUENCE_ISO10646_1 "\033%G"
+
#define LOG(level, fmt_args...) \
if (g_debug_level >= (level)) { \
g_debug (fmt_args); \
@@ -254,9 +256,17 @@ _xim_preedit_callback_draw (XIMS xims, X11IC *x11ic, const gchar *preedit_string
text.feedback = feedback;
if (len > 0) {
- Xutf8TextListToTextProperty (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()),
- (char **)&preedit_string,
- 1, XCompoundTextStyle, &tp);
+ int ret = Xutf8TextListToTextProperty (
+ GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()),
+ (char **)&preedit_string,
+ 1, XCompoundTextStyle, &tp);
+ if (ret == EXIT_FAILURE) {
+ XFree (tp.value);
+ tp.value = (unsigned char *)g_strdup_printf (
+ "%s%s",
+ ESC_SEQUENCE_ISO10646_1,
+ preedit_string);
+ }
text.encoding_is_wchar = 0;
text.length = strlen ((char*)tp.value);
text.string.multi_byte = (char*)tp.value;
@@ -883,9 +893,26 @@ _context_commit_text_cb (IBusInputContext *context,
XTextProperty tp;
IMCommitStruct cms = {0};
-
- Xutf8TextListToTextProperty (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()),
- (gchar **)&(text->text), 1, XCompoundTextStyle, &tp);
+ int ret;
+
+ ret = Xutf8TextListToTextProperty (
+ GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()),
+ (gchar **)&(text->text), 1, XCompoundTextStyle, &tp);
+ /* XCompoundTextStyle uses the encoding escaped sequence + encoded chars
+ * matched to the specified multibyte characters: text->text, and
+ * libX11.so sorts the encoding sets by locale.
+ * If an encoded string fails to be matched, ibus-x11 specifies the
+ * ISO10641-1 encoding and that escaped sequence is "\033%G":
+ * https://gitlab.freedesktop.org/xorg/lib/libx11/-/blob/master/src/xlibi18n/lcCT.c
+ * , and the encoding is UTF-8 with utf8_wctomb():
+ * https://gitlab.freedesktop.org/xorg/lib/libx11/-/blob/master/src/xlibi18n/lcUniConv/utf8.h
+ */
+ if (ret == EXIT_FAILURE) {
+ XFree (tp.value);
+ tp.value = (unsigned char *)g_strdup_printf ("%s%s",
+ ESC_SEQUENCE_ISO10646_1,
+ text->text);
+ }
cms.major_code = XIM_COMMIT;
cms.icid = x11ic->icid;
--
2.35.3

View File

@ -39,7 +39,7 @@
Name: ibus Name: ibus
Version: 1.5.26 Version: 1.5.26
Release: 14%{?dist} Release: 15%{?dist}
Summary: Intelligent Input Bus for Linux OS Summary: Intelligent Input Bus for Linux OS
License: LGPLv2+ License: LGPLv2+
URL: https://github.com/ibus/%name/wiki URL: https://github.com/ibus/%name/wiki
@ -524,6 +524,9 @@ dconf update || :
%{_datadir}/installed-tests/ibus %{_datadir}/installed-tests/ibus
%changelog %changelog
* Fri Jul 29 2022 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.26-15
- Enhance Xutf8TextListToTextProperty in ibus-x11
* Thu Jul 21 2022 Fedora Release Engineering <releng@fedoraproject.org> - 1.5.26-14 * Thu Jul 21 2022 Fedora Release Engineering <releng@fedoraproject.org> - 1.5.26-14
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild - Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild