diff --git a/ibus-2267615-wayland-init-keymap.patch b/ibus-2267615-wayland-init-keymap.patch deleted file mode 100644 index 4729ede..0000000 --- a/ibus-2267615-wayland-init-keymap.patch +++ /dev/null @@ -1,225 +0,0 @@ -From b6376d3a680f7f43583de7731629666b8dd85f01 Mon Sep 17 00:00:00 2001 -From: fujiwarat -Date: Fri, 22 Mar 2024 09:47:28 +0900 -Subject: [PATCH] ui/gtk3: Configure initial keymaps with localectl in Wayland - -`setxkbmap -query` returns US layout with Xwayland and it does not -correspond to the session keymaps so ibus-panel now uses -`localectl status` in Wayland but it does not provide the session -XKB options against `setxkbmap` command in Xorg. -Need to think how to load or set the XKB options in Wayland later. - -BUG=rhbz#2267615 ---- - ui/gtk3/panel.vala | 2 +- - ui/gtk3/xkblayout.vala | 123 ++++++++++++++++++++++++++++++----------- - 2 files changed, 91 insertions(+), 34 deletions(-) - -diff --git a/ui/gtk3/panel.vala b/ui/gtk3/panel.vala -index c7176619..3576972d 100644 ---- a/ui/gtk3/panel.vala -+++ b/ui/gtk3/panel.vala -@@ -509,7 +509,7 @@ class Panel : IBus.PanelService { - string layouts; - string variants; - string option; -- XKBLayout.get_layout(out layouts, out variants, out option); -+ m_xkblayout.get_layout(out layouts, out variants, out option); - - GLib.List xkb_engines = - new GLib.List(); -diff --git a/ui/gtk3/xkblayout.vala b/ui/gtk3/xkblayout.vala -index 729b48ce..7812c4bb 100644 ---- a/ui/gtk3/xkblayout.vala -+++ b/ui/gtk3/xkblayout.vala -@@ -4,7 +4,7 @@ - * - * Copyright(c) 2014 Red Hat, Inc. - * Copyright(c) 2014 Peng Huang -- * Copyright(c) 2014 Takao Fujiwara -+ * Copyright(c) 2014-2024 Takao Fujiwara - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public -@@ -25,11 +25,11 @@ - class XKBLayout - { - private const string XKB_COMMAND = "setxkbmap"; -- private const string XKB_QUERY_ARG = "-query"; - private const string XKB_LAYOUT_ARG = "-layout"; - private const string XMODMAP_COMMAND = "xmodmap"; - private const string[] XMODMAP_KNOWN_FILES = {".xmodmap", ".xmodmaprc", - ".Xmodmap", ".Xmodmaprc"}; -+ private string[] m_get_layout_args = {}; - private string[] m_xkb_latin_layouts = {}; - private string m_default_layout = ""; - private string m_default_variant = ""; -@@ -39,16 +39,23 @@ class XKBLayout - public XKBLayout() { - } - -+ - public void set_latin_layouts(string[] xkb_latin_layouts) { - m_xkb_latin_layouts = xkb_latin_layouts; - } - -- public static void get_layout(out string layout, -- out string variant, -- out string option) { -+ -+ public void get_layout(out string layout, -+ out string variant, -+ out string option) { -+ search_get_layout_program(); -+ if (m_get_layout_args[0] == null) { -+ warning("Not found localectl or setxkbmap command in PATH"); -+ return; -+ } - string[] exec_command = {}; -- exec_command += XKB_COMMAND; -- exec_command += XKB_QUERY_ARG; -+ foreach (unowned string arg in m_get_layout_args) -+ exec_command += arg; - string standard_output = null; - string standard_error = null; - int exit_status = 0; -@@ -69,46 +76,94 @@ class XKBLayout - } catch (GLib.SpawnError err) { - stderr.printf("IBUS_ERROR: %s\n", err.message); - } -- if (exit_status != 0) { -+ if (exit_status != 0) - stderr.printf("IBUS_ERROR: %s\n", standard_error ?? ""); -- } -- if (standard_output == null) { -+ if (standard_output == null) - return; -+ -+ if (exec_command[0] == "localectl") { -+ parse_localectl_status_str(standard_output, -+ out layout, -+ out variant, -+ out option); -+ } else if (exec_command[0] == XKB_COMMAND) { -+ parse_xkbmap_query_str(standard_output, -+ out layout, -+ out variant, -+ out option); - } -+ } -+ - -+ private void search_get_layout_program() { -+ if (m_get_layout_args[0] != null) -+ return; -+ string get_layout_command = null; -+ // setxkbmap can get the session XKB options in Xorg. -+ if (BindingCommon.default_is_xdisplay()) -+ get_layout_command = "setxkbmap -query"; -+ else if (GLib.Environment.find_program_in_path("localectl") != null) -+ get_layout_command = "localectl status"; -+ else if (GLib.Environment.find_program_in_path("setxkbmap") != null) -+ get_layout_command = "setxkbmap -query"; -+ if (get_layout_command != null) -+ m_get_layout_args = get_layout_command.split(" "); -+ } -+ -+ -+ private void parse_localectl_status_str(string standard_output, -+ out string layout, -+ out string variant, -+ out string option) { -+ layout = ""; -+ variant = ""; -+ option = ""; - foreach (string line in standard_output.split("\n")) { -- string element = "layout:"; -- string retval = ""; -- if (line.has_prefix(element)) { -- retval = line[element.length:line.length]; -- if (retval != null) { -- retval = retval.strip(); -+ const string[] elements = { "X11 Layout:", "X11 Variant:" }; -+ foreach (unowned string element in elements) { -+ string retval = ""; -+ int index = line.index_of(element); -+ if (index >= 0) { -+ retval = line[index + element.length:line.length]; -+ if (retval != null) -+ retval = retval.strip(); -+ if (element == elements[0]) -+ layout = retval; -+ else if (element == elements[1]) -+ variant = retval; - } -- layout = retval; - } -+ } -+ } - -- element = "variant:"; -- retval = ""; -- if (line.has_prefix(element)) { -- retval = line[element.length:line.length]; -- if (retval != null) { -- retval = retval.strip(); -- } -- variant = retval; -- } - -- element = "options:"; -- retval = ""; -- if (line.has_prefix(element)) { -- retval = line[element.length:line.length]; -- if (retval != null) { -- retval = retval.strip(); -+ private void parse_xkbmap_query_str(string standard_output, -+ out string layout, -+ out string variant, -+ out string option) { -+ layout = ""; -+ variant = ""; -+ option = ""; -+ foreach (string line in standard_output.split("\n")) { -+ const string[] elements = { "layout:", "variant:", "options:" }; -+ foreach (unowned string element in elements) { -+ string retval = ""; -+ if (line.has_prefix(element)) { -+ retval = line[element.length:line.length]; -+ if (retval != null) -+ retval = retval.strip(); -+ if (element == elements[0]) -+ layout = retval; -+ else if (element == elements[1]) -+ variant = retval; -+ else if (element == elements[2]) -+ option = retval; - } -- option = retval; - } - } - } - -+ - public void set_layout(IBus.EngineDesc engine) { - string layout = engine.get_layout(); - string variant = engine.get_layout_variant(); -@@ -206,6 +261,7 @@ class XKBLayout - run_xmodmap(); - } - -+ - public void run_xmodmap() { - if (!m_use_xmodmap) { - return; -@@ -246,6 +302,7 @@ class XKBLayout - } - } - -+ - public void set_use_xmodmap(bool use_xmodmap) { - m_use_xmodmap = use_xmodmap; - } --- -2.43.0 - diff --git a/ibus-HEAD.patch b/ibus-HEAD.patch index d3ccc73..8356b67 100644 --- a/ibus-HEAD.patch +++ b/ibus-HEAD.patch @@ -1,15 +1,62 @@ -From cf30db6d19fd0d3c46a5468b34c53a2b7ba5d3b6 Mon Sep 17 00:00:00 2001 +From 4059b9f43f4505c855677abde1b59fc13241ca58 Mon Sep 17 00:00:00 2001 From: fujiwarat -Date: Wed, 15 May 2024 23:30:59 +0900 -Subject: [PATCH] src/tests: Fix ibus-daemon in ibus-desktop-testing-runner +Date: Tue, 2 Apr 2024 23:34:07 +0900 +Subject: [PATCH 1/6] Makefile: Add check sum file + +--- + Makefile.am | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/Makefile.am b/Makefile.am +index 16548d25..88fdbd48 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -138,6 +138,14 @@ srpm: dist @PACKAGE_NAME@.spec + --define "_specdir `pwd`/rpm" \ + @PACKAGE_NAME@.spec + ++@PACKAGE_NAME@-@PACKAGE_VERSION@.%.sum: @PACKAGE_NAME@-@PACKAGE_VERSION@.% ++ f=`basename $@ .sum`; \ ++ printf "cksum %s %s %s\n" `cksum $$f` > $@; \ ++ printf "sha1sum %s %s\n" `sha1sum $$f` >> $@; \ ++ printf "sha256sum %s %s\n" `sha256sum $$f` >> $@; \ ++ printf "sha512sum %s %s\n" `sha512sum $$f` >> $@; \ ++ $(NULL) ++ + clean-rpm: + -$(RM) -r "`uname -i`" + +-- +2.45.0 + +From e39345af20c1dd9b18cdb6ccb5039b03e4135f73 Mon Sep 17 00:00:00 2001 +From: fujiwarat +Date: Fri, 24 May 2024 13:18:42 +0900 +Subject: [PATCH 2/6] src/tests: Fix ibus-daemon in ibus-desktop-testing-runner Some distributions do not need the IBus panel and gnome-shell also does not need it. Add --verbose option to get ibus-daemon error messages. ---- - src/tests/ibus-desktop-testing-runner.in | 15 ++++++++++++--- - 1 file changed, 12 insertions(+), 3 deletions(-) +Add vala check in autogen.sh since valac changes the source codes. +--- + autogen.sh | 2 +- + src/tests/ibus-desktop-testing-runner.in | 17 ++++++++++++++--- + 2 files changed, 15 insertions(+), 4 deletions(-) + +diff --git a/autogen.sh b/autogen.sh +index d6f8f983..90e126ec 100755 +--- a/autogen.sh ++++ b/autogen.sh +@@ -14,7 +14,7 @@ GCC_VERSION=$(gcc --version | head -1 | awk '{print $3}') + GCC_MAJOR_VERSION=$(echo "$GCC_VERSION" | awk -F. '{print $1}') + FEDORA_PKG1='autoconf automake libtool gettext-devel' + FEDORA_PKG2='glib2-devel gtk2-devel gtk3-devel +- wayland-devel' ++ wayland-devel vala' + FEDORA_PKG3='cldr-emoji-annotation iso-codes-devel unicode-emoji unicode-ucd + xkeyboard-config-devel' + diff --git a/src/tests/ibus-desktop-testing-runner.in b/src/tests/ibus-desktop-testing-runner.in index 6b208345..1ac2dfc8 100755 --- a/src/tests/ibus-desktop-testing-runner.in @@ -77,3 +124,932 @@ index 6b208345..1ac2dfc8 100755 -- 2.45.0 +From f190da19b53c267ca1c9730e18f1b53c089c0247 Mon Sep 17 00:00:00 2001 +From: fujiwarat +Date: Fri, 24 May 2024 15:37:00 +0900 +Subject: [PATCH 3/6] ui/gtk3: Configure initial keymaps with localectl in + Wayland + +`setxkbmap -query` returns US layout with Xwayland and it does not +correspond to the session keymaps so ibus-panel now uses +`localectl status` in Wayland but it does not provide the session +XKB options against `setxkbmap` command in Xorg. +Need to think how to load or set the XKB options in Wayland later. + +BUG=rhbz#2267615 +BUG=https://github.com/ibus/ibus/pull/2624 +--- + src/tests/ibus-keypress.c | 40 +++++++++---- + ui/gtk3/panel.vala | 2 +- + ui/gtk3/xkblayout.vala | 123 ++++++++++++++++++++++++++++---------- + 3 files changed, 119 insertions(+), 46 deletions(-) + +diff --git a/src/tests/ibus-keypress.c b/src/tests/ibus-keypress.c +index bab05398..d44f39b2 100644 +--- a/src/tests/ibus-keypress.c ++++ b/src/tests/ibus-keypress.c +@@ -5,6 +5,14 @@ + #include + #include + ++#ifdef GDK_WINDOWING_WAYLAND ++#if GTK_CHECK_VERSION (3, 98, 4) ++#include ++#else ++#include ++#endif ++#endif ++ + #define GREEN "\033[0;32m" + #define RED "\033[0;31m" + #define NC "\033[0m" +@@ -186,15 +194,8 @@ set_engine_cb (GObject *object, + } + + display = gtk_widget_get_display (entry); +- if (GDK_IS_X11_DISPLAY (display)) { +- xdisplay = gdk_x11_display_get_xdisplay (display); +- } else { +-#if 0 +- xdisplay = XOpenDisplay (NULL); +-#else +- g_critical ("No idea to simulate key events in Wayland\n"); +-#endif +- } ++ g_assert (GDK_IS_X11_DISPLAY (display)); ++ xdisplay = gdk_x11_display_get_xdisplay (display); + g_return_if_fail (xdisplay); + + for (i = 0; test_cases[i][0].keyval; i++) { +@@ -272,12 +273,18 @@ create_window () + static void + test_keypress (void) + { ++ gchar *path; + int status = 0; + GError *error = NULL; + +- g_spawn_command_line_sync ("setxkbmap -layout us", +- NULL, NULL, +- &status, &error); ++ /* localectl does not change the session keymap. */ ++ path = g_find_program_in_path ("setxkbmap"); ++ if (path) { ++ g_spawn_command_line_sync ("setxkbmap -layout us", ++ NULL, NULL, ++ &status, &error); ++ } ++ g_free (path); + g_assert (register_ibus_engine ()); + + create_window (); +@@ -295,6 +302,15 @@ main (int argc, char *argv[]) + g_message ("Failed setenv NO_AT_BRIDGE\n"); + g_test_init (&argc, &argv, NULL); + gtk_init (&argc, &argv); ++#ifdef GDK_WINDOWING_WAYLAND ++ { ++ GdkDisplay *display = gdk_display_get_default (); ++ if (GDK_IS_WAYLAND_DISPLAY (display)) { ++ g_print ("setxkbmap and XTEST do not work in Wayland.\n"); ++ return 0; ++ } ++ } ++#endif + + g_test_add_func ("/ibus/keyrepss", test_keypress); + +diff --git a/ui/gtk3/panel.vala b/ui/gtk3/panel.vala +index 678b51f0..d907458e 100644 +--- a/ui/gtk3/panel.vala ++++ b/ui/gtk3/panel.vala +@@ -510,7 +510,7 @@ class Panel : IBus.PanelService { + string layouts; + string variants; + string option; +- XKBLayout.get_layout(out layouts, out variants, out option); ++ m_xkblayout.get_layout(out layouts, out variants, out option); + + GLib.List xkb_engines = + new GLib.List(); +diff --git a/ui/gtk3/xkblayout.vala b/ui/gtk3/xkblayout.vala +index 729b48ce..7812c4bb 100644 +--- a/ui/gtk3/xkblayout.vala ++++ b/ui/gtk3/xkblayout.vala +@@ -4,7 +4,7 @@ + * + * Copyright(c) 2014 Red Hat, Inc. + * Copyright(c) 2014 Peng Huang +- * Copyright(c) 2014 Takao Fujiwara ++ * Copyright(c) 2014-2024 Takao Fujiwara + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public +@@ -25,11 +25,11 @@ + class XKBLayout + { + private const string XKB_COMMAND = "setxkbmap"; +- private const string XKB_QUERY_ARG = "-query"; + private const string XKB_LAYOUT_ARG = "-layout"; + private const string XMODMAP_COMMAND = "xmodmap"; + private const string[] XMODMAP_KNOWN_FILES = {".xmodmap", ".xmodmaprc", + ".Xmodmap", ".Xmodmaprc"}; ++ private string[] m_get_layout_args = {}; + private string[] m_xkb_latin_layouts = {}; + private string m_default_layout = ""; + private string m_default_variant = ""; +@@ -39,16 +39,23 @@ class XKBLayout + public XKBLayout() { + } + ++ + public void set_latin_layouts(string[] xkb_latin_layouts) { + m_xkb_latin_layouts = xkb_latin_layouts; + } + +- public static void get_layout(out string layout, +- out string variant, +- out string option) { ++ ++ public void get_layout(out string layout, ++ out string variant, ++ out string option) { ++ search_get_layout_program(); ++ if (m_get_layout_args[0] == null) { ++ warning("Not found localectl or setxkbmap command in PATH"); ++ return; ++ } + string[] exec_command = {}; +- exec_command += XKB_COMMAND; +- exec_command += XKB_QUERY_ARG; ++ foreach (unowned string arg in m_get_layout_args) ++ exec_command += arg; + string standard_output = null; + string standard_error = null; + int exit_status = 0; +@@ -69,46 +76,94 @@ class XKBLayout + } catch (GLib.SpawnError err) { + stderr.printf("IBUS_ERROR: %s\n", err.message); + } +- if (exit_status != 0) { ++ if (exit_status != 0) + stderr.printf("IBUS_ERROR: %s\n", standard_error ?? ""); +- } +- if (standard_output == null) { ++ if (standard_output == null) + return; ++ ++ if (exec_command[0] == "localectl") { ++ parse_localectl_status_str(standard_output, ++ out layout, ++ out variant, ++ out option); ++ } else if (exec_command[0] == XKB_COMMAND) { ++ parse_xkbmap_query_str(standard_output, ++ out layout, ++ out variant, ++ out option); + } ++ } ++ + ++ private void search_get_layout_program() { ++ if (m_get_layout_args[0] != null) ++ return; ++ string get_layout_command = null; ++ // setxkbmap can get the session XKB options in Xorg. ++ if (BindingCommon.default_is_xdisplay()) ++ get_layout_command = "setxkbmap -query"; ++ else if (GLib.Environment.find_program_in_path("localectl") != null) ++ get_layout_command = "localectl status"; ++ else if (GLib.Environment.find_program_in_path("setxkbmap") != null) ++ get_layout_command = "setxkbmap -query"; ++ if (get_layout_command != null) ++ m_get_layout_args = get_layout_command.split(" "); ++ } ++ ++ ++ private void parse_localectl_status_str(string standard_output, ++ out string layout, ++ out string variant, ++ out string option) { ++ layout = ""; ++ variant = ""; ++ option = ""; + foreach (string line in standard_output.split("\n")) { +- string element = "layout:"; +- string retval = ""; +- if (line.has_prefix(element)) { +- retval = line[element.length:line.length]; +- if (retval != null) { +- retval = retval.strip(); ++ const string[] elements = { "X11 Layout:", "X11 Variant:" }; ++ foreach (unowned string element in elements) { ++ string retval = ""; ++ int index = line.index_of(element); ++ if (index >= 0) { ++ retval = line[index + element.length:line.length]; ++ if (retval != null) ++ retval = retval.strip(); ++ if (element == elements[0]) ++ layout = retval; ++ else if (element == elements[1]) ++ variant = retval; + } +- layout = retval; + } ++ } ++ } + +- element = "variant:"; +- retval = ""; +- if (line.has_prefix(element)) { +- retval = line[element.length:line.length]; +- if (retval != null) { +- retval = retval.strip(); +- } +- variant = retval; +- } + +- element = "options:"; +- retval = ""; +- if (line.has_prefix(element)) { +- retval = line[element.length:line.length]; +- if (retval != null) { +- retval = retval.strip(); ++ private void parse_xkbmap_query_str(string standard_output, ++ out string layout, ++ out string variant, ++ out string option) { ++ layout = ""; ++ variant = ""; ++ option = ""; ++ foreach (string line in standard_output.split("\n")) { ++ const string[] elements = { "layout:", "variant:", "options:" }; ++ foreach (unowned string element in elements) { ++ string retval = ""; ++ if (line.has_prefix(element)) { ++ retval = line[element.length:line.length]; ++ if (retval != null) ++ retval = retval.strip(); ++ if (element == elements[0]) ++ layout = retval; ++ else if (element == elements[1]) ++ variant = retval; ++ else if (element == elements[2]) ++ option = retval; + } +- option = retval; + } + } + } + ++ + public void set_layout(IBus.EngineDesc engine) { + string layout = engine.get_layout(); + string variant = engine.get_layout_variant(); +@@ -206,6 +261,7 @@ class XKBLayout + run_xmodmap(); + } + ++ + public void run_xmodmap() { + if (!m_use_xmodmap) { + return; +@@ -246,6 +302,7 @@ class XKBLayout + } + } + ++ + public void set_use_xmodmap(bool use_xmodmap) { + m_use_xmodmap = use_xmodmap; + } +-- +2.45.0 + +From 48c4a9c900421b9e77be399a4792974f25a80be6 Mon Sep 17 00:00:00 2001 +From: fujiwarat +Date: Fri, 24 May 2024 16:17:58 +0900 +Subject: [PATCH 4/6] src/ibusenginesimple: Ignore Super modifier for compose + keys + +Now IBus receives key events prior to the window manager and needs +to ignore Super modifier since Super key has been already ignored +for compose keys. + +BUG=https://gitlab.gnome.org/GNOME/mutter/-/issues/3128 +--- + src/ibusenginesimple.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/src/ibusenginesimple.c b/src/ibusenginesimple.c +index 4bee8cb3..76dd9eb5 100644 +--- a/src/ibusenginesimple.c ++++ b/src/ibusenginesimple.c +@@ -2,7 +2,7 @@ + /* vim:set et sts=4: */ + /* ibus - The Input Bus + * Copyright (C) 2014 Peng Huang +- * Copyright (C) 2015-2023 Takao Fujiwara ++ * Copyright (C) 2015-2024 Takao Fujiwara + * Copyright (C) 2014-2017 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or +@@ -1017,7 +1017,9 @@ ibus_engine_simple_process_key_event (IBusEngine *engine, + !is_hex_start && !is_hex_end && !is_escape && !is_backspace) || + (priv->in_emoji_sequence && !printable_keyval && + !is_emoji_start && !is_hex_end && !is_escape && !is_backspace)) { +- if (modifiers & (IBUS_MOD1_MASK | IBUS_CONTROL_MASK) || ++ guint no_text_input_mask = IBUS_MOD1_MASK | IBUS_MOD4_MASK \ ++ | IBUS_CONTROL_MASK | IBUS_SUPER_MASK; ++ if (modifiers & no_text_input_mask || + ((priv->in_hex_sequence || priv->in_emoji_sequence) && + priv->modifiers_dropped && + (keyval == IBUS_KEY_Return || +-- +2.45.0 + +From a3a5a20a30f2a8ecee4dc2aaa4fd48c62c91d768 Mon Sep 17 00:00:00 2001 +From: fujiwarat +Date: Fri, 24 May 2024 16:18:03 +0900 +Subject: [PATCH 5/6] src/ibusenginesimple: Do not update zero length preedit + text + +Several engines can inherit IBusEngieSimple for the compose key support +likes Anthy, Hangul, M17n and it could have the duplicated preedit text +between the engine and the parent IBusEngineSimple and it could update +the preedit text mutually by mistake. + +Then the preedit text should not be hidden for zero length at least. +This update might not be enough but hope to fix the cursor position +reset with hiding the preedit text against the reported issue with +`m17n:sa:itrans` engine. + +BUG=https://github.com/ibus/ibus/issues/2536 +--- + src/ibusenginesimple.c | 41 +++++++++++++++++++++++++++++++++++------ + 1 file changed, 35 insertions(+), 6 deletions(-) + +diff --git a/src/ibusenginesimple.c b/src/ibusenginesimple.c +index 76dd9eb5..ac478855 100644 +--- a/src/ibusenginesimple.c ++++ b/src/ibusenginesimple.c +@@ -83,11 +83,13 @@ struct _IBusEngineSimplePrivate { + IBusEngineDict *emoji_dict; + IBusLookupTable *lookup_table; + gboolean lookup_table_visible; ++ IBusText *updated_preedit; + }; + + guint COMPOSE_BUFFER_SIZE = 20; + G_LOCK_DEFINE_STATIC (global_tables); + static GSList *global_tables; ++static IBusText *updated_preedit_empty; + + /* functions prototype */ + static void ibus_engine_simple_destroy (IBusEngineSimple *simple); +@@ -135,24 +137,29 @@ ibus_engine_simple_class_init (IBusEngineSimpleClass *class) + engine_class->page_up = ibus_engine_simple_page_up; + engine_class->candidate_clicked + = ibus_engine_simple_candidate_clicked; ++ updated_preedit_empty = ibus_text_new_from_string (""); ++ g_object_ref_sink (updated_preedit_empty); + } + + static void + ibus_engine_simple_init (IBusEngineSimple *simple) + { ++ IBusEngineSimplePrivate *priv; + GBytes *data; + GError *error = NULL; + const char *contents; + gsize length = 0; + IBusComposeTableEx *en_compose_table; + +- simple->priv = IBUS_ENGINE_SIMPLE_GET_PRIVATE (simple); +- simple->priv->compose_buffer = g_new0 (guint, COMPOSE_BUFFER_SIZE + 1); +- simple->priv->hex_mode_enabled = ++ priv = simple->priv = IBUS_ENGINE_SIMPLE_GET_PRIVATE (simple); ++ priv->compose_buffer = g_new0 (guint, COMPOSE_BUFFER_SIZE + 1); ++ priv->hex_mode_enabled = + g_getenv("IBUS_ENABLE_CTRL_SHIFT_U") != NULL || + g_getenv("IBUS_ENABLE_CONTROL_SHIFT_U") != NULL; +- simple->priv->tentative_match = g_string_new (""); +- simple->priv->tentative_match_len = 0; ++ priv->tentative_match = g_string_new (""); ++ priv->tentative_match_len = 0; ++ priv->updated_preedit = ++ (IBusText *)g_object_ref_sink (updated_preedit_empty); + data = g_resources_lookup_data ("/org/freedesktop/ibus/compose/sequences", + G_RESOURCE_LOOKUP_FLAGS_NONE, + &error); +@@ -190,6 +197,7 @@ ibus_engine_simple_destroy (IBusEngineSimple *simple) + g_string_free (priv->tentative_match, TRUE); + priv->tentative_match = NULL; + priv->tentative_match_len = 0; ++ g_clear_object (&priv->updated_preedit); + + IBUS_OBJECT_CLASS(ibus_engine_simple_parent_class)->destroy ( + IBUS_OBJECT (simple)); +@@ -228,6 +236,9 @@ ibus_engine_simple_reset (IBusEngine *engine) + priv->tentative_match_len = 0; + } + ibus_engine_hide_preedit_text ((IBusEngine *)simple); ++ g_object_unref (priv->updated_preedit); ++ priv->updated_preedit = ++ (IBusText *)g_object_ref_sink (updated_preedit_empty); + } + + static void +@@ -318,7 +329,10 @@ ibus_engine_simple_update_preedit_text (IBusEngineSimple *simple) + int len = strlen (priv->tentative_emoji); + ibus_text_append_attribute (text, + IBUS_ATTR_TYPE_UNDERLINE, IBUS_ATTR_UNDERLINE_SINGLE, 0, len); ++ g_object_ref_sink (text); + ibus_engine_update_preedit_text ((IBusEngine *)simple, text, len, TRUE); ++ g_object_unref (priv->updated_preedit); ++ priv->updated_preedit = text; + g_string_free (s, TRUE); + return; + } else if (priv->in_compose_sequence) { +@@ -370,7 +384,19 @@ ibus_engine_simple_update_preedit_text (IBusEngineSimple *simple) + } + + if (s->len == 0) { +- ibus_engine_hide_preedit_text ((IBusEngine *)simple); ++ /* #2536 IBusEngine can inherit IBusEngineSimple for comopse keys. ++ * If the previous preedit is zero, the current preedit does not ++ * need to be hidden here at least because ibus-daemon could have ++ * another preedit for the child IBusEnigne likes m17n and caclling ++ * ibus_engine_hide_preedit_text() here could cause a reset of ++ * the cursor position in ibus-daemon. ++ */ ++ if (strlen (priv->updated_preedit->text)) { ++ ibus_engine_hide_preedit_text ((IBusEngine *)simple); ++ g_object_unref (priv->updated_preedit); ++ priv->updated_preedit = ++ (IBusText *)g_object_ref_sink (updated_preedit_empty); ++ } + } else if (s->len >= G_MAXINT) { + g_warning ("%s is too long compose length: %lu", s->str, s->len); + } else { +@@ -378,7 +404,10 @@ ibus_engine_simple_update_preedit_text (IBusEngineSimple *simple) + IBusText *text = ibus_text_new_from_string (s->str); + ibus_text_append_attribute (text, + IBUS_ATTR_TYPE_UNDERLINE, IBUS_ATTR_UNDERLINE_SINGLE, 0, len); ++ g_object_ref_sink (text); + ibus_engine_update_preedit_text ((IBusEngine *)simple, text, len, TRUE); ++ g_object_unref (priv->updated_preedit); ++ priv->updated_preedit = text; + } + g_string_free (s, TRUE); + } +-- +2.45.0 + +From 627e7cc37d3bea4c288c932773f69fcee9ac773e Mon Sep 17 00:00:00 2001 +From: fujiwarat +Date: Fri, 24 May 2024 16:28:40 +0900 +Subject: [PATCH 6/6] ui/gtk3: Fix to unref GdkDisplay in Wayland + +Panel does not need to allocate the X11 display in Wayland but the check +only. Vala codes need to set the unowned parameter. +Also fixed a memory leak in the update preedit in daemon. + +BUG=rhbz#2252227 +BUG=https://github.com/ibus/ibus/issues/2642 +BUG=https://github.com/ibus/ibus/issues/2644 +--- + bus/inputcontext.c | 1 + + ui/gtk3/application.vala | 2 + + ui/gtk3/bindingcommon.vala | 6 +- + ui/gtk3/handle.vala | 2 + + ui/gtk3/panel.vala | 18 ++++- + 6 files changed, 96 insertions(+), 78 deletions(-) + +diff --git a/bus/inputcontext.c b/bus/inputcontext.c +index c914fbd2..7666f057 100644 +--- a/bus/inputcontext.c ++++ b/bus/inputcontext.c +@@ -3306,6 +3306,7 @@ bus_input_context_update_preedit_text (BusInputContext *context, + pre_data.key = 'm'; + if (bus_input_context_make_post_process_key_event (context, + &pre_data)) { ++ g_variant_unref (variant); + return; + } else if (context->client_commit_preedit) { + bus_input_context_emit_signal ( +diff --git a/ui/gtk3/application.vala b/ui/gtk3/application.vala +index ae67624f..31517c79 100644 +--- a/ui/gtk3/application.vala ++++ b/ui/gtk3/application.vala +@@ -228,6 +228,8 @@ class Application { + } + + private static void make_wayland_im() { ++ if (BindingCommon.default_is_xdisplay()) ++ return; + assert (open_log()); + void *wl_display = null; + ulong i = 0; +diff --git a/ui/gtk3/bindingcommon.vala b/ui/gtk3/bindingcommon.vala +index e32db178..7e6443c5 100644 +--- a/ui/gtk3/bindingcommon.vala ++++ b/ui/gtk3/bindingcommon.vala +@@ -259,11 +259,11 @@ class BindingCommon { + + public static bool default_is_xdisplay() { + if (m_xdisplay == null) +- get_xdisplay(); ++ get_xdisplay(true); + return m_default_is_xdisplay; + } + +- public static Gdk.X11.Display? get_xdisplay() { ++ public static Gdk.X11.Display? get_xdisplay(bool check_only=false) { + if (m_xdisplay != null) + return m_xdisplay; + var display = Gdk.Display.get_default(); +@@ -277,6 +277,8 @@ class BindingCommon { + m_xdisplay = (Gdk.X11.Display)display; + return m_xdisplay; + } ++ if (check_only) ++ return null; + Gdk.set_allowed_backends("x11"); + // Call _gdk_display_manager_add_display() internally. + m_xdisplay = +diff --git a/ui/gtk3/handle.vala b/ui/gtk3/handle.vala +index 65635439..1d0eefe9 100644 +--- a/ui/gtk3/handle.vala ++++ b/ui/gtk3/handle.vala +@@ -62,6 +62,8 @@ class Handle : Gtk.EventBox { + } + + public override bool button_press_event(Gdk.EventButton event) { ++ if (!BindingCommon.default_is_xdisplay()) ++ return false; + if (event.button != 1) + return false; + m_workarea = Gdk.Rectangle(){ +diff --git a/ui/gtk3/panel.vala b/ui/gtk3/panel.vala +index d907458e..534a9d37 100644 +--- a/ui/gtk3/panel.vala ++++ b/ui/gtk3/panel.vala +@@ -166,6 +166,9 @@ class Panel : IBus.PanelService { + property_activate(k, s); + }); + ++ set_version(); ++ check_wayland(); ++ + state_changed(); + } + +@@ -443,6 +446,8 @@ class Panel : IBus.PanelService { + } + + private void bind_switch_shortcut() { ++ if (m_is_wayland_im) ++ return; + string[] accelerators = m_settings_hotkey.get_strv("triggers"); + + var keybinding_manager = KeybindingManager.get_instance(); +@@ -874,6 +879,16 @@ class Panel : IBus.PanelService { + message = format.printf(Environment.get_prgname()); + } + } ++ if (!m_is_wayland && m_is_wayland_im) { ++ var format = ++ _("Seems you run %s with '--enable-wayland-im' " + ++ "option but your display server is Xorg so the Wayland " + ++ "feature is disabled. You would be better off running " + ++ "ibus-daemon directly instead or %s without that " + ++ "option."); ++ unowned string prgname = Environment.get_prgname(); ++ message = format.printf(prgname, prgname); ++ } + if (message == null) + return; + #if ENABLE_LIBNOTIFY +@@ -908,9 +923,6 @@ class Panel : IBus.PanelService { + + + public void load_settings() { +- set_version(); +- check_wayland(); +- + init_engines_order(); + + // Update m_use_system_keyboard_layout before update_engines() +-- +2.45.0 + +From be94b8ddb4c37fe83646860a08c600b98e67fe84 Mon Sep 17 00:00:00 2001 +From: fujiwarat +Date: Sat, 25 May 2024 18:10:36 +0900 +Subject: [PATCH] src/ibusengine: Hide preedit text with PanelExtensionReceived + signal + +IBusEngineSimple no longer calls to hide the preedit with the zero +length to fix the slurring cursor position but the emoji preedit +becomes not to be hidden with the preedit commit or escape events +as a side effect. +To fix the issue, IBusEngine needs to decide to clear or keep +the preedit when the emoji mode is finished. + +BUG=https://github.com/ibus/ibus/issues/2536 +Fixes: https://github.com/ibus/ibus/commit/a3a5a20a +--- + src/ibusengine.c | 11 +++++++++++ + src/ibusenginesimple.c | 2 +- + 2 files changed, 12 insertions(+), 1 deletion(-) + +diff --git a/src/ibusengine.c b/src/ibusengine.c +index eff4992c..0352fd49 100644 +--- a/src/ibusengine.c ++++ b/src/ibusengine.c +@@ -1326,6 +1326,17 @@ ibus_engine_service_method_call (IBusService *service, + return; + } + priv->enable_extension = ibus_extension_event_is_enabled (event); ++ /* IBusEngineSimple no longer calls to hide the preedit with the zero ++ * lenght and this sends the null preedit here when the emojier ++ * commits or escapes the emoji preedit text. ++ * TODO: Do we need a signal for the parent engines to inform this ++ * information because some engines don't wish to hide their preedit ++ * with hiding the emoji preedit? ++ */ ++ if (!priv->enable_extension) { ++ IBusText *text = ibus_text_new_from_static_string (""); ++ ibus_engine_update_preedit_text (engine, text, 0, FALSE); ++ } + g_dbus_method_invocation_return_value (invocation, NULL); + return; + } +diff --git a/src/ibusenginesimple.c b/src/ibusenginesimple.c +index ac478855..e2f96a37 100644 +--- a/src/ibusenginesimple.c ++++ b/src/ibusenginesimple.c +@@ -385,7 +385,7 @@ ibus_engine_simple_update_preedit_text (IBusEngineSimple *simple) + + if (s->len == 0) { + /* #2536 IBusEngine can inherit IBusEngineSimple for comopse keys. +- * If the previous preedit is zero, the current preedit does not ++ * If the previous preedit is zero, the current preedit does not + * need to be hidden here at least because ibus-daemon could have + * another preedit for the child IBusEnigne likes m17n and caclling + * ibus_engine_hide_preedit_text() here could cause a reset of +-- +2.45.0 + +From 759105df1d83ae25d9eea801a7c91e67dca43cb8 Mon Sep 17 00:00:00 2001 +From: fujiwarat +Date: Sat, 25 May 2024 19:23:23 +0900 +Subject: [PATCH] bus: Change IBus unique name to :1.0 from IBUS_SERVICE_IBUS +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +According to the D-Bus specification, +`org.freedesktop.DBus.GetNameOwner()` must return a unique name (i.e. +one of the form `:1.23`). The only unique name which is allowed to not +be in this form is `org.freedesktop.DBus`. + +The change in GLib 2.80.1 was to validate that the sender of every +message is either a unique name (according to `g_dbus_is_unique_name()`), +or the special name `org.freedesktop.DBus` to meet the specification. + +In the long term, it might be more robust to rework the code so that the +mapping from `org.freedesktop.IBus` → a unique name is stored in +`dbus->names` (in `dbusimpl.c`) like all the other requested names. +However, handling for the `org.freedesktop.IBus` well-known name is +hardcoded throughout `dbusimpl.c`, so porting this single bit of it to +create a `BusNameService` would probably cause more problems. + +BUG=https://github.com/ibus/ibus/issues/2639 +BUG=https://gitlab.gnome.org/GNOME/glib/-/issues/3268 +BUG=https://github.com/advisories/GHSA-f632-c3rh-r2v2 +--- + bus/connection.h | 3 +++ + bus/dbusimpl.c | 29 +++++++++++++++-------------- + bus/ibusimpl.c | 13 +++++++------ + bus/inputcontext.c | 2 +- + bus/matchrule.c | 10 +++++++++- + bus/matchrule.h | 4 +++- + 6 files changed, 38 insertions(+), 23 deletions(-) + +diff --git a/bus/connection.h b/bus/connection.h +index 440faf1e..8264980e 100644 +--- a/bus/connection.h ++++ b/bus/connection.h +@@ -42,6 +42,9 @@ + #define BUS_CONNECTION_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS ((obj), BUS_TYPE_CONNECTION, BusConnectionClass)) + ++/* bus_dbus_impl_hello() sets the client unique names ":1.1" or later. */ ++#define IBUS_NAME_OWNER_NAME ":1.0" ++ + G_BEGIN_DECLS + + typedef struct _BusConnection BusConnection; +diff --git a/bus/dbusimpl.c b/bus/dbusimpl.c +index 59787a80..52092e58 100644 +--- a/bus/dbusimpl.c ++++ b/bus/dbusimpl.c +@@ -710,7 +710,8 @@ bus_dbus_impl_list_names (BusDBusImpl *dbus, + + /* FIXME should add them? */ + g_variant_builder_add (&builder, "s", "org.freedesktop.DBus"); +- g_variant_builder_add (&builder, "s", "org.freedesktop.IBus"); ++ g_variant_builder_add (&builder, "s", IBUS_SERVICE_IBUS); ++ g_variant_builder_add (&builder, "s", IBUS_NAME_OWNER_NAME); + + /* append well-known names */ + GList *names, *name; +@@ -785,11 +786,11 @@ bus_dbus_impl_get_name_owner (BusDBusImpl *dbus, + const gchar *name = NULL; + g_variant_get (parameters, "(&s)", &name); + +- if (g_strcmp0 (name, "org.freedesktop.DBus") == 0 || +- g_strcmp0 (name, "org.freedesktop.IBus") == 0) { ++ if (!g_strcmp0 (name, "org.freedesktop.DBus")) { + name_owner = name; +- } +- else { ++ } else if (!g_strcmp0 (name, IBUS_SERVICE_IBUS)) { ++ name_owner = IBUS_NAME_OWNER_NAME; ++ } else { + BusConnection *owner = bus_dbus_impl_get_connection_by_name (dbus, name); + if (owner != NULL) { + name_owner = bus_connection_get_unique_name (owner); +@@ -800,8 +801,7 @@ bus_dbus_impl_get_name_owner (BusDBusImpl *dbus, + g_dbus_method_invocation_return_error (invocation, + G_DBUS_ERROR, G_DBUS_ERROR_NAME_HAS_NO_OWNER, + "Can not get name owner of '%s': no such name", name); +- } +- else { ++ } else { + g_dbus_method_invocation_return_value (invocation, + g_variant_new ("(s)", name_owner)); + } +@@ -932,6 +932,9 @@ bus_dbus_impl_add_match (BusDBusImpl *dbus, + "Parse match rule [%s] failed", rule_text); + return; + } ++ /* ibus_bus_watch_ibus_signal() supports IBUS_SERVICE_IBUS sender. */ ++ if (!g_strcmp0 (bus_match_rule_get_sender (rule), IBUS_SERVICE_IBUS)) ++ bus_match_rule_set_sender (rule, IBUS_NAME_OWNER_NAME); + + g_dbus_method_invocation_return_value (invocation, NULL); + GList *p; +@@ -1510,7 +1513,8 @@ bus_dbus_impl_connection_filter_cb (GDBusConnection *dbus_connection, + /* connection unique name as sender of the message*/ + g_dbus_message_set_sender (message, bus_connection_get_unique_name (connection)); + +- if (g_strcmp0 (destination, "org.freedesktop.IBus") == 0) { ++ if (!g_strcmp0 (destination, IBUS_SERVICE_IBUS) || ++ !g_strcmp0 (destination, IBUS_NAME_OWNER_NAME)) { + /* the message is sent to IBus service. messages from ibusbus and ibuscontext may fall into this category. */ + switch (message_type) { + case G_DBUS_MESSAGE_TYPE_METHOD_CALL: +@@ -1528,8 +1532,7 @@ bus_dbus_impl_connection_filter_cb (GDBusConnection *dbus_connection, + g_object_unref (message); + g_return_val_if_reached (NULL); /* return NULL since the service does not handle signals. */ + } +- } +- else if (g_strcmp0 (destination, "org.freedesktop.DBus") == 0) { ++ } else if (!g_strcmp0 (destination, "org.freedesktop.DBus")) { + /* the message is sent to DBus service. messages from ibusbus may fall into this category. */ + switch (message_type) { + case G_DBUS_MESSAGE_TYPE_METHOD_CALL: +@@ -1547,8 +1550,7 @@ bus_dbus_impl_connection_filter_cb (GDBusConnection *dbus_connection, + g_object_unref (message); + g_return_val_if_reached (NULL); /* return NULL since the service does not handle signals. */ + } +- } +- else if (destination == NULL) { ++ } else if (destination == NULL) { + /* the message is sent to the current connection. communications between ibus-daemon and panel/engines may fall into this + * category since the panel/engine proxies created by ibus-daemon does not set bus name. */ + switch (message_type) { +@@ -1570,8 +1572,7 @@ bus_dbus_impl_connection_filter_cb (GDBusConnection *dbus_connection, + g_object_unref (message); + g_return_val_if_reached (NULL); /* return NULL since the service does not handle messages. */ + } +- } +- else { ++ } else { + /* The message is sent to an other service. Forward it. + * For example, the config proxy class in src/ibusconfig.c sets its "g-name" property (i.e. destination) to IBUS_SERVICE_CONFIG. */ + bus_dbus_impl_forward_message (dbus, connection, message); +diff --git a/bus/ibusimpl.c b/bus/ibusimpl.c +index 875cd550..8681c78b 100644 +--- a/bus/ibusimpl.c ++++ b/bus/ibusimpl.c +@@ -2388,19 +2388,20 @@ bus_ibus_impl_property_changed (BusIBusImpl *service, + GVariant *value) + { + GDBusMessage *message = +- g_dbus_message_new_signal ("/org/freedesktop/IBus", ++ g_dbus_message_new_signal (IBUS_PATH_IBUS, + "org.freedesktop.DBus.Properties", + "PropertiesChanged"); + + /* set a non-zero serial to make libdbus happy */ + g_dbus_message_set_serial (message, 1); +- g_dbus_message_set_sender (message, "org.freedesktop.IBus"); ++ g_dbus_message_set_sender (message, IBUS_NAME_OWNER_NAME); ++ + + GVariantBuilder *builder = g_variant_builder_new (G_VARIANT_TYPE_ARRAY); + g_variant_builder_add (builder, "{sv}", property_name, value); + g_dbus_message_set_body (message, + g_variant_new ("(sa{sv}as)", +- "org.freedesktop.IBus", ++ IBUS_SERVICE_IBUS, + builder, + NULL)); + g_variant_builder_unref (builder); +@@ -2419,12 +2420,12 @@ bus_ibus_impl_emit_signal (BusIBusImpl *ibus, + const gchar *signal_name, + GVariant *parameters) + { +- GDBusMessage *message = g_dbus_message_new_signal ("/org/freedesktop/IBus", +- "org.freedesktop.IBus", ++ GDBusMessage *message = g_dbus_message_new_signal (IBUS_PATH_IBUS, ++ IBUS_INTERFACE_IBUS, + signal_name); + /* set a non-zero serial to make libdbus happy */ + g_dbus_message_set_serial (message, 1); +- g_dbus_message_set_sender (message, "org.freedesktop.IBus"); ++ g_dbus_message_set_sender (message, IBUS_NAME_OWNER_NAME); + if (parameters) + g_dbus_message_set_body (message, parameters); + bus_dbus_impl_dispatch_message_by_rule (BUS_DEFAULT_DBUS, message, NULL); +diff --git a/bus/inputcontext.c b/bus/inputcontext.c +index 7666f057..e0ad0742 100644 +--- a/bus/inputcontext.c ++++ b/bus/inputcontext.c +@@ -755,7 +755,7 @@ bus_input_context_send_signal (BusInputContext *context, + ibus_service_get_object_path ((IBusService *)context), + interface_name, + signal_name); +- g_dbus_message_set_sender (message, "org.freedesktop.IBus"); ++ g_dbus_message_set_sender (message, IBUS_NAME_OWNER_NAME); + g_dbus_message_set_destination ( + message, + bus_connection_get_unique_name (context->connection)); +diff --git a/bus/matchrule.c b/bus/matchrule.c +index 4fb1d902..2381ca9e 100644 +--- a/bus/matchrule.c ++++ b/bus/matchrule.c +@@ -2,7 +2,8 @@ + /* vim:set et sts=4: */ + /* IBus - The Input Bus + * Copyright (C) 2008-2010 Peng Huang +- * Copyright (C) 2008-2010 Red Hat, Inc. ++ * Copyright (C) 2024 Takao Fujiwara ++ * Copyright (C) 2008-2024 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public +@@ -407,6 +408,13 @@ bus_match_rule_set_message_type (BusMatchRule *rule, + return TRUE; + } + ++const gchar * ++bus_match_rule_get_sender (BusMatchRule *rule) ++{ ++ g_return_val_if_fail (rule != NULL, NULL); ++ return rule->sender; ++} ++ + gboolean + bus_match_rule_set_sender (BusMatchRule *rule, + const gchar *sender) +diff --git a/bus/matchrule.h b/bus/matchrule.h +index 1dd304cd..37b6347b 100644 +--- a/bus/matchrule.h ++++ b/bus/matchrule.h +@@ -2,7 +2,8 @@ + /* vim:set et sts=4: */ + /* IBus - The Input Bus + * Copyright (C) 2008-2010 Peng Huang +- * Copyright (C) 2008-2010 Red Hat, Inc. ++ * Copyright (C) 2024 Takao Fujiwara ++ * Copyright (C) 2008-2024 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public +@@ -57,6 +58,7 @@ void bus_match_rule_free (BusMatchRule *rule); + gboolean bus_match_rule_set_message_type + (BusMatchRule *rule, + gint type); ++const gchar * bus_match_rule_get_sender (BusMatchRule *rule); + gboolean bus_match_rule_set_sender (BusMatchRule *rule, + const gchar *sender); + gboolean bus_match_rule_set_interface +-- +2.45.0 + diff --git a/ibus.spec b/ibus.spec index 44a1cd0..11057ce 100644 --- a/ibus.spec +++ b/ibus.spec @@ -61,7 +61,7 @@ Name: ibus Version: 1.5.30 # https://github.com/fedora-infra/rpmautospec/issues/101 -Release: 1%{?dist} +Release: 2%{?dist} Summary: Intelligent Input Bus for Linux OS License: LGPL-2.1-or-later URL: https://github.com/ibus/%name/wiki @@ -71,10 +71,8 @@ Source2: %{name}-xinput Source3: %{name}.conf.5 # Patch0: %%{name}-HEAD.patch Patch0: %{name}-HEAD.patch -# #2267615 -Patch1: %{name}-2267615-wayland-init-keymap.patch # Under testing #1349148 #1385349 #1350291 #1406699 #1432252 #1601577 -Patch2: %{name}-1385349-segv-bus-proxy.patch +Patch1: %{name}-1385349-segv-bus-proxy.patch %if %{without xinit} # Use mutter window manager in RHEL CI Patch100: %{name}-xx-desktop-testing-mutter.patch @@ -627,6 +625,10 @@ dconf update || : %{_datadir}/installed-tests/ibus %changelog +* Fri May 24 2024 Takao Fujiwara - 1.5.30-2 +- Resolve #2252227 Fix display buffer overflow +- Change IBus unique name to :1.0 from IBUS_SERVICE_IBUS + * Thu May 02 2024 Takao Fujiwara - 1.5.30-1 - Bump to 1.5.30 diff --git a/tests/roles/ibus-desktop-testing-role/files/check-results.sh b/tests/roles/ibus-desktop-testing-role/files/check-results.sh index 8a46118..32b6f16 100755 --- a/tests/roles/ibus-desktop-testing-role/files/check-results.sh +++ b/tests/roles/ibus-desktop-testing-role/files/check-results.sh @@ -37,8 +37,7 @@ _EOF } if [ $TEST_RUN_IN_RAWHIDE -eq 0 ] ; then - IS_RAWHIDE="$(grep -i rawhide /etc/fedora-release)" - if [ x"$IS_RAWHIDE" != x ] ; then + if grep -q -i rawhide /etc/fedora-release &> /dev/null ; then gen_results "0" "pass" echo -n PASS exit 0