Resolve #2252227 Fix display buffer overflow

Change IBus unique name to :1.0 from IBUS_SERVICE_IBUS
This commit is contained in:
Takao Fujiwara 2024-05-25 19:33:27 +09:00
parent 63dc799769
commit 35469f4d4d
4 changed files with 989 additions and 237 deletions

View File

@ -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

View File

@ -1,14 +1,61 @@
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
@ -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

View File

@ -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

View File

@ -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