public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
From: Takao Fujiwara <tfujiwar@redhat.com>
To: git-commits@fedoraproject.org
Subject: [rpms/ibus] autotool: Resolve #2252227 Fix display buffer overflow
Date: Sun, 31 May 2026 02:08:30 GMT	[thread overview]
Message-ID: <178019331088.1.4611982744360169985.rpms-ibus-35469f4d4dc1@fedoraproject.org> (raw)

            A new commit has been pushed.

            Repo   : rpms/ibus
            Branch : autotool
            Commit : 35469f4d4dc10b8f664469d7effd0480e094a9b3
            Author : Takao Fujiwara <tfujiwar@redhat.com>
            Date   : 2024-05-25T19:33:27+09:00
            Stats  : +988/-236 in 4 file(s)
            URL    : https://src.fedoraproject.org/rpms/ibus/c/35469f4d4dc10b8f664469d7effd0480e094a9b3?branch=autotool

            Log:
            Resolve #2252227 Fix display buffer overflow

Change IBus unique name to :1.0 from IBUS_SERVICE_IBUS

---
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 <takao.fujiwara1@gmail.com>
-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<IBus.EngineDesc> xkb_engines =
-                 new GLib.List<IBus.EngineDesc>();
-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 <shawn.p.huang@gmail.com>
-- * Copyright(c) 2014 Takao Fujiwara <tfujiwar@redhat.com>
-+ * Copyright(c) 2014-2024 Takao Fujiwara <tfujiwar@redhat.com>
-  *
-  * 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 <takao.fujiwara1@gmail.com>
-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 <takao.fujiwara1@gmail.com>
+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.
+
+Add vala check in autogen.sh since valac changes the source codes.
 ---
- src/tests/ibus-desktop-testing-runner.in | 15 ++++++++++++---
- 1 file changed, 12 insertions(+), 3 deletions(-)
+ 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 <takao.fujiwara1@gmail.com>
+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 <X11/Xlib.h>
+ #include <X11/extensions/XTest.h>
+ 
++#ifdef GDK_WINDOWING_WAYLAND
++#if GTK_CHECK_VERSION (3, 98, 4)
++#include <gdk/wayland/gdkwayland.h>
++#else
++#include <gdk/gdkwayland.h>
++#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<IBus.EngineDesc> xkb_engines =
+                 new GLib.List<IBus.EngineDesc>();
+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 <shawn.p.huang@gmail.com>
+- * Copyright(c) 2014 Takao Fujiwara <tfujiwar@redhat.com>
++ * Copyright(c) 2014-2024 Takao Fujiwara <tfujiwar@redhat.com>
+  *
+  * 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 <takao.fujiwara1@gmail.com>
+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 <shawn.p.huang@gmail.com>
+- * Copyright (C) 2015-2023 Takao Fujiwara <takao.fujiwara1@gmail.com>
++ * Copyright (C) 2015-2024 Takao Fujiwara <takao.fujiwara1@gmail.com>
+  * 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 <takao.fujiwara1@gmail.com>
+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 <takao.fujiwara1@gmail.com>
+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 <takao.fujiwara1@gmail.com>
+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 <takao.fujiwara1@gmail.com>
+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 <shawn.p.huang@gmail.com>
+- * Copyright (C) 2008-2010 Red Hat, Inc.
++ * Copyright (C) 2024 Takao Fujiwara <takao.fujiwara1@gmail.com>
++ * 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 <shawn.p.huang@gmail.com>
+- * Copyright (C) 2008-2010 Red Hat, Inc.
++ * Copyright (C) 2024 Takao Fujiwara <takao.fujiwara1@gmail.com>
++ * 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 <tfujiwar@redhat.com> - 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 <tfujiwar@redhat.com> - 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

                 reply	other threads:[~2026-05-31  2:08 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=178019331088.1.4611982744360169985.rpms-ibus-35469f4d4dc1@fedoraproject.org \
    --to=tfujiwar@redhat.com \
    --cc=git-commits@fedoraproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox