public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
* [rpms/ibus] autotool: Resolve #2252227 Fix display buffer overflow
@ 2026-05-31 2:08 Takao Fujiwara
0 siblings, 0 replies; only message in thread
From: Takao Fujiwara @ 2026-05-31 2:08 UTC (permalink / raw)
To: git-commits
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
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2026-05-31 2:08 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-05-31 2:08 [rpms/ibus] autotool: Resolve #2252227 Fix display buffer overflow Takao Fujiwara
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox