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: Delete upstreamed ibus-HEAD.patch
Date: Sun, 31 May 2026 02:07:30 GMT [thread overview]
Message-ID: <178019325006.1.2493224813599113829.rpms-ibus-1ddc1a0b4155@fedoraproject.org> (raw)
A new commit has been pushed.
Repo : rpms/ibus
Branch : autotool
Commit : 1ddc1a0b4155a77a54415a88ed4895f96d3264d6
Author : Takao Fujiwara <tfujiwar@redhat.com>
Date : 2020-09-29T21:08:31+09:00
Stats : +0/-2658 in 1 file(s)
URL : https://src.fedoraproject.org/rpms/ibus/c/1ddc1a0b4155a77a54415a88ed4895f96d3264d6?branch=autotool
Log:
Delete upstreamed ibus-HEAD.patch
---
diff --git a/ibus-HEAD.patch b/ibus-HEAD.patch
deleted file mode 100644
index a0f6e3a..0000000
--- a/ibus-HEAD.patch
+++ /dev/null
@@ -1,2658 +0,0 @@
-From 7b0d091839a4f1315ba216175fb2787e86f7fa31 Mon Sep 17 00:00:00 2001
-From: fujiwarat <takao.fujiwara1@gmail.com>
-Date: Tue, 3 Mar 2020 17:08:30 +0900
-Subject: [PATCH] src/tests: Delete graves in substitution in
- ibus-desktop-testing-runner
-
-Delete the single quotations to enclose grave chracters because
-DASH saves the single quoted '`id -u`' as the raw string in the command
-substitution not to be extracted.
-
-BUG=https://github.com/ibus/ibus/issues/2189
----
- src/tests/ibus-desktop-testing-runner.in | 7 ++++---
- 1 file changed, 4 insertions(+), 3 deletions(-)
-
-diff --git a/src/tests/ibus-desktop-testing-runner.in b/src/tests/ibus-desktop-testing-runner.in
-index 0d9a847c..f9238e69 100755
---- a/src/tests/ibus-desktop-testing-runner.in
-+++ b/src/tests/ibus-desktop-testing-runner.in
-@@ -4,7 +4,7 @@
- #
- # ibus - The Input Bus
- #
--# Copyright (c) 2018-2019 Takao Fujiwara <takao.fujiwara1@gmail.com>
-+# Copyright (c) 2018-2020 Takao Fujiwara <takao.fujiwara1@gmail.com>
- # Copyright (c) 2018 Red Hat, Inc.
- #
- # This program is free software; you can redistribute it and/or modify
-@@ -31,7 +31,8 @@
- # POSIX sh has no 'echo -e'
- : ${ECHO:='/usr/bin/echo'}
- # POSIX sh has $UID
--: ${UID:='`id -u`'}
-+# DASH saves the graves in '``' as characters not to be extracted
-+: ${UID:=`id -u`}
-
-
- PROGNAME=`basename $0`
-@@ -170,7 +171,7 @@ _EOF
- run_dbus_daemon()
- {
- # Use dbus-launch --exit-with-session later instead of --sh-syntax
-- export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$UID/bus
-+ export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/$UID/bus"
- }
-
- run_desktop()
---
-2.24.1
-
-From 8ce25208c3f4adfd290a032c6aa739d2b7580eb1 Mon Sep 17 00:00:00 2001
-From: Carlos Garnacho <carlosg@gnome.org>
-Date: Thu, 12 Mar 2020 16:02:16 +0900
-Subject: [PATCH] src: Use WAYLAND_DISPLAY on Wayland sessions to make up
- IBus socket name
-
-In Wayland sessions, GNOME Shell 3.36 is leveraging 2 X11 Display
-connections so one is used to set up all services for a "X11 session"
-before user applications connected to the other display might require it.
-This allows seamlessly starting Xwayland on demand to X11 user applications.
-
-IBus here belongs to the first described connection, it is started
-explicitly on that display by GNOME Shell as it is necessary to set up
-ibus-x11 before any other X11 client might want to use it.
-
-However the use of this "secondary" display results in IBus daemon left
-unable to talk to applications, as the socket name is dependent on the
-DISPLAY envvar and ibus/applications don't agree on its content.
-
-For wayland sessions, make it look for WAYLAND_DISPLAY, as that'll have
-the similar "per session bus" behavior that this seems to look after.
-
-BUG=https://gitlab.gnome.org/GNOME/gnome-shell/issues/2341
----
- src/ibusshare.c | 11 +++++++++--
- 1 file changed, 9 insertions(+), 2 deletions(-)
-
-diff --git a/src/ibusshare.c b/src/ibusshare.c
-index 0d50d3f5..e0ef2ce0 100644
---- a/src/ibusshare.c
-+++ b/src/ibusshare.c
-@@ -100,6 +100,7 @@ ibus_get_socket_path (void)
- gchar *display;
- gchar *displaynumber = "0";
- /* gchar *screennumber = "0"; */
-+ gboolean is_wayland = FALSE;
- gchar *p;
-
- path = g_strdup (g_getenv ("IBUS_ADDRESS_FILE"));
-@@ -108,13 +109,19 @@ ibus_get_socket_path (void)
- }
-
- if (_display == NULL) {
-- display = g_strdup (g_getenv ("DISPLAY"));
-+ display = g_strdup (g_getenv ("WAYLAND_DISPLAY"));
-+ if (display)
-+ is_wayland = TRUE;
-+ else
-+ display = g_strdup (g_getenv ("DISPLAY"));
- }
- else {
- display = g_strdup (_display);
- }
-
-- if (display) {
-+ if (is_wayland) {
-+ displaynumber = display;
-+ } else if (display) {
- p = display;
- hostname = display;
- for (; *p != ':' && *p != '\0'; p++);
---
-2.24.1
-
-From 5765bfd69fb2ab1174378fbb0d8cac7f2bd2610f Mon Sep 17 00:00:00 2001
-From: Changwoo Ryu <cwryu@debian.org>
-Date: Wed, 15 Apr 2020 17:43:14 +0900
-Subject: [PATCH] client/gtk2: Remove glib_check_version() in gtk immodule
-
-In the gtk2/gtk3 immodule, glib_check_version() is being used to make sure
-that the installed glib version is not older than the glib version which ibus
-is built with.
-
-But there is no reason why glib version is checked in runtime. Library
-compatibility is already being checked more precisely by packaging systems and
-linkers.
-
-This version check can break the ibus gtk immodule when used with an older but
-compatible version of glib, such as glib 2.62.x which is compatible with
-2.64.x.
-
-BUG=https://github.com/ibus/ibus/issues/2200
----
- client/gtk2/ibusim.c | 4 +---
- 1 file changed, 1 insertion(+), 3 deletions(-)
-
-diff --git a/client/gtk2/ibusim.c b/client/gtk2/ibusim.c
-index bfacd0f0..d70800d3 100644
---- a/client/gtk2/ibusim.c
-+++ b/client/gtk2/ibusim.c
-@@ -41,9 +41,7 @@ static const GtkIMContextInfo *info_list[] = {
- G_MODULE_EXPORT const gchar*
- g_module_check_init (GModule *module)
- {
-- return glib_check_version (GLIB_MAJOR_VERSION,
-- GLIB_MINOR_VERSION,
-- 0);
-+ return null;
- }
-
- G_MODULE_EXPORT void
---
-2.24.1
-
-From 8da016764cee9616cca4658d1fb311d6b3bfc0df Mon Sep 17 00:00:00 2001
-From: fujiwarat <takao.fujiwara1@gmail.com>
-Date: Wed, 15 Apr 2020 17:55:03 +0900
-Subject: [PATCH] src/tests: Fix to get focus events with su in
- ibus-desktop-testing-runner
-
-GtkWindow haven't received focus events in any test cases since Fedora 31
-whenever Ansible runs ibus-desktop-testing-runner after `su root`.
-Seems su command does not run systemd automatically and now systemd
-requires XDG_RUNTIME_DIR and Ansible requires root access with ssh.
-This fix requires to restart sshd with modified /etc/ssh/sshd_config
-with "PermitRootLogin yes" in order to run with su command.
-
-Ansible with ibus-desktop-testin-runner has worked fine if root console
-login is used without this patch because PAM runs systemd by login.
----
- src/tests/ibus-desktop-testing-runner.in | 36 ++++++++++++++++++++++--
- 1 file changed, 33 insertions(+), 3 deletions(-)
-
-diff --git a/src/tests/ibus-desktop-testing-runner.in b/src/tests/ibus-desktop-testing-runner.in
-index f9238e69..f760fd5b 100755
---- a/src/tests/ibus-desktop-testing-runner.in
-+++ b/src/tests/ibus-desktop-testing-runner.in
-@@ -49,6 +49,7 @@ PID_XORG=0
- PID_GNOME_SESSION=0
- TESTING_RUNNER="default"
- TESTS=""
-+TIMEOUT=300
- GREEN='\033[0;32m'
- RED='\033[0;31m'
- NC='\033[0m'
-@@ -84,6 +85,7 @@ usage()
- "-r, --runner=RUNNER Run TESTS programs with a test RUNNER.\n" \
- " RUNNDER = gnome or default.\n" \
- " default is an embedded runner.\n" \
-+"-T, --timeout=TIMEOUT Set timeout (default TIMEOUT is 300 sec).\n" \
- "-o, --output=OUTPUT_FILE OUtput the log to OUTPUT_FILE\n" \
- "-O, --result=RESULT_FILE OUtput the result to RESULT_FILE\n" \
- ""
-@@ -92,8 +94,8 @@ usage()
- parse_args()
- {
- # This is GNU getopt. "sudo port getopt" in BSD?
-- ARGS=`getopt -o hvb:s:cd:t:r:o:O: --long \
-- help,version,builddir:,srcdir:,no-graphics,desktop:,tests:,runner:,output:,result:\
-+ ARGS=`getopt -o hvb:s:cd:t:r:T:o:O: --long \
-+ help,version,builddir:,srcdir:,no-graphics,desktop:,tests:,runner:,timeout:,output:,result:\
- -- "$@"`;
- eval set -- "$ARGS"
- while [ 1 ] ; do
-@@ -106,6 +108,7 @@ parse_args()
- -d | --desktop ) DESKTOP_COMMAND="$2"; shift 2;;
- -t | --tests ) TESTS="$2"; shift 2;;
- -r | --runner ) TESTING_RUNNER="$2"; shift 2;;
-+ -T | --timeout ) TIMEOUT="$2"; shift 2;;
- -o | --output ) TEST_LOG="$2"; shift 2;;
- -O | --result ) RESULT_LOG="$2"; shift 2;;
- -- ) shift; break;;
-@@ -166,11 +169,37 @@ _EOF
- fi
- # `su` command does not run loginctl
- export XDG_SESSION_TYPE='x11'
-+ export XDG_SESSION_CLASS=user
-+ # `su` command does not get focus in events without this variable.
-+ # Need to restart sshd after set "PermitRootLogin yes" in sshd_config
-+ if [ "x$XDG_RUNTIME_DIR" = x ] ; then
-+ export XDG_RUNTIME_DIR=/run/user/$UID
-+ is_root_login=`grep "^PermitRootLogin" /etc/ssh/sshd_config | grep yes`
-+ if [ "x$ANSIBLE" != x ] && [ "x$is_root_login" = x ] ; then
-+ print_log -e "${RED}FAIL${NC}: No permission to get focus-in events in GtkWindow with ansible"
-+ echo "su command does not configure necessary login info " \
-+ "with systemd and GtkWindow cannot receive focus-events " \
-+ "when ibus-desktop-testing-runner is executed by " \
-+ "ansible-playbook." >> $TEST_LOG
-+ echo "Enabling root login via sshd, restarting sshd, set " \
-+ "XDG_RUNTIME_DIR can resolve the problem under " \
-+ "ansible-playbook." >> $TEST_LOG
-+ exit 255
-+ fi
-+ fi
-+ # Do we need XDG_SESSION_ID and XDG_SEAT?
-+ #export XDG_CONFIG_DIRS=/etc/xdg
-+ #export XDG_SESSION_ID=10
-+ #export XDG_SESSION_DESKTOP=gnome
-+ #export XDG_SEAT=seat0
- }
-
- run_dbus_daemon()
- {
- # Use dbus-launch --exit-with-session later instead of --sh-syntax
-+ # GNOME uses a unix:abstract address and it effects gsettings set values
-+ # in each test case.
-+ # TODO: Should we comment out this line?
- export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/$UID/bus"
- }
-
-@@ -288,7 +317,8 @@ run_gnome_desktop_testing_runner()
- fail=1
- continue
- fi
-- gnome-desktop-testing-runner $tst 2>>$TEST_LOG 1>>$TEST_LOG
-+ gnome-desktop-testing-runner --timeout=$TIMEOUT $tst \
-+ 2>>$TEST_LOG 1>>$TEST_LOG
- retval=$?
- read pass fail << EOF
- `count_case_result $retval $pass $fail`
---
-2.24.1
-
-From 0b9d9365988a96a2bc31c48624f9c2b8081601b6 Mon Sep 17 00:00:00 2001
-From: fujiwarat <takao.fujiwara1@gmail.com>
-Date: Wed, 22 Apr 2020 20:17:12 +0900
-Subject: [PATCH] client/gtk2: Fix typo
-
----
- client/gtk2/ibusim.c | 4 ++--
- src/tests/ibus-desktop-testing-runner.in | 2 +-
- 2 files changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/client/gtk2/ibusim.c b/client/gtk2/ibusim.c
-index d70800d3..55609ce7 100644
---- a/client/gtk2/ibusim.c
-+++ b/client/gtk2/ibusim.c
-@@ -2,7 +2,7 @@
- /* vim:set et ts=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) 2008-2020 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
-@@ -41,7 +41,7 @@ static const GtkIMContextInfo *info_list[] = {
- G_MODULE_EXPORT const gchar*
- g_module_check_init (GModule *module)
- {
-- return null;
-+ return NULL;
- }
-
- G_MODULE_EXPORT void
-diff --git a/src/tests/ibus-desktop-testing-runner.in b/src/tests/ibus-desktop-testing-runner.in
-index f760fd5b..4232c549 100755
---- a/src/tests/ibus-desktop-testing-runner.in
-+++ b/src/tests/ibus-desktop-testing-runner.in
-@@ -173,7 +173,7 @@ _EOF
- # `su` command does not get focus in events without this variable.
- # Need to restart sshd after set "PermitRootLogin yes" in sshd_config
- if [ "x$XDG_RUNTIME_DIR" = x ] ; then
-- export XDG_RUNTIME_DIR=/run/user/$UID
-+ export XDG_RUNTIME_DIR="/run/user/$UID"
- is_root_login=`grep "^PermitRootLogin" /etc/ssh/sshd_config | grep yes`
- if [ "x$ANSIBLE" != x ] && [ "x$is_root_login" = x ] ; then
- print_log -e "${RED}FAIL${NC}: No permission to get focus-in events in GtkWindow with ansible"
---
-2.24.1
-
-From 8c4125bc78ce3502b5aeb053e7029cc2594f83f2 Mon Sep 17 00:00:00 2001
-From: Changwoo Ryu <cwryu@debian.org>
-Date: Sun, 12 Apr 2020 05:28:15 +0900
-Subject: [PATCH] src: Build the Emoji dictionaries in parallel
-
-Instead of building Emoji dictionaries src/dicts/emoji-*.dict in sequence, a
-pattern rule is specified for them. The make -jN option builds the
-dictionaries in parallel.
-
-The GNU make extensions like pattern rule and patsubst function are used for
-it. But src/Makefile.am has had other GNU make extensions for a while, so
-using more extensions should not make portability worse.
-
-BUG=https://github.com/ibus/ibus/pull/2209
----
- src/Makefile.am | 55 ++++++++++++++++++++++++-------------------------
- 1 file changed, 27 insertions(+), 28 deletions(-)
-
-diff --git a/src/Makefile.am b/src/Makefile.am
-index a8e3d07d..99de1ab7 100644
---- a/src/Makefile.am
-+++ b/src/Makefile.am
-@@ -246,42 +246,41 @@ if ENABLE_EMOJI_DICT
- AM_CPPFLAGS += -DENABLE_EMOJI_DICT
-
- dictdir = $(pkgdatadir)/dicts
--dict_DATA = dicts/emoji-en.dict
- LANG_FILES = $(basename $(notdir $(wildcard $(EMOJI_ANNOTATION_DIR)/*.xml)))
-+EMOJI_DICT_FILES = $(patsubst %,dicts/emoji-%.dict,$(LANG_FILES))
-+dict_DATA = $(EMOJI_DICT_FILES)
-
- noinst_PROGRAMS += emoji-parser
-
--dicts/emoji-en.dict: emoji-parser
-+dicts/emoji-%.dict: emoji-parser
- $(AM_V_at)if test x"$(LANG_FILES)" = x ; then \
- echo "WARNING: Not found $(EMOJI_ANNOTATION_DIR)/en.xml" 1>&2; \
- fi; \
-- for f in $(LANG_FILES) ; do \
-- if test -f dicts/emoji-$$f.dict; then \
-- echo "Already exists dicts/emoji-$$f.dict"; \
-- continue; \
-- fi; \
-- if test -f \
-- "$(EMOJI_ANNOTATION_DIR)/../annotationsDerived/$$f.xml" ; then \
-- xml_derived_option="--xml-derived $(EMOJI_ANNOTATION_DIR)/../annotationsDerived/$$f.xml"; \
-+ if test -f $@; then \
-+ echo "Already exists $@"; \
-+ exit 0; \
-+ fi; \
-+ if test -f \
-+ "$(EMOJI_ANNOTATION_DIR)/../annotationsDerived/$*.xml" ; then \
-+ xml_derived_option="--xml-derived $(EMOJI_ANNOTATION_DIR)/../annotationsDerived/$*.xml"; \
- plus_comment="derived"; \
-- fi; \
-- if test x"$$f" = xen ; then \
-- $(builddir)/emoji-parser \
-- --unicode-emoji-dir $(UNICODE_EMOJI_DIR) \
-- --xml $(EMOJI_ANNOTATION_DIR)/$$f.xml \
-- $$xml_derived_option \
-- --xml-ascii $(top_srcdir)/data/annotations/en_ascii.xml \
-- --out-category ibusemojigen.h \
-- --out $@; \
-- else \
-- $(builddir)/emoji-parser \
-- --unicode-emoji-dir $(UNICODE_EMOJI_DIR) \
-- --xml $(EMOJI_ANNOTATION_DIR)/$$f.xml \
-- $$xml_derived_option \
-- --out dicts/emoji-$$f.dict; \
-- fi; \
-- echo "Generated $$plus_comment dicts/emoji-$$f.dict"; \
-- done
-+ fi; \
-+ if test x"$*" = xen ; then \
-+ $(builddir)/emoji-parser \
-+ --unicode-emoji-dir $(UNICODE_EMOJI_DIR) \
-+ --xml $(EMOJI_ANNOTATION_DIR)/$*.xml \
-+ $$xml_derived_option \
-+ --xml-ascii $(top_srcdir)/data/annotations/en_ascii.xml \
-+ --out-category ibusemojigen.h \
-+ --out $@; \
-+ else \
-+ $(builddir)/emoji-parser \
-+ --unicode-emoji-dir $(UNICODE_EMOJI_DIR) \
-+ --xml $(EMOJI_ANNOTATION_DIR)/$*.xml \
-+ $$xml_derived_option \
-+ --out $@; \
-+ fi; \
-+ echo "Generated $$plus_comment $@"
-
- ibusemojigen.h: dicts/emoji-en.dict
- $(NULL)
---
-2.23.0.rc1
-
-From 02105c4d486283e6b561181d9c934d4d23f2d65e Mon Sep 17 00:00:00 2001
-From: fujiwarat <takao.fujiwara1@gmail.com>
-Date: Thu, 14 May 2020 15:48:34 +0900
-Subject: [PATCH] bus: Fix SEGV in bus_panel_proxy_focus_in()
-
-SEGV in BUS_IS_PANEL_PROXY() in bus_panel_proxy_focus_in()
-Check if GDBusConnect is closed before bus_panel_proxy_new() is called.
-
-BUG=rhbz#1349148
-BUG=rhbz#1385349
----
- bus/ibusimpl.c | 25 ++++++++++++++++++++-----
- 1 file changed, 20 insertions(+), 5 deletions(-)
-
-diff --git a/bus/ibusimpl.c b/bus/ibusimpl.c
-index 85761d30..e432e849 100644
---- a/bus/ibusimpl.c
-+++ b/bus/ibusimpl.c
-@@ -2,8 +2,8 @@
- /* vim:set et sts=4: */
- /* ibus - The Input Bus
- * Copyright (C) 2008-2013 Peng Huang <shawn.p.huang@gmail.com>
-- * Copyright (C) 2011-2019 Takao Fujiwara <takao.fujiwara1@gmail.com>
-- * Copyright (C) 2008-2019 Red Hat, Inc.
-+ * Copyright (C) 2011-2020 Takao Fujiwara <takao.fujiwara1@gmail.com>
-+ * Copyright (C) 2008-2020 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
-@@ -464,13 +464,16 @@ _dbus_name_owner_changed_cb (BusDBusImpl *dbus,
- else if (!g_strcmp0 (name, IBUS_SERVICE_PANEL_EXTENSION_EMOJI))
- panel_type = PANEL_TYPE_EXTENSION_EMOJI;
-
-- if (panel_type != PANEL_TYPE_NONE) {
-+ do {
-+ if (panel_type == PANEL_TYPE_NONE)
-+ break;
- if (g_strcmp0 (new_name, "") != 0) {
- /* a Panel process is started. */
- BusConnection *connection;
- BusInputContext *context = NULL;
- BusPanelProxy **panel = (panel_type == PANEL_TYPE_PANEL) ?
- &ibus->panel : &ibus->emoji_extension;
-+ GDBusConnection *dbus_connection = NULL;
-
- if (*panel != NULL) {
- ibus_proxy_destroy ((IBusProxy *)(*panel));
-@@ -479,9 +482,21 @@ _dbus_name_owner_changed_cb (BusDBusImpl *dbus,
- g_assert (*panel == NULL);
- }
-
-- connection = bus_dbus_impl_get_connection_by_name (BUS_DEFAULT_DBUS, new_name);
-+ connection = bus_dbus_impl_get_connection_by_name (BUS_DEFAULT_DBUS,
-+ new_name);
- g_return_if_fail (connection != NULL);
-
-+ dbus_connection = bus_connection_get_dbus_connection (connection);
-+ /* rhbz#1349148 rhbz#1385349
-+ * Avoid SEGV of BUS_IS_PANEL_PROXY (ibus->panel)
-+ * This function is called during destroying the connection
-+ * in this case? */
-+ if (dbus_connection == NULL ||
-+ g_dbus_connection_is_closed (dbus_connection)) {
-+ new_name = "";
-+ break;
-+ }
-+
- *panel = bus_panel_proxy_new (connection, panel_type);
- if (panel_type == PANEL_TYPE_EXTENSION_EMOJI)
- ibus->enable_emoji_extension = FALSE;
-@@ -535,7 +550,7 @@ _dbus_name_owner_changed_cb (BusDBusImpl *dbus,
- }
- }
- }
-- }
-+ } while (0);
-
- bus_ibus_impl_component_name_owner_changed (ibus, name, old_name, new_name);
- }
---
-2.24.1
-
-From f591381e3c892947ecaffe9131b9039ab9014498 Mon Sep 17 00:00:00 2001
-From: fujiwarat <takao.fujiwara1@gmail.com>
-Date: Thu, 14 May 2020 16:02:00 +0900
-Subject: [PATCH] bus: Fix SEGV in bus_dbus_impl_name_owner_changed()
-
-rhbz#1406699 SEGV in new_owner!=NULL in bus_dbus_impl_name_owner_changed()
-which is called by bus_name_service_remove_owner()
-If bus_connection_get_unique_name()==NULL, set new_owner="" in
-bus_name_service_remove_owner()
-
-rhbz#1432252 SEGV in old_owner!=NULL in bus_dbus_impl_name_owner_changed()
-which is called by bus_name_service_set_primary_owner()
-If bus_connection_get_unique_name()==NULL, set old_owner="" in
-bus_name_service_set_primary_owner()
-
-BUG=rhbz#1406699
-BUG=rhbz#1432252
----
- bus/dbusimpl.c | 27 +++++++++++++++++++++++----
- 1 file changed, 23 insertions(+), 4 deletions(-)
-
-diff --git a/bus/dbusimpl.c b/bus/dbusimpl.c
-index b54ef817..59787a80 100644
---- a/bus/dbusimpl.c
-+++ b/bus/dbusimpl.c
-@@ -2,7 +2,8 @@
- /* vim:set et sts=4: */
- /* ibus - The Input Bus
- * Copyright (C) 2008-2013 Peng Huang <shawn.p.huang@gmail.com>
-- * Copyright (C) 2008-2013 Red Hat, Inc.
-+ * Copyright (C) 2015-2020 Takao Fujiwara <takao.fujiwara1@gmail.com>
-+ * Copyright (C) 2008-2020 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
-@@ -344,6 +345,8 @@ bus_name_service_set_primary_owner (BusNameService *service,
- BusConnectionOwner *owner,
- BusDBusImpl *dbus)
- {
-+ gboolean has_old_owner = FALSE;
-+
- g_assert (service != NULL);
- g_assert (owner != NULL);
- g_assert (dbus != NULL);
-@@ -351,6 +354,13 @@ bus_name_service_set_primary_owner (BusNameService *service,
- BusConnectionOwner *old = service->owners != NULL ?
- (BusConnectionOwner *)service->owners->data : NULL;
-
-+ /* rhbz#1432252 If bus_connection_get_unique_name() == NULL,
-+ * "Hello" method is not received yet.
-+ */
-+ if (old != NULL && bus_connection_get_unique_name (old->conn) != NULL) {
-+ has_old_owner = TRUE;
-+ }
-+
- if (old != NULL) {
- g_signal_emit (dbus,
- dbus_signals[NAME_LOST],
-@@ -370,7 +380,8 @@ bus_name_service_set_primary_owner (BusNameService *service,
- 0,
- owner->conn,
- service->name,
-- old != NULL ? bus_connection_get_unique_name (old->conn) : "",
-+ has_old_owner ? bus_connection_get_unique_name (old->conn) :
-+ "",
- bus_connection_get_unique_name (owner->conn));
-
- if (old != NULL && old->do_not_queue != 0) {
-@@ -427,6 +438,7 @@ bus_name_service_remove_owner (BusNameService *service,
- BusDBusImpl *dbus)
- {
- GSList *owners;
-+ gboolean has_new_owner = FALSE;
-
- g_assert (service != NULL);
- g_assert (owner != NULL);
-@@ -439,6 +451,13 @@ bus_name_service_remove_owner (BusNameService *service,
- BusConnectionOwner *_new = NULL;
- if (owners->next != NULL) {
- _new = (BusConnectionOwner *)owners->next->data;
-+ /* rhbz#1406699 If bus_connection_get_unique_name() == NULL,
-+ * "Hello" method is not received yet.
-+ */
-+ if (_new != NULL &&
-+ bus_connection_get_unique_name (_new->conn) != NULL) {
-+ has_new_owner = TRUE;
-+ }
- }
-
- if (dbus != NULL) {
-@@ -447,7 +466,7 @@ bus_name_service_remove_owner (BusNameService *service,
- 0,
- owner->conn,
- service->name);
-- if (_new != NULL) {
-+ if (has_new_owner) {
- g_signal_emit (dbus,
- dbus_signals[NAME_ACQUIRED],
- 0,
-@@ -460,7 +479,7 @@ bus_name_service_remove_owner (BusNameService *service,
- _new != NULL ? _new->conn : NULL,
- service->name,
- bus_connection_get_unique_name (owner->conn),
-- _new != NULL ? bus_connection_get_unique_name (_new->conn) : "");
-+ has_new_owner ? bus_connection_get_unique_name (_new->conn) : "");
-
- }
- }
---
-2.24.1
-
-From 0da3cece88c8b94c0721aa7aca4f2d427aa22069 Mon Sep 17 00:00:00 2001
-From: Neil Shepperd <nshepperd@gmail.com>
-Date: Wed, 22 Jul 2020 15:31:29 +0900
-Subject: [PATCH 1/9] src: Skip parsing of compose sequence with invalid
- keysyms
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Instead of continuing with the keysym defaulted to <Delete>, print a
-warning and skip the broken XCompose rule entirely. Fixes a bug where
-an ~/.XCompose file with a error breaks the delete key.
-
-Tested locally with the example from launchpad bug below:
-
- <\> <)> : "☭" # HAMMER AND SICKLE
-
-This is incorrect syntax as neither <\> nor <)> are correct keysym
-names. Before this patch, ibus-daemon -v prints a warning, but
-pressing delete twice produces ☭ instead of its normal function. After
-this patch, ibus-daemon -v prints a slightly better warning, and the
-delete key is unaffected.
-
-BUG=https://github.com/ibus/ibus/issues/2130
-BUG=https://bugs.launchpad.net/ubuntu/+source/ibus/+bug/1849399
----
- src/ibuscomposetable.c | 8 ++++++--
- 1 file changed, 6 insertions(+), 2 deletions(-)
-
-diff --git a/src/ibuscomposetable.c b/src/ibuscomposetable.c
-index 3f439134..c50be2b3 100644
---- a/src/ibuscomposetable.c
-+++ b/src/ibuscomposetable.c
-@@ -216,8 +216,12 @@ parse_compose_sequence (IBusComposeData *compose_data,
- compose_data->sequence[n] = codepoint;
- }
-
-- if (codepoint == IBUS_KEY_VoidSymbol)
-- g_warning ("Could not get code point of keysym %s", match);
-+ if (codepoint == IBUS_KEY_VoidSymbol) {
-+ g_warning ("Could not get code point of keysym %s: %s",
-+ match, line);
-+ g_free (match);
-+ goto fail;
-+ }
- g_free (match);
- n++;
- }
---
-2.24.1
-
-From 0ad5e9a6b6611b53c63e635e89b42e30e43ac701 Mon Sep 17 00:00:00 2001
-From: fujiwarat <takao.fujiwara1@gmail.com>
-Date: Wed, 5 Aug 2020 19:50:02 +0900
-Subject: [PATCH 2/9] setup: Delete autostart setting
-
-BUG=https://github.com/ibus/ibus/pull/2224
----
- setup/main.py | 38 --------------------------------
- setup/setup.ui | 59 --------------------------------------------------
- 2 files changed, 97 deletions(-)
-
-diff --git a/setup/main.py b/setup/main.py
-index f6adb098..d5e2078c 100644
---- a/setup/main.py
-+++ b/setup/main.py
-@@ -398,13 +398,6 @@ class Setup(object):
- self.__button_close = self.__builder.get_object("button_close")
- self.__button_close.connect("clicked", Gtk.main_quit)
-
-- # auto start ibus
-- self.__checkbutton_auto_start = self.__builder.get_object(
-- "checkbutton_auto_start")
-- self.__checkbutton_auto_start.set_active(self.__is_auto_start())
-- self.__checkbutton_auto_start.connect("toggled",
-- self.__checkbutton_auto_start_toggled_cb)
--
- self.__init_hotkeys()
- self.__init_panel()
- self.__init_general()
-@@ -647,37 +640,6 @@ class Setup(object):
- # set new value
- model.set(iter, COLUMN_PRELOAD, data[DATA_PRELOAD])
-
-- def __is_auto_start(self):
-- link_file = path.join(GLib.get_user_config_dir(),
-- "autostart/ibus.desktop")
-- ibus_desktop = path.join(os.getenv("IBUS_PREFIX"),
-- "share/applications/ibus.desktop")
--
-- if not path.exists(link_file):
-- return False
-- if not path.islink(link_file):
-- return False
-- if path.realpath(link_file) != ibus_desktop:
-- return False
-- return True
--
-- def __checkbutton_auto_start_toggled_cb(self, button):
-- auto_start_dir = path.join(GLib.get_user_config_dir(), "autostart")
-- if not path.isdir(auto_start_dir):
-- os.makedirs(auto_start_dir)
--
-- link_file = path.join(GLib.get_user_config_dir(),
-- "autostart/ibus.desktop")
-- ibus_desktop = path.join(os.getenv("IBUS_PREFIX"),
-- "share/applications/ibus.desktop")
-- # unlink file
-- try:
-- os.unlink(link_file)
-- except:
-- pass
-- if self.__checkbutton_auto_start.get_active():
-- os.symlink(ibus_desktop, link_file)
--
- def __sigusr1_cb(self, *args):
- self.__window.present()
-
-diff --git a/setup/setup.ui b/setup/setup.ui
-index 56453054..250f43a0 100644
---- a/setup/setup.ui
-+++ b/setup/setup.ui
-@@ -1307,65 +1307,6 @@
- <property name="orientation">vertical</property>
- <property name="can_focus">False</property>
- <property name="no_show_all">True</property>
-- <child>
-- <placeholder/>
-- </child>
-- <child>
-- <object class="GtkLabel" id="label5">
-- <property name="visible">True</property>
-- <property name="can_focus">False</property>
-- <property name="label" translatable="yes"><big><b>IBus</b></big>
--<small>The intelligent input bus</small>
--Homepage: https://github.com/ibus/ibus/wiki
--
--
--
--</property>
-- <property name="use_markup">True</property>
-- <property name="justify">center</property>
-- </object>
-- <packing>
-- <property name="expand">True</property>
-- <property name="fill">True</property>
-- <property name="position">1</property>
-- </packing>
-- </child>
-- <child>
-- <object class="GtkFrame" id="frame1">
-- <property name="can_focus">False</property>
-- <property name="no_show_all">True</property>
-- <property name="label_xalign">0</property>
-- <property name="shadow_type">none</property>
-- <child>
-- <object class="GtkCheckButton" id="checkbutton_auto_start">
-- <property name="label" translatable="yes">Start ibus on login</property>
-- <property name="use_action_appearance">False</property>
-- <property name="visible">True</property>
-- <property name="can_focus">True</property>
-- <property name="receives_default">False</property>
-- <property name="use_action_appearance">False</property>
-- <property name="use_underline">True</property>
-- <property name="halign">start</property>
-- <property name="draw_indicator">True</property>
-- <property name="margin_top">6</property>
-- <property name="margin_start">12</property>
-- </object>
-- </child>
-- <child type="label">
-- <object class="GtkLabel" id="label4">
-- <property name="visible">True</property>
-- <property name="can_focus">False</property>
-- <property name="label" translatable="yes"><b>Startup</b></property>
-- <property name="use_markup">True</property>
-- </object>
-- </child>
-- </object>
-- <packing>
-- <property name="expand">False</property>
-- <property name="fill">False</property>
-- <property name="position">2</property>
-- </packing>
-- </child>
- </object>
- <packing>
- <property name="position">4</property>
---
-2.24.1
-
-From 3f098dc51a718f3bd427873607dcd47865523dce Mon Sep 17 00:00:00 2001
-From: Aaron Muir Hamilton <aaron@correspondwith.me>
-Date: Tue, 18 Aug 2020 13:45:32 +0900
-Subject: [PATCH 3/9] ui/gtk3: Tell Pango about the engine language in the
- candidate panel
-
-This helps Pango select the correct font variants for the engine
-language, which is especially important between languages based on han
-characters which have wildly different forms of the same character.
-
-BUG=https://github.com/ibus/ibus/issues/2238
----
- ui/gtk3/candidatearea.vala | 7 +++++++
- ui/gtk3/candidatepanel.vala | 9 +++++++++
- ui/gtk3/panel.vala | 2 ++
- 3 files changed, 18 insertions(+)
-
-diff --git a/ui/gtk3/candidatearea.vala b/ui/gtk3/candidatearea.vala
-index b22ab5da..0ab41217 100644
---- a/ui/gtk3/candidatearea.vala
-+++ b/ui/gtk3/candidatearea.vala
-@@ -32,6 +32,8 @@ class CandidateArea : Gtk.Box {
- private bool m_show_cursor;
- private ThemedRGBA m_rgba;
-
-+ private Pango.Attribute m_language_attribute;
-+
- private const string LABELS[] = {
- "1.", "2.", "3.", "4.", "5.", "6.", "7.", "8.",
- "9.", "0.", "a.", "b.", "c.", "d.", "e.", "f."
-@@ -102,6 +104,10 @@ class CandidateArea : Gtk.Box {
- m_labels[i].set_text(LABELS[i]);
- }
-
-+ public void set_language(Pango.Attribute language_attribute) {
-+ m_language_attribute = language_attribute.copy();
-+ }
-+
- public void set_candidates(IBus.Text[] candidates,
- uint focus_candidate = 0,
- bool show_cursor = true) {
-@@ -115,6 +121,7 @@ class CandidateArea : Gtk.Box {
- bool visible = false;
- if (i < candidates.length) {
- Pango.AttrList attrs = get_pango_attr_list_from_ibus_text(candidates[i]);
-+ attrs.change(m_language_attribute.copy());
- if (i == focus_candidate && show_cursor) {
- Pango.Attribute pango_attr = Pango.attr_foreground_new(
- (uint16)(m_rgba.selected_fg.red * uint16.MAX),
-diff --git a/ui/gtk3/candidatepanel.vala b/ui/gtk3/candidatepanel.vala
-index 8994cdb9..57544df3 100644
---- a/ui/gtk3/candidatepanel.vala
-+++ b/ui/gtk3/candidatepanel.vala
-@@ -34,6 +34,8 @@ public class CandidatePanel : Gtk.Box{
-
- private Gdk.Rectangle m_cursor_location;
-
-+ private Pango.Attribute m_language_attribute;
-+
- public signal void cursor_up();
- public signal void cursor_down();
- public signal void page_up();
-@@ -112,8 +114,14 @@ public class CandidatePanel : Gtk.Box{
- m_candidate_area.set_labels(labels);
- }
-
-+ public void set_language(Pango.Attribute language_attribute) {
-+ m_candidate_area.set_language(language_attribute);
-+ m_language_attribute = language_attribute.copy();
-+ }
-+
- private void set_attributes(Gtk.Label label, IBus.Text text) {
- Pango.AttrList attrs = get_pango_attr_list_from_ibus_text(text);
-+ attrs.change(m_language_attribute.copy());
-
- Gtk.StyleContext context = label.get_style_context();
- Gdk.RGBA color;
-@@ -154,6 +162,7 @@ public class CandidatePanel : Gtk.Box{
- if (text != null) {
- m_aux_label.set_text(text.get_text());
- Pango.AttrList attrs = get_pango_attr_list_from_ibus_text(text);
-+ attrs.change(m_language_attribute.copy());
- m_aux_label.set_attributes(attrs);
- m_aux_label.show();
- } else {
-diff --git a/ui/gtk3/panel.vala b/ui/gtk3/panel.vala
-index 680c86ed..8d9f5cc0 100644
---- a/ui/gtk3/panel.vala
-+++ b/ui/gtk3/panel.vala
-@@ -822,6 +822,8 @@ class Panel : IBus.PanelService {
- if (!m_use_system_keyboard_layout)
- m_xkblayout.set_layout(engine);
-
-+ m_candidate_panel.set_language(new Pango.AttrLanguage(Pango.Language.from_string(engine.get_language())));
-+
- engine_contexts_insert(engine);
- }
-
---
-2.24.1
-
-From 79a09f1e75357a9f1b38e80717a59c19cca1645e Mon Sep 17 00:00:00 2001
-From: fujiwarat <takao.fujiwara1@gmail.com>
-Date: Tue, 18 Aug 2020 13:45:38 +0900
-Subject: [PATCH 4/9] setup: Add use-glyph-from-engine-lang
-
-The setting can revert the previous setting to choose glpyhs
-with the current locale on lookup window instead of the engine's language.
-
-BUG=https://github.com/ibus/ibus/issues/2238
----
- data/dconf/org.freedesktop.ibus.gschema.xml | 9 ++++
- setup/main.py | 7 +++
- setup/setup.ui | 49 +++++++++++++++++++++
- ui/gtk3/panel.vala | 26 ++++++++++-
- 4 files changed, 89 insertions(+), 2 deletions(-)
-
-diff --git a/data/dconf/org.freedesktop.ibus.gschema.xml b/data/dconf/org.freedesktop.ibus.gschema.xml
-index 7ae8f0f6..11a179a6 100644
---- a/data/dconf/org.freedesktop.ibus.gschema.xml
-+++ b/data/dconf/org.freedesktop.ibus.gschema.xml
-@@ -165,6 +165,15 @@
- <summary>Custom font</summary>
- <description>Custom font name for language panel</description>
- </key>
-+ <key name="use-glyph-from-engine-lang" type="b">
-+ <default>true</default>
-+ <summary>Choose glyphs with input method's language on candidate window</summary>
-+ <description>Some code points have the different glyphs and Pango
-+ determines the glyphs from the language attribute.
-+ Pango chooses glyphs from the IBus engine's language
-+ if the value is true and choose them from the desktop
-+ locale if the value is false.</description>
-+ </key>
- <child name="emoji" schema="org.freedesktop.ibus.panel.emoji"/>
- </schema>
- <schema id="org.freedesktop.ibus.panel.emoji" path="/desktop/ibus/panel/emoji/">
-diff --git a/setup/main.py b/setup/main.py
-index d5e2078c..8c8d7a47 100644
---- a/setup/main.py
-+++ b/setup/main.py
-@@ -212,6 +212,13 @@ class Setup(object):
- 'active',
- Gio.SettingsBindFlags.DEFAULT)
-
-+ self.__checkbutton_glyph_from_engine_lang = self.__builder.get_object(
-+ "checkbutton_use_glyph_from_engine_lang")
-+ self.__settings_panel.bind('use-glyph-from-engine-lang',
-+ self.__checkbutton_glyph_from_engine_lang,
-+ 'active',
-+ Gio.SettingsBindFlags.DEFAULT)
-+
- def __init_general(self):
- # embed preedit text
- self.__checkbutton_embed_preedit_text = self.__builder.get_object(
-diff --git a/setup/setup.ui b/setup/setup.ui
-index 250f43a0..a15b9083 100644
---- a/setup/setup.ui
-+++ b/setup/setup.ui
-@@ -1286,6 +1286,55 @@
- <property name="position">1</property>
- </packing>
- </child>
-+ <child>
-+ <object class="GtkFrame" id="frame1">
-+ <property name="visible">True</property>
-+ <property name="can_focus">False</property>
-+ <property name="label_xalign">0</property>
-+ <property name="shadow_type">none</property>
-+ <child>
-+ <object class="GtkBox" id="vbox10">
-+ <property name="orientation">vertical</property>
-+ <property name="visible">True</property>
-+ <property name="can_focus">False</property>
-+ <property name="spacing">6</property>
-+ <property name="margin_top">6</property>
-+ <property name="margin_start">24</property>
-+ <child>
-+ <object class="GtkCheckButton" id="checkbutton_use_glyph_from_engine_lang">
-+ <property name="label" translatable="yes">Choose glyphs with input method's language on candidate window</property>
-+ <property name="use_action_appearance">False</property>
-+ <property name="visible">True</property>
-+ <property name="can_focus">True</property>
-+ <property name="receives_default">False</property>
-+ <property name="tooltip_text" translatable="yes">Choose glyphs with the input method's language on the candidate window for the duplicated code points</property>
-+ <property name="use_action_appearance">False</property>
-+ <property name="halign">start</property>
-+ <property name="draw_indicator">True</property>
-+ </object>
-+ <packing>
-+ <property name="expand">False</property>
-+ <property name="fill">False</property>
-+ <property name="position">0</property>
-+ </packing>
-+ </child>
-+ </object>
-+ </child>
-+ <child type="label">
-+ <object class="GtkLabel" id="label20">
-+ <property name="visible">True</property>
-+ <property name="can_focus">False</property>
-+ <property name="label" translatable="yes"><b>Fonts</b></property>
-+ <property name="use_markup">True</property>
-+ </object>
-+ </child>
-+ </object>
-+ <packing>
-+ <property name="expand">False</property>
-+ <property name="fill">False</property>
-+ <property name="position">2</property>
-+ </packing>
-+ </child>
- </object>
- <packing>
- <property name="position">3</property>
-diff --git a/ui/gtk3/panel.vala b/ui/gtk3/panel.vala
-index 8d9f5cc0..dc98e722 100644
---- a/ui/gtk3/panel.vala
-+++ b/ui/gtk3/panel.vala
-@@ -47,6 +47,7 @@ class Panel : IBus.PanelService {
- private string m_current_context_path = "";
- private string m_real_current_context_path = "";
- private bool m_use_global_engine = true;
-+ private bool m_use_engine_lang = true;
- private CandidatePanel m_candidate_panel;
- private Switcher m_switcher;
- private uint m_switcher_focus_set_engine_id;
-@@ -197,6 +198,15 @@ class Panel : IBus.PanelService {
- ref m_css_provider);
- });
-
-+ m_settings_panel.changed["use-glyph-from-engine-lang"].connect((key) =>
-+ {
-+ m_use_engine_lang = m_settings_panel.get_boolean(
-+ "use-glyph-from-engine-lang");
-+ var engine = m_bus.get_global_engine();
-+ if (engine != null)
-+ set_language_from_engine(engine);
-+ });
-+
- m_settings_panel.changed["show-icon-on-systray"].connect((key) => {
- set_show_icon_on_systray();
- });
-@@ -732,6 +742,8 @@ class Panel : IBus.PanelService {
- set_use_system_keyboard_layout();
- set_use_global_engine();
- set_use_xmodmap();
-+ m_use_engine_lang = m_settings_panel.get_boolean(
-+ "use-glyph-from-engine-lang");
- update_engines(m_settings_general.get_strv("preload-engines"),
- m_settings_general.get_strv("engines-order"));
- BindingCommon.unbind_switch_shortcut(
-@@ -801,6 +813,17 @@ class Panel : IBus.PanelService {
- m_engine_contexts.replace(m_current_context_path, engine);
- }
-
-+ private void set_language_from_engine(IBus.EngineDesc engine) {
-+ if (m_use_engine_lang) {
-+ m_candidate_panel.set_language(new Pango.AttrLanguage(
-+ Pango.Language.from_string(engine.get_language())));
-+ } else {
-+ m_candidate_panel.set_language(new Pango.AttrLanguage(
-+ Pango.Language.from_string(null)));
-+ }
-+
-+ }
-+
- private void set_engine(IBus.EngineDesc engine) {
- if (m_property_icon_delay_time_id > 0) {
- GLib.Source.remove(m_property_icon_delay_time_id);
-@@ -822,8 +845,7 @@ class Panel : IBus.PanelService {
- if (!m_use_system_keyboard_layout)
- m_xkblayout.set_layout(engine);
-
-- m_candidate_panel.set_language(new Pango.AttrLanguage(Pango.Language.from_string(engine.get_language())));
--
-+ set_language_from_engine(engine);
- engine_contexts_insert(engine);
- }
-
---
-2.24.1
-
-From 508527daaf90901b6a7fa062372516640f88aa75 Mon Sep 17 00:00:00 2001
-From: fujiwarat <takao.fujiwara1@gmail.com>
-Date: Fri, 21 Aug 2020 09:07:39 +0900
-Subject: [PATCH 6/9] engine: Generate simple.xml with denylist
-
-simple.xml was generated by allowlist (whitelist) and it will be
-done by denylist (blacklist).
-
-BUG=https://github.com/ibus/ibus/issues/2153
----
- engine/Makefile.am | 20 ++-
- engine/denylist.txt | 27 ++++
- engine/gensimple.py | 367 ++++++++++++++++++++++++++++++++++++++++++++
- 3 files changed, 407 insertions(+), 7 deletions(-)
- create mode 100644 engine/denylist.txt
- create mode 100755 engine/gensimple.py
-
-diff --git a/engine/Makefile.am b/engine/Makefile.am
-index 86f0e2b8..ca405496 100644
---- a/engine/Makefile.am
-+++ b/engine/Makefile.am
-@@ -4,6 +4,7 @@
- #
- # Copyright (c) 2010-2016, Google Inc. All rights reserved.
- # Copyright (c) 2007-2016 Peng Huang <shawn.p.huang@gmail.com>
-+# Copyright (c) 2013-2020 Takao Fujiwara <takao.fujiwara1@gmail.com>
- #
- # This library is free software; you can redistribute it and/or
- # modify it under the terms of the GNU Lesser General Public
-@@ -78,20 +79,25 @@ component_DATA = \
-
- componentdir = $(pkgdatadir)/component
-
--CLEANFILES = \
-+MAINTAINERCLEANFILES = \
- simple.xml \
- $(NULL)
-
- EXTRA_DIST = \
-+ gensimple.py \
- iso639converter.py \
-- simple.xml.in \
-+ simple.xml \
- $(NULL)
-
--simple.xml: simple.xml.in
-- $(AM_V_GEN) sed \
-- -e 's|@VERSION[@]|$(VERSION)|g' \
-- -e 's|@libexecdir[@]|$(libexecdir)|g' $< > $@.tmp && \
-- mv $@.tmp $@
-+simple.xml:
-+ $(srcdir)/gensimple.py \
-+ --input=$(datarootdir)/X11/xkb/rules/evdev.xml \
-+ --output=$@ \
-+ --version=$(VERSION).`date '+%Y%m%d'` \
-+ --exec-path=$(libexecdir)/ibus-engine-simple \
-+ --iso-path=$(datarootdir)/xml/iso-codes/iso_639.xml \
-+ --first-language \
-+ $(NULL)
-
- $(libibus):
- $(MAKE) -C $(top_builddir)/src
-diff --git a/engine/denylist.txt b/engine/denylist.txt
-new file mode 100644
-index 00000000..e4cd0473
---- /dev/null
-+++ b/engine/denylist.txt
-@@ -0,0 +1,27 @@
-+# vim:set fileencoding=utf-8 et sts=4 sw=4:
-+#
-+# ibus - Intelligent Input Bus for Linux / Unix OS
-+#
-+# Copyright © 2020 Takao Fujiwara <takao.fujiwara1@gmail.com>
-+#
-+# This library is free software; you can redistribute it and/or
-+# modify it under the terms of the GNU Lesser General Public
-+# License as published by the Free Software Foundation; either
-+# version 2.1 of the License, or (at your option) any later version.
-+#
-+# This library is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY; without even the implied warranty of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+# Lesser General Public License for more details.
-+#
-+# You should have received a copy of the GNU Lesser General Public
-+# License along with this library. If not, see <http://www.gnu.org/licenses/>.
-+
-+# This file is a deny list (black list) and used by gensimple.py.
-+# gensimple.py generates the engine list with evdev.xml and if an engine name
-+# is matched with any entries in this file, the engine is excluded from the
-+# engine list.
-+# Asterisk(*) character can be used to match any engines.
-+# E.g. xkb:cn:*:* excludes xkb:cn::zho and xkb:cn:mon_trad:mvf
-+xkb:cn:*:*
-+xkb:nec_vndr/jp:*:*
-diff --git a/engine/gensimple.py b/engine/gensimple.py
-new file mode 100755
-index 00000000..dc4ccf12
---- /dev/null
-+++ b/engine/gensimple.py
-@@ -0,0 +1,367 @@
-+#!/usr/bin/python
-+# vim:set fileencoding=utf-8 et sts=4 sw=4:
-+#
-+# ibus - Intelligent Input Bus for Linux / Unix OS
-+#
-+# Copyright © 2020 Takao Fujiwara <takao.fujiwara1@gmail.com>
-+#
-+# This library is free software; you can redistribute it and/or
-+# modify it under the terms of the GNU Lesser General Public
-+# License as published by the Free Software Foundation; either
-+# version 2.1 of the License, or (at your option) any later version.
-+#
-+# This library is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY; without even the implied warranty of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+# Lesser General Public License for more details.
-+#
-+# You should have received a copy of the GNU Lesser General Public
-+# License along with this library. If not, see <http://www.gnu.org/licenses/>.
-+
-+
-+# This script generates simple.xml with /usr/share/X11/xkb/rules/evdev.xml,
-+# /usr/share/xml/iso-codes/iso_639.xml and denylist.txt
-+
-+
-+from xml.dom import minidom
-+from xml.sax import make_parser as sax_make_parser
-+from xml.sax.handler import feature_namespaces as sax_feature_namespaces
-+from xml.sax.saxutils import XMLFilterBase, XMLGenerator, escape
-+from xml.sax.xmlreader import AttributesImpl
-+from xml.sax._exceptions import SAXParseException
-+
-+import codecs
-+import getopt
-+import io
-+import os
-+import sys
-+
-+VERSION='0.1'
-+EVDEV_XML = '/usr/share/X11/xkb/rules/evdev.xml'
-+EXEC_PATH='/usr/lib/ibus-engine-simple'
-+ISO_PATH='/usr/share/xml/iso-codes/iso_639.xml'
-+PY3K = sys.version_info >= (3, 0)
-+
-+if PY3K:
-+ from io import StringIO
-+else:
-+ # io.StringIO does not work with XMLGenerator
-+ from cStringIO import StringIO
-+ # iso_639.xml includes UTF-8
-+ reload(sys)
-+ sys.setdefaultencoding('utf-8')
-+
-+def usage(prgname):
-+ print('''\
-+%s Version %s
-+Usage:
-+ %s [OPTION...]
-+
-+Options:
-+ -h, --help Show this message
-+ -i, --input=EVDEV_XML Load EVDEV_XML file (default is:
-+ %s)
-+ -o, --output=FILE Output FILE (default is stdout)
-+ -V, --version=VERSION Set IBus VERSION (default is %s)
-+ -e, --exec-path=EXEC_PATH Set EXEC_PATH file (default is:
-+ %s)
-+ -I, --iso-path=ISO_PATH Load ISO_PATH file (default is:
-+ %s)
-+ -1, --first-language Pull first language only in language list
-+''' % (prgname, VERSION, prgname, EVDEV_XML, VERSION, EXEC_PATH, ISO_PATH))
-+
-+
-+class EvdevXML(XMLFilterBase):
-+ def __init__(self, parser=None, downstream=None, iso639=None,
-+ denylist=None, author=None, first=False):
-+ XMLFilterBase.__init__(self, parser)
-+ self.__downstream = downstream
-+ self.__iso639 = iso639
-+ self.__denylist = denylist
-+ self.__author = author
-+ self.__first = first
-+ self.__is_layout = False
-+ self.__is_description = False
-+ self.__is_config_item = False
-+ self.__is_variant = False
-+ self.__is_iso639 = False
-+ self.__is_name = False
-+ self.__layout = ''
-+ self.__description = ''
-+ self.__variant = ''
-+ self.__list_iso639 = []
-+ def startDocument(self):
-+ if self.__downstream:
-+ self.__downstream.startDocument()
-+ self.__downstream.startElement('engines', AttributesImpl({}))
-+ def endDocument(self):
-+ if self.__downstream:
-+ self.__downstream.endElement('engines')
-+ self.__downstream.endDocument()
-+ def startElement(self, name, attrs):
-+ if name == 'layout':
-+ self.__is_layout = True
-+ elif name == 'description':
-+ self.__is_description = True
-+ elif name == 'configItem':
-+ self.__is_config_item = True
-+ elif name == 'languageList':
-+ self.__list_iso639 = []
-+ elif name == 'iso639Id':
-+ self.__is_iso639 = True
-+ elif name == 'variant':
-+ self.__is_variant = True
-+ elif name == 'name':
-+ self.__is_name = True
-+ def endElement(self, name):
-+ if name == 'layout':
-+ self.__is_layout = False
-+ self.__layout = ''
-+ self.__description = ''
-+ self.__variant = ''
-+ self.__list_iso639 = []
-+ elif name == 'description':
-+ self.__is_description = False
-+ elif name == 'configItem':
-+ self.save()
-+ self.__is_config_item = False
-+ elif name == 'iso639Id':
-+ self.__is_iso639 = False
-+ elif name == 'variant':
-+ self.__is_variant = False
-+ elif name == 'name':
-+ self.__is_name = False
-+ def characters(self, text):
-+ if self.__is_description:
-+ self.__description = text
-+ elif self.__is_name:
-+ if self.__is_variant and self.__is_config_item:
-+ self.__variant = text
-+ elif self.__is_layout and self.__is_config_item:
-+ self.__layout = text
-+ elif self.__is_iso639:
-+ self.__list_iso639.append(text)
-+ def save(self):
-+ if not self.__downstream:
-+ return
-+ for iso in self.__list_iso639:
-+ do_deny = False
-+ for [xkb, layout, variant, lang] in self.__denylist:
-+ if xkb == 'xkb' \
-+ and ( layout == self.__layout or layout == '*' ) \
-+ and ( variant == self.__variant or variant == '*' ) \
-+ and ( lang == iso or variant == '*' ):
-+ do_deny = True
-+ break
-+ if do_deny:
-+ continue
-+ self.__downstream.startElement('engine', AttributesImpl({}))
-+ self.__downstream.startElement('name', AttributesImpl({}))
-+ name = 'xkb:%s:%s:%s' % (
-+ self.__layout,
-+ self.__variant,
-+ iso
-+ )
-+ self.__downstream.characters(name)
-+ self.__downstream.endElement('name')
-+ self.__downstream.startElement('language', AttributesImpl({}))
-+ iso639_1 = self.__iso639.code2to1(iso)
-+ if iso639_1 != None:
-+ iso = iso639_1
-+ self.__downstream.characters(iso)
-+ self.__downstream.endElement('language')
-+ self.__downstream.startElement('license', AttributesImpl({}))
-+ self.__downstream.characters('GPL')
-+ self.__downstream.endElement('license')
-+ if self.__author != None:
-+ self.__downstream.startElement('author', AttributesImpl({}))
-+ self.__downstream.characters(self.__author)
-+ self.__downstream.endElement('author')
-+ self.__downstream.startElement('layout', AttributesImpl({}))
-+ self.__downstream.characters(self.__layout)
-+ self.__downstream.endElement('layout')
-+ self.__downstream.startElement('longname', AttributesImpl({}))
-+ self.__downstream.characters(self.__description)
-+ self.__downstream.endElement('longname')
-+ self.__downstream.startElement('description', AttributesImpl({}))
-+ self.__downstream.characters(self.__description)
-+ self.__downstream.endElement('description')
-+ self.__downstream.startElement('icon', AttributesImpl({}))
-+ self.__downstream.characters('ibus-keyboard')
-+ self.__downstream.endElement('icon')
-+ self.__downstream.startElement('rank', AttributesImpl({}))
-+ if self.__variant == '':
-+ self.__downstream.characters('50')
-+ else:
-+ self.__downstream.characters('1')
-+ self.__downstream.endElement('rank')
-+ self.__downstream.endElement('engine')
-+ if self.__first:
-+ break
-+
-+
-+class GenerateEngineXML():
-+ _NAME = 'org.freedesktop.IBus.Simple'
-+ _DESCRIPTION = 'A table based simple engine'
-+ _AUTHOR = 'Peng Huang <shawn.p.huang@gmail.com>'
-+ _HOMEPAGE = 'https://github.com/ibus/ibus/wiki'
-+ _DOMAIN = 'ibus'
-+ def __init__(self, path, iso639=None, denylist='', version='', exec='',
-+ first=False):
-+ self.__path = path
-+ self.__iso639 = iso639
-+ self.__denylist = denylist
-+ self.__version = version
-+ self.__exec = exec
-+ self.__first = first
-+ self.__result = StringIO()
-+ downstream = XMLGenerator(self.__result, 'utf-8')
-+ self.__load(downstream)
-+
-+ def __load(self, downstream=None):
-+ parser = sax_make_parser()
-+ parser.setFeature(sax_feature_namespaces, 0)
-+ self.__handler = EvdevXML(parser,
-+ downstream,
-+ self.__iso639,
-+ self.__denylist,
-+ self._AUTHOR,
-+ self.__first)
-+ parser.setContentHandler(self.__handler)
-+ f = codecs.open(self.__path, 'r', encoding='utf-8')
-+ try:
-+ parser.parse(f)
-+ except SAXParseException:
-+ print('Error: Invalid file format: %s' % path)
-+ finally:
-+ f.close()
-+ def write(self, output=None):
-+ if output != None:
-+ od = codecs.open(output, 'w', encoding='utf-8')
-+ else:
-+ if PY3K:
-+ od = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
-+ else:
-+ od = codecs.getwriter('utf-8')(sys.stdout)
-+ contents = self.__result.getvalue()
-+ index = contents.find('<engines>')
-+ if index >= 0:
-+ author = escape(self._AUTHOR)
-+ contents = '%s<component><name>%s</name>\
-+<description>%s</description><exec>%s</exec><version>%s</version>\
-+<author>%s</author><license>%s</license><homepage>%s</homepage>\
-+<textdomain>%s</textdomain>%s</component>' % (
-+ contents[:index],
-+ self._NAME, self._DESCRIPTION,
-+ self.__exec, self.__version, author, 'GPL',
-+ self._HOMEPAGE, self._DOMAIN, contents[index:] )
-+ parsed = minidom.parseString(contents)
-+ # format with indent and encoding attribute in header
-+ xml = parsed.toprettyxml(indent=' ', encoding='utf-8')
-+ # convert byte to str
-+ od.write(str(xml, 'utf-8'))
-+ #od.write(contents)
-+
-+
-+class ISO639XML(XMLFilterBase):
-+ def __init__(self, parser=None):
-+ self.__code2to1 = {}
-+ self.__codetoname = {}
-+ XMLFilterBase.__init__(self, parser)
-+ def startElement(self, name, attrs):
-+ if name != 'iso_639_entry':
-+ return
-+ n = attrs.get('name')
-+ iso639_1 = attrs.get('iso_639_1_code')
-+ iso639_2b = attrs.get('iso_639_2B_code')
-+ iso639_2t = attrs.get('iso_639_2T_code')
-+ if iso639_1 != None:
-+ self.__codetoname[iso639_1] = n
-+ if iso639_2b != None:
-+ self.__code2to1[iso639_2b] = iso639_1
-+ self.__codetoname[iso639_2b] = n
-+ if iso639_2t != None and iso639_2b != iso639_2t:
-+ self.__code2to1[iso639_2t] = iso639_1
-+ self.__codetoname[iso639_2t] = n
-+ def code2to1(self, iso639_2):
-+ try:
-+ return self.__code2to1[iso639_2]
-+ except KeyError:
-+ return None
-+
-+
-+def parse_iso639(path):
-+ f = codecs.open(path, 'r', encoding='utf-8')
-+ parser = sax_make_parser()
-+ parser.setFeature(sax_feature_namespaces, 0)
-+ handler = ISO639XML(parser)
-+ parser.setContentHandler(handler)
-+ try:
-+ parser.parse(f)
-+ except SAXParseException:
-+ print('Error: Invalid file format: %s' % path)
-+ finally:
-+ f.close()
-+ return handler
-+
-+
-+def parse_denylist(denyfile):
-+ denylist = []
-+ f = codecs.open(denyfile, 'r', encoding='utf-8')
-+ for line in f.readlines():
-+ if line == '\n' or line[0] == '#':
-+ continue
-+ line = line.rstrip()
-+ entry = line.split(':')
-+ if len(entry) != 4:
-+ print('WARNING: format error: \'%s\' against \'%s\'' \
-+ % (line, 'xkb:layout:variant:lang'))
-+ continue
-+ denylist.append(entry)
-+ f.close()
-+ return denylist
-+
-+
-+if __name__ == '__main__':
-+ prgname = os.path.basename(sys.argv[0])
-+ mydir = os.path.dirname(sys.argv[0])
-+ try:
-+ opts, args = getopt.getopt(sys.argv[1:],
-+ 'hi:o:V:e:I:1',
-+ ['help', 'input=', 'output=', 'version=',
-+ 'exec-path=', 'iso-path=',
-+ 'first-language'])
-+ except getopt.GetoptError as err:
-+ print(err)
-+ usage(prgname)
-+ sys.exit(2)
-+ if len(args) > 0:
-+ usage(prgname)
-+ sys.exit(2)
-+ input = EVDEV_XML
-+ output = None
-+ version=VERSION
-+ exec_path=EXEC_PATH
-+ iso_path=ISO_PATH
-+ first=False
-+ for opt, arg in opts:
-+ if opt in ('-h', '--help'):
-+ usage(prgname)
-+ sys.exit()
-+ elif opt in ('-i', '--input'):
-+ input = arg
-+ elif opt in ('-o', '--output'):
-+ output = arg
-+ elif opt in ('-V', '--version'):
-+ version = arg
-+ elif opt in ('-e', '--exec-path'):
-+ exec_path = arg
-+ elif opt in ('-I', '--iso-path'):
-+ iso_path = arg
-+ elif opt in ('-1', '--first-langauge'):
-+ first=True
-+
-+ iso639 = parse_iso639(iso_path)
-+ denylist = parse_denylist('%s/%s' % ( mydir, 'denylist.txt'))
-+ xml = GenerateEngineXML(input, iso639, denylist, version, exec_path, first)
-+ xml.write(output)
---
-2.24.1
-
-From 6879879002af47d49d8740ca383a048d2ac8e904 Mon Sep 17 00:00:00 2001
-From: fujiwarat <takao.fujiwara1@gmail.com>
-Date: Fri, 21 Aug 2020 09:15:14 +0900
-Subject: [PATCH 8/9] src/tests: Fix runtest with simple.xml
-
-Now simple.xml.in is replaced with simple.xml and modify runtest
-to copy simple.xml.
-
-BUG=https://github.com/ibus/ibus/issues/2153
----
- src/tests/runtest | 15 ++++++++++++++-
- 1 file changed, 14 insertions(+), 1 deletion(-)
-
-diff --git a/src/tests/runtest b/src/tests/runtest
-index a6e4194b..11bcc6c2 100755
---- a/src/tests/runtest
-+++ b/src/tests/runtest
-@@ -91,6 +91,19 @@ func_copy_component () {
- fi
- }
-
-+func_copy_simple_xml () {
-+ file=$1
-+ base=`func_basename $file`
-+ libexecdir=`func_dirname $file`
-+ # top_srcdir != top_builddir in make dist
-+ libexecdir=`echo "$libexecdir" | sed -e "s|$top_srcdir|$top_builddir|"`
-+ if test -f $file; then
-+ mkdir -p components
-+ sed "s|\(<exec>\).*\(/ibus-engine-simple</exec>\)|\1$libexecdir\2|" \
-+ < $file > components/$base
-+ fi
-+}
-+
- trap 'func_cleanup $tstdir' 1 2 3 15
-
- tst=$1; shift
-@@ -127,7 +140,7 @@ run_test_case()
- exit -1
- fi
- # func_copy_component replaces s/$top_srcdir/%top_builddir/
-- func_copy_component "../$top_srcdir/engine/simple.xml"
-+ func_copy_simple_xml "../$top_srcdir/engine/simple.xml"
- func_copy_component "../$top_srcdir/conf/memconf/memconf.xml"
-
- IBUS_COMPONENT_PATH=$PWD/components
---
-2.24.1
-
-From 59b902a809ed628bb4d5bbad2b8bcb79a8a23208 Mon Sep 17 00:00:00 2001
-From: fujiwarat <takao.fujiwara1@gmail.com>
-Date: Fri, 21 Aug 2020 09:46:46 +0900
-Subject: [PATCH 9/9] src: Add file list in registry file
-
-Under Fedora Silverblue, st_mtime in /usr/share/ibus/component is
-1 Jan 1970 even if ibus engines are installed and ibus-daemon
-cannot detect new engines.
-Now IBusObservedPath saves hashed file list besides st_mtime of
-the compnent directory to detect the installed engines newly.
-
-BUG=https://github.com/ibus/ibus/issues/2132
----
- src/ibuscomponent.c | 9 +-
- src/ibusobservedpath.c | 277 ++++++++++++++++++++++++++++++++++++-----
- src/ibusregistry.c | 6 +-
- 3 files changed, 254 insertions(+), 38 deletions(-)
-
-diff --git a/src/ibuscomponent.c b/src/ibuscomponent.c
-index 9837f47c..1404ada0 100644
---- a/src/ibuscomponent.c
-+++ b/src/ibuscomponent.c
-@@ -2,7 +2,8 @@
- /* vim:set et sts=4: */
- /* bus - The Input Bus
- * Copyright (C) 2008-2010 Peng Huang <shawn.p.huang@gmail.com>
-- * Copyright (C) 2008-2019 Red Hat, Inc.
-+ * Copyright (C) 2020 Takao Fujiwara <takao.fujiwara1@gmail.com>
-+ * Copyright (C) 2008-2020 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
-@@ -499,11 +500,7 @@ ibus_component_output (IBusComponent *component,
-
- for (p = component->priv->observed_paths; p != NULL; p = p->next ) {
- IBusObservedPath *path = (IBusObservedPath *) p->data;
--
-- g_string_append_indent (output, indent + 2);
-- g_string_append_printf (output, "<path mtime=\"%ld\" >%s</path>\n",
-- path->mtime,
-- path->path);
-+ ibus_observed_path_output (path, output, indent + 2);
- }
-
- g_string_append_indent (output, indent + 1);
-diff --git a/src/ibusobservedpath.c b/src/ibusobservedpath.c
-index 5b79f1fe..42192431 100644
---- a/src/ibusobservedpath.c
-+++ b/src/ibusobservedpath.c
-@@ -2,7 +2,8 @@
- /* vim:set et sts=4: */
- /* ibus - The Input IBus
- * Copyright (C) 2008-2015 Peng Huang <shawn.p.huang@gmail.com>
-- * Copyright (C) 2008-2019 Red Hat, Inc.
-+ * Copyright (C) 2020 Takao Fujiwara <takao.fujiwara1@gmail.com>
-+ * Copyright (C) 2008-2020 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
-@@ -30,9 +31,9 @@ enum {
- };
-
-
--/* IBusObservedPathPriv */
-+/* IBusObservedPathPrivate */
- struct _IBusObservedPathPrivate {
-- gpointer pad;
-+ guint *file_hash_list;
- };
- typedef struct _IBusObservedPathPrivate IBusObservedPathPrivate;
-
-@@ -52,7 +53,9 @@ static gboolean ibus_observed_path_copy (IBusObservedPath *des
- static gboolean ibus_observed_path_parse_xml_node (IBusObservedPath *path,
- XMLNode *node);
-
--G_DEFINE_TYPE (IBusObservedPath, ibus_observed_path, IBUS_TYPE_SERIALIZABLE)
-+G_DEFINE_TYPE_WITH_PRIVATE (IBusObservedPath,
-+ ibus_observed_path,
-+ IBUS_TYPE_SERIALIZABLE)
-
- static void
- ibus_observed_path_class_init (IBusObservedPathClass *class)
-@@ -84,7 +87,9 @@ static gboolean
- ibus_observed_path_serialize (IBusObservedPath *path,
- GVariantBuilder *builder)
- {
-+ IBusObservedPathPrivate *priv = IBUS_OBSERVED_PATH_GET_PRIVATE (path);
- gboolean retval;
-+ guint i;
-
- retval = IBUS_SERIALIZABLE_CLASS (ibus_observed_path_parent_class)->
- serialize ((IBusSerializable *)path, builder);
-@@ -93,6 +98,15 @@ ibus_observed_path_serialize (IBusObservedPath *path,
- g_variant_builder_add (builder, "s", path->path);
- g_variant_builder_add (builder, "x", path->mtime);
-
-+ if (!priv->file_hash_list) {
-+ g_variant_builder_add (builder, "u", 0);
-+ return TRUE;
-+ }
-+ for (i = 0; priv->file_hash_list[i]; i++);
-+ g_variant_builder_add (builder, "u", i);
-+ for (i = 0; priv->file_hash_list[i]; i++)
-+ g_variant_builder_add (builder, "u", priv->file_hash_list[i]);
-+
- return TRUE;
- }
-
-@@ -100,7 +114,9 @@ static gint
- ibus_observed_path_deserialize (IBusObservedPath *path,
- GVariant *variant)
- {
-+ IBusObservedPathPrivate *priv = IBUS_OBSERVED_PATH_GET_PRIVATE (path);
- gint retval;
-+ guint i, length = 0;
-
- retval = IBUS_SERIALIZABLE_CLASS (ibus_observed_path_parent_class)->
- deserialize ((IBusSerializable *)path, variant);
-@@ -109,6 +125,15 @@ ibus_observed_path_deserialize (IBusObservedPath *path,
- ibus_g_variant_get_child_string (variant, retval++, &path->path);
- g_variant_get_child (variant, retval++, "x", &path->mtime);
-
-+ if (g_variant_n_children (variant) < retval + 2)
-+ return retval;
-+ g_variant_get_child (variant, retval++, "u", &length);
-+ if (!length)
-+ return retval;
-+ priv->file_hash_list = g_new0 (guint, length + 1);
-+ for (i = 0; i < length; i++)
-+ g_variant_get_child (variant, retval++, "u", &priv->file_hash_list[i]);
-+
- return retval;
- }
-
-@@ -116,14 +141,27 @@ static gboolean
- ibus_observed_path_copy (IBusObservedPath *dest,
- const IBusObservedPath *src)
- {
-+ IBusObservedPathPrivate *dest_priv = IBUS_OBSERVED_PATH_GET_PRIVATE (dest);
-+ IBusObservedPathPrivate *src_priv =
-+ IBUS_OBSERVED_PATH_GET_PRIVATE ((IBusObservedPath *)src);
- gboolean retval;
-+ guint i;
-
-- retval = IBUS_SERIALIZABLE_CLASS (ibus_observed_path_parent_class)->copy ((IBusSerializable *)dest, (IBusSerializable *)src);
-+ retval = IBUS_SERIALIZABLE_CLASS (ibus_observed_path_parent_class)->
-+ copy ((IBusSerializable *)dest, (IBusSerializable *)src);
- g_return_val_if_fail (retval, FALSE);
-
- dest->path = g_strdup (src->path);
- dest->mtime = src->mtime;
-
-+ g_clear_pointer (&dest_priv->file_hash_list, g_free);
-+ if (!src_priv->file_hash_list)
-+ return TRUE;
-+ for (i = 0; src_priv->file_hash_list[i]; i++);
-+ dest_priv->file_hash_list = g_new0 (guint, i + 1);
-+ for (i = 0; src_priv->file_hash_list[i]; i++)
-+ dest_priv->file_hash_list[i] = src_priv->file_hash_list[i];
-+
- return TRUE;
- }
-
-@@ -137,23 +175,48 @@ ibus_observed_path_copy (IBusObservedPath *dest,
-
- void
- ibus_observed_path_output (IBusObservedPath *path,
-- GString *output,
-- gint indent)
-+ GString *output,
-+ gint indent)
- {
-+ IBusObservedPathPrivate *priv = IBUS_OBSERVED_PATH_GET_PRIVATE (path);
-+ guint i;
-+
- g_assert (IBUS_IS_OBSERVED_PATH (path));
- g_assert (output);
-
-- g_string_append_indent (output, indent);
-- g_string_append_printf (output, "<path mtime=\"%ld\" >%s</path>\n",
-- path->mtime,
-- path->path);
-+ if (!priv->file_hash_list) {
-+ g_string_append_indent (output, indent);
-+ g_string_append_printf (output, "<path mtime=\"%ld\" >%s</path>\n",
-+ path->mtime,
-+ path->path);
-+ } else {
-+ g_string_append_indent (output, indent);
-+ g_string_append_printf (
-+ output,
-+ "<path mtime=\"%ld\" type=\"dir\" path=\"%s\">\n",
-+ path->mtime,
-+ path->path);
-+ for (i = 0; priv->file_hash_list[i]; i++) {
-+ g_string_append_indent (output, indent + 1);
-+ g_string_append_printf (output, "<file hash=\"%u\" />\n",
-+ priv->file_hash_list[i]);
-+ }
-+ g_string_append_indent (output, indent);
-+ g_string_append_printf (output, "</path>\n");
-+ }
- }
-
- gboolean
- ibus_observed_path_check_modification (IBusObservedPath *path)
- {
-+ IBusObservedPathPrivate *priv = IBUS_OBSERVED_PATH_GET_PRIVATE (path);
- gchar *real_path = NULL;
- struct stat buf;
-+ gboolean retval = FALSE;
-+ GDir *dir = NULL;
-+ const gchar *name;
-+ guint i = 0;
-+ guint file_num = 0;
-
- g_assert (IBUS_IS_OBSERVED_PATH (path));
-
-@@ -169,11 +232,71 @@ ibus_observed_path_check_modification (IBusObservedPath *path)
- buf.st_mtime = 0;
- }
-
-- g_free (real_path);
-
-- if (path->mtime == buf.st_mtime)
-- return FALSE;
-- return TRUE;
-+ if (path->mtime != buf.st_mtime) {
-+ retval = TRUE;
-+ goto end_check_modification;
-+ }
-+
-+ /* If an ibus engine is installed, normal file system updates
-+ * the directory mtime of "/usr/share/ibus/component" and
-+ * path->mtime of the cache file and buf.st_mtime of the current directory
-+ * could have the different values.
-+ *
-+ * But under a special file system, the buf.st_mtime is not updated
-+ * even if an ibus engine is installed, likes Fedora Silverblue
-+ * and ibus_observed_path_check_modification() could not detect
-+ * the installed ibus engines.
-+ * Now path->priv->file_hash_list reserves the hash list of the files
-+ * in the observed directory and if a new ibus engine is installed,
-+ * the hash of the compose file does not exists in the cache's
-+ * file_hash_list and ibus-daemon regenerate the cache successfully.
-+ */
-+ if (!priv->file_hash_list) {
-+ /* If the cache version is old, ibus_registry_load_cache() returns
-+ * FALSE and ibus_registry_check_modification() and this are not
-+ * called.
-+ * If the cache version is the latest, the cache file includes the
-+ * filled file_hash_list for directories with ibus_observed_path_new()
-+ * when the cache was generated.
-+ * Then if file_hash_list is null, it's a simple file in ibus
-+ * components and return here simply.
-+ */
-+ goto end_check_modification;
-+ }
-+ dir = g_dir_open (real_path, 0, NULL);
-+ g_return_val_if_fail (dir, FALSE);
-+
-+ while ((name = g_dir_read_name (dir)) != NULL) {
-+ guint current_hash;
-+ gboolean has_file = FALSE;
-+
-+ if (!g_str_has_suffix (name, ".xml"))
-+ continue;
-+ current_hash = g_str_hash (name);
-+ for (i = 0; priv->file_hash_list[i]; i++) {
-+ if (current_hash == priv->file_hash_list[i]) {
-+ has_file = TRUE;
-+ break;
-+ }
-+ }
-+ if (!has_file) {
-+ retval = TRUE;
-+ goto end_check_modification;
-+ }
-+ file_num++;
-+ }
-+ if (!retval) {
-+ for (i = 0; priv->file_hash_list[i]; i++);
-+ if (file_num != i)
-+ retval = TRUE;
-+ }
-+
-+end_check_modification:
-+ if (dir)
-+ g_dir_close (dir);
-+ g_free (real_path);
-+ return retval;
- }
-
- static void
-@@ -224,7 +347,7 @@ ibus_observed_path_traverse (IBusObservedPath *path,
- paths = g_list_append (paths, sub);
- paths = g_list_concat (paths,
- ibus_observed_path_traverse (sub, dir_only));
-- } else if (!dir_only) {
-+ } else if (sub->is_exist && !dir_only) {
- paths = g_list_append (paths, sub);
- }
- }
-@@ -233,36 +356,102 @@ ibus_observed_path_traverse (IBusObservedPath *path,
- return paths;
- }
-
-+
-+static gboolean
-+ibus_observed_path_parse_file (IBusObservedPath *path,
-+ XMLNode *node,
-+ int *nth)
-+{
-+ IBusObservedPathPrivate *priv = IBUS_OBSERVED_PATH_GET_PRIVATE (path);
-+ gchar **attr;
-+
-+ for (attr = node->attributes; attr[0]; attr += 2) {
-+ guint hash = 0;
-+
-+ if (g_strcmp0 (*attr, "hash") == 0)
-+ hash = atol (attr[1]);
-+ else if (g_strcmp0 (*attr, "name") == 0)
-+ hash = g_str_hash (attr[1]);
-+ if (hash) {
-+ if (!priv->file_hash_list) {
-+ *nth = 0;
-+ priv->file_hash_list = g_new0 (guint, *nth + 2);
-+ } else {
-+ priv->file_hash_list = g_renew (guint, priv->file_hash_list,
-+ *nth + 2);
-+ }
-+ priv->file_hash_list[*nth] = hash;
-+ priv->file_hash_list[*nth + 1] = 0;
-+ *nth += 1;
-+ continue;
-+ }
-+ g_warning ("Unkonwn attribute %s", attr[0]);
-+ }
-+
-+ return TRUE;
-+}
-+
-+
- static gboolean
- ibus_observed_path_parse_xml_node (IBusObservedPath *path,
- XMLNode *node)
- {
-+ gchar **attr;
-+ const gchar *full_path = node->text;
-+ GList *p;
-+ int i = 0;
-+
- g_assert (IBUS_IS_OBSERVED_PATH (path));
- g_assert (node);
-
-- if (G_UNLIKELY (g_strcmp0 (node->name, "path") != 0)) {
-+ if (G_UNLIKELY (g_strcmp0 (node->name, "path") != 0))
- return FALSE;
-+
-+ for (attr = node->attributes; attr[0]; attr += 2) {
-+ if (g_strcmp0 (*attr, "mtime") == 0) {
-+ path->mtime = atol (attr[1]);
-+ continue;
-+ }
-+ if (g_strcmp0 (*attr, "path") == 0) {
-+ full_path = attr[1];
-+ continue;
-+ }
-+ if (g_strcmp0 (*attr, "type") == 0) {
-+ if (!g_strcmp0 (attr[1], "dir"))
-+ path->is_dir = TRUE;
-+ else if (!g_strcmp0 (attr[1], "file"))
-+ path->is_dir = FALSE;
-+ else
-+ g_warning ("The type attribute can be \"dir\" or \"file\".");
-+ continue;
-+ }
-+ g_warning ("Unkonwn attribute %s", attr[0]);
- }
-
-- if (node->text[0] == '~' && node->text[1] != G_DIR_SEPARATOR) {
-- g_warning ("Invalid path \"%s\"", node->text);
-+ if (full_path[0] == '~' && full_path[1] != G_DIR_SEPARATOR) {
-+ g_warning ("Invalid path \"%s\"", full_path);
- return FALSE;
- }
-
-- path->path = g_strdup (node->text);
-+ path->path = g_strdup (full_path);
-
-- gchar **attr;
-- for (attr = node->attributes; attr[0]; attr += 2) {
-- if (g_strcmp0 (*attr, "mtime") == 0) {
-- path->mtime = atol (attr[1]);
-+ if (!path->is_dir)
-+ return TRUE;
-+
-+ for (i = 0, p = node->sub_nodes; p != NULL; p = p->next) {
-+ XMLNode *sub_node = (XMLNode *)p->data;
-+
-+ if (G_UNLIKELY (g_strcmp0 (sub_node->name, "file") != 0)) {
-+ g_warning ("Unkonwn tag %s", sub_node->name);
- continue;
- }
-- g_warning ("Unkonwn attribute %s", attr[0]);
-+ ibus_observed_path_parse_file (path, sub_node, &i);
- }
-
- return TRUE;
- }
-
-+
- IBusObservedPath *
- ibus_observed_path_new_from_xml_node (XMLNode *node,
- gboolean fill_stat)
-@@ -288,16 +477,46 @@ IBusObservedPath *
- ibus_observed_path_new (const gchar *path,
- gboolean fill_stat)
- {
-- g_assert (path);
--
- IBusObservedPath *op;
-+ IBusObservedPathPrivate *priv;
-+ GList *file_list, *l;
-+ guint i = 0;
-
-+ g_assert (path);
- op = (IBusObservedPath *) g_object_new (IBUS_TYPE_OBSERVED_PATH, NULL);
- op->path = g_strdup (path);
-
-- if (fill_stat) {
-- ibus_observed_path_fill_stat (op);
-+ priv = IBUS_OBSERVED_PATH_GET_PRIVATE (op);
-+ l = file_list = ibus_observed_path_traverse (op, FALSE);
-+ for (; l; l = l->next) {
-+ IBusObservedPath *sub = l->data;
-+ const gchar *file = NULL;
-+
-+ g_return_val_if_fail (sub && sub->path, op);
-+
-+ file = sub->path;
-+ if (!g_str_has_suffix (file, ".xml"))
-+ continue;
-+ if (g_str_has_prefix (file, path)) {
-+ file += strlen (path);
-+ if (*file == '/')
-+ file++;
-+ /* Ignore sub directories */
-+ if (strchr (file, '/'))
-+ continue;
-+ }
-+ if (!i)
-+ priv->file_hash_list = g_new0 (guint, i + 2);
-+ else
-+ priv->file_hash_list = g_renew (guint, priv->file_hash_list, i + 2);
-+ priv->file_hash_list[i] = g_str_hash (file);
-+ priv->file_hash_list[i + 1] = 0;
-+ ++i;
- }
-+ g_list_free_full (file_list, (GDestroyNotify)ibus_observed_path_destroy);
-+
-+ if (fill_stat)
-+ ibus_observed_path_fill_stat (op);
-
- return op;
- }
-diff --git a/src/ibusregistry.c b/src/ibusregistry.c
-index 43990d5f..3386a5d1 100644
---- a/src/ibusregistry.c
-+++ b/src/ibusregistry.c
-@@ -2,8 +2,8 @@
- /* vim:set et sts=4: */
- /* bus - The Input Bus
- * Copyright (C) 2015 Peng Huang <shawn.p.huang@gmail.com>
-- * Copyright (C) 2015-2019 Takao Fujiwara <takao.fujiwara1@gmail.com>
-- * Copyright (C) 2015-2019 Red Hat, Inc.
-+ * Copyright (C) 2015-2020 Takao Fujiwara <takao.fujiwara1@gmail.com>
-+ * Copyright (C) 2015-2020 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
-@@ -29,7 +29,7 @@
- #include "ibusregistry.h"
-
- #define IBUS_CACHE_MAGIC 0x49425553 /* "IBUS" */
--#define IBUS_CACHE_VERSION 0x00010512
-+#define IBUS_CACHE_VERSION 0x00010522
-
- enum {
- CHANGED,
---
-2.24.1
-
-From 568d58dfadefa801b96058c1155daecff3d51605 Mon Sep 17 00:00:00 2001
-From: fujiwarat <takao.fujiwara1@gmail.com>
-Date: Fri, 21 Aug 2020 22:07:31 +0900
-Subject: [PATCH] engine: Add layout_variant in gensimple.py
-
-Missed to handle layout_variant and also add latam layouts to denylist
-
-BUG=https://github.com/ibus/ibus/issues/2153
----
- engine/denylist.txt | 1 +
- engine/gensimple.py | 5 +++++
- 2 files changed, 6 insertions(+)
-
-diff --git a/engine/denylist.txt b/engine/denylist.txt
-index e4cd0473..9cbc7fc3 100644
---- a/engine/denylist.txt
-+++ b/engine/denylist.txt
-@@ -24,4 +24,5 @@
- # Asterisk(*) character can be used to match any engines.
- # E.g. xkb:cn:*:* excludes xkb:cn::zho and xkb:cn:mon_trad:mvf
- xkb:cn:*:*
-+xkb:latam:*:*
- xkb:nec_vndr/jp:*:*
-diff --git a/engine/gensimple.py b/engine/gensimple.py
-index dc4ccf12..18f7dc8c 100755
---- a/engine/gensimple.py
-+++ b/engine/gensimple.py
-@@ -180,6 +180,11 @@ class EvdevXML(XMLFilterBase):
- self.__downstream.startElement('layout', AttributesImpl({}))
- self.__downstream.characters(self.__layout)
- self.__downstream.endElement('layout')
-+ if self.__variant != '':
-+ self.__downstream.startElement('layout_variant',
-+ AttributesImpl({}))
-+ self.__downstream.characters(self.__variant)
-+ self.__downstream.endElement('layout_variant')
- self.__downstream.startElement('longname', AttributesImpl({}))
- self.__downstream.characters(self.__description)
- self.__downstream.endElement('longname')
---
-2.24.1
-
-From 5959d6f1d40c06f57bd895cd84d2b84deb6b6d8d Mon Sep 17 00:00:00 2001
-From: fujiwarat <takao.fujiwara1@gmail.com>
-Date: Thu, 27 Aug 2020 10:30:43 +0900
-Subject: [PATCH] data/dconf: Fix rm $TMPDIR in make-dconf-override-db.sh
-
-dbus-launch and gsettings run /usr/lib*/gvfsd-fuse $TMPDIR/cache/gvfs -f
-via systemd since gvfs 1.45.90 in Fedora 33
----
- data/dconf/make-dconf-override-db.sh | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/data/dconf/make-dconf-override-db.sh b/data/dconf/make-dconf-override-db.sh
-index 9c650e97..48dd8fac 100755
---- a/data/dconf/make-dconf-override-db.sh
-+++ b/data/dconf/make-dconf-override-db.sh
-@@ -45,6 +45,10 @@ for schema in $schemas; do
- done
- done
-
-+# dbus-launch and gsettings run /usr/lib*/gvfsd-fuse $TMPDIR/cache/gvfs -f
-+# via systemd since gvfs 1.45.90 in Fedora 33
-+# and rm $TMPDIR could be failed until umount would be called.
-+umount $TMPDIR/cache/gvfs
- rm -rf $TMPDIR
-
- kill $DBUS_SESSION_BUS_PID
---
-2.24.1
-
-From e10fc89c5afa1941801429b3a653b3f83b5d3802 Mon Sep 17 00:00:00 2001
-From: fujiwarat <takao.fujiwara1@gmail.com>
-Date: Thu, 27 Aug 2020 10:31:10 +0900
-Subject: [PATCH] src: Update ibusunicodegen.h with unicode-ucd 13.0.0
-
----
- src/ibusunicodegen.h | 32 ++++
- 2 files changed, 262 insertions(+), 170 deletions(-)
-
-diff --git a/src/ibusunicodegen.h b/src/ibusunicodegen.h
-index 6a60a5a9..c891d0e3 100644
---- a/src/ibusunicodegen.h
-+++ b/src/ibusunicodegen.h
-@@ -847,6 +847,10 @@ const static char *unicode_blocks[] = {
- the following command:
- msgmerge -C gucharmap.po ibus.po ibus.pot */
- N_("Rumi Numeral Symbols"),
-+ /* TRANSLATORS: You might refer the translations from gucharmap with
-+ the following command:
-+ msgmerge -C gucharmap.po ibus.po ibus.pot */
-+ N_("Yezidi"),
- /* TRANSLATORS: You might refer the translations from gucharmap with
- the following command:
- msgmerge -C gucharmap.po ibus.po ibus.pot */
-@@ -855,6 +859,10 @@ const static char *unicode_blocks[] = {
- the following command:
- msgmerge -C gucharmap.po ibus.po ibus.pot */
- N_("Sogdian"),
-+ /* TRANSLATORS: You might refer the translations from gucharmap with
-+ the following command:
-+ msgmerge -C gucharmap.po ibus.po ibus.pot */
-+ N_("Chorasmian"),
- /* TRANSLATORS: You might refer the translations from gucharmap with
- the following command:
- msgmerge -C gucharmap.po ibus.po ibus.pot */
-@@ -939,6 +947,10 @@ const static char *unicode_blocks[] = {
- the following command:
- msgmerge -C gucharmap.po ibus.po ibus.pot */
- N_("Warang Citi"),
-+ /* TRANSLATORS: You might refer the translations from gucharmap with
-+ the following command:
-+ msgmerge -C gucharmap.po ibus.po ibus.pot */
-+ N_("Dives Akuru"),
- /* TRANSLATORS: You might refer the translations from gucharmap with
- the following command:
- msgmerge -C gucharmap.po ibus.po ibus.pot */
-@@ -975,6 +987,10 @@ const static char *unicode_blocks[] = {
- the following command:
- msgmerge -C gucharmap.po ibus.po ibus.pot */
- N_("Makasar"),
-+ /* TRANSLATORS: You might refer the translations from gucharmap with
-+ the following command:
-+ msgmerge -C gucharmap.po ibus.po ibus.pot */
-+ N_("Lisu Supplement"),
- /* TRANSLATORS: You might refer the translations from gucharmap with
- the following command:
- msgmerge -C gucharmap.po ibus.po ibus.pot */
-@@ -1039,6 +1055,14 @@ const static char *unicode_blocks[] = {
- the following command:
- msgmerge -C gucharmap.po ibus.po ibus.pot */
- N_("Tangut Components"),
-+ /* TRANSLATORS: You might refer the translations from gucharmap with
-+ the following command:
-+ msgmerge -C gucharmap.po ibus.po ibus.pot */
-+ N_("Khitan Small Script"),
-+ /* TRANSLATORS: You might refer the translations from gucharmap with
-+ the following command:
-+ msgmerge -C gucharmap.po ibus.po ibus.pot */
-+ N_("Tangut Supplement"),
- /* TRANSLATORS: You might refer the translations from gucharmap with
- the following command:
- msgmerge -C gucharmap.po ibus.po ibus.pot */
-@@ -1187,6 +1211,10 @@ const static char *unicode_blocks[] = {
- the following command:
- msgmerge -C gucharmap.po ibus.po ibus.pot */
- N_("Symbols and Pictographs Extended-A"),
-+ /* TRANSLATORS: You might refer the translations from gucharmap with
-+ the following command:
-+ msgmerge -C gucharmap.po ibus.po ibus.pot */
-+ N_("Symbols for Legacy Computing"),
- /* TRANSLATORS: You might refer the translations from gucharmap with
- the following command:
- msgmerge -C gucharmap.po ibus.po ibus.pot */
-@@ -1211,6 +1239,10 @@ const static char *unicode_blocks[] = {
- the following command:
- msgmerge -C gucharmap.po ibus.po ibus.pot */
- N_("CJK Compatibility Ideographs Supplement"),
-+ /* TRANSLATORS: You might refer the translations from gucharmap with
-+ the following command:
-+ msgmerge -C gucharmap.po ibus.po ibus.pot */
-+ N_("CJK Unified Ideographs Extension G"),
- /* TRANSLATORS: You might refer the translations from gucharmap with
- the following command:
- msgmerge -C gucharmap.po ibus.po ibus.pot */
---
-2.24.1
-
-From 394d9a83962225bff4c39ed3e9ddd5c3019a3936 Mon Sep 17 00:00:00 2001
-From: fujiwarat <takao.fujiwara1@gmail.com>
-Date: Thu, 27 Aug 2020 11:52:16 +0900
-Subject: [PATCH] data/dconf: Fix regression in make-dconf-override-db.sh
-
----
- data/dconf/make-dconf-override-db.sh | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/data/dconf/make-dconf-override-db.sh b/data/dconf/make-dconf-override-db.sh
-index 48dd8fac..601c1c3f 100755
---- a/data/dconf/make-dconf-override-db.sh
-+++ b/data/dconf/make-dconf-override-db.sh
-@@ -48,7 +48,9 @@ done
- # dbus-launch and gsettings run /usr/lib*/gvfsd-fuse $TMPDIR/cache/gvfs -f
- # via systemd since gvfs 1.45.90 in Fedora 33
- # and rm $TMPDIR could be failed until umount would be called.
--umount $TMPDIR/cache/gvfs
-+if [ -d $TMPDIR/cache/gvfs ] ; then
-+ umount $TMPDIR/cache/gvfs
-+fi
- rm -rf $TMPDIR
-
- kill $DBUS_SESSION_BUS_PID
---
-2.24.1
-
-From e938846b1624a9455128edb64f144b0a1181736c Mon Sep 17 00:00:00 2001
-From: fujiwarat <takao.fujiwara1@gmail.com>
-Date: Thu, 27 Aug 2020 22:40:23 +0900
-Subject: [PATCH] engine: Genarate simple.xml at build time
-
-The engine path of ibus-engine-simple should be decided in
-build time and simple.xml is renamed to simple.xml.in
-Also Revert 6879879002af47d49d8740ca383a048d2ac8e904
-
-BUG=https://github.com/ibus/ibus/issues/2153
----
- engine/Makefile.am | 15 ++++++++++++---
- src/tests/runtest | 15 +--------------
- 2 files changed, 13 insertions(+), 17 deletions(-)
-
-diff --git a/engine/Makefile.am b/engine/Makefile.am
-index ca405496..d810704b 100644
---- a/engine/Makefile.am
-+++ b/engine/Makefile.am
-@@ -80,21 +80,30 @@ component_DATA = \
- componentdir = $(pkgdatadir)/component
-
- MAINTAINERCLEANFILES = \
-+ simple.xml.in \
-+ $(NULL)
-+
-+CLEANFILES = \
- simple.xml \
- $(NULL)
-
- EXTRA_DIST = \
- gensimple.py \
- iso639converter.py \
-- simple.xml \
-+ simple.xml.in \
- $(NULL)
-
--simple.xml:
-+simple.xml: simple.xml.in
-+ $(AM_V_GEN) sed \
-+ -e 's|@libexecdir[@]|$(libexecdir)|g' $< > $@.tmp && \
-+ mv $@.tmp $@
-+
-+simple.xml.in:
- $(srcdir)/gensimple.py \
- --input=$(datarootdir)/X11/xkb/rules/evdev.xml \
- --output=$@ \
- --version=$(VERSION).`date '+%Y%m%d'` \
-- --exec-path=$(libexecdir)/ibus-engine-simple \
-+ --exec-path=@libexecdir\@/ibus-engine-simple \
- --iso-path=$(datarootdir)/xml/iso-codes/iso_639.xml \
- --first-language \
- $(NULL)
-diff --git a/src/tests/runtest b/src/tests/runtest
-index 11bcc6c2..a6e4194b 100755
---- a/src/tests/runtest
-+++ b/src/tests/runtest
-@@ -91,19 +91,6 @@ func_copy_component () {
- fi
- }
-
--func_copy_simple_xml () {
-- file=$1
-- base=`func_basename $file`
-- libexecdir=`func_dirname $file`
-- # top_srcdir != top_builddir in make dist
-- libexecdir=`echo "$libexecdir" | sed -e "s|$top_srcdir|$top_builddir|"`
-- if test -f $file; then
-- mkdir -p components
-- sed "s|\(<exec>\).*\(/ibus-engine-simple</exec>\)|\1$libexecdir\2|" \
-- < $file > components/$base
-- fi
--}
--
- trap 'func_cleanup $tstdir' 1 2 3 15
-
- tst=$1; shift
-@@ -140,7 +127,7 @@ run_test_case()
- exit -1
- fi
- # func_copy_component replaces s/$top_srcdir/%top_builddir/
-- func_copy_simple_xml "../$top_srcdir/engine/simple.xml"
-+ func_copy_component "../$top_srcdir/engine/simple.xml"
- func_copy_component "../$top_srcdir/conf/memconf/memconf.xml"
-
- IBUS_COMPONENT_PATH=$PWD/components
---
-2.24.1
-
-From 00adea6d16939e2da35ede7f2ecf3fe0a2156fa6 Mon Sep 17 00:00:00 2001
-From: "ntfs.hard" <ntfs.hard@gmail.com>
-Date: Thu, 3 Sep 2020 14:59:35 +0900
-Subject: [PATCH] Fix for several error spotted by static analyzer
-
-- ibuscomposetable.c, ibusxml.c:
-Check size before memory access
-
-- inputcontext.c:
-Use logical operator for bool type variables
-
-- config.c:
-Extra break removed
-
-BUG=https://github.com/ibus/ibus/pull/2242
----
- bus/inputcontext.c | 6 +++---
- src/ibuscomposetable.c | 2 +-
- src/ibusxml.c | 2 +-
- 4 files changed, 5 insertions(+), 6 deletions(-)
-
-diff --git a/bus/inputcontext.c b/bus/inputcontext.c
-index ceea4b60..8d84fd05 100644
---- a/bus/inputcontext.c
-+++ b/bus/inputcontext.c
-@@ -2842,11 +2842,11 @@ bus_input_context_update_preedit_text (BusInputContext *context,
- context->preedit_text = (IBusText *) g_object_ref_sink (text ? text :
- text_empty);
- context->preedit_cursor_pos = cursor_pos;
-- if (use_extension)
-+ if (use_extension) {
- context->preedit_visible = visible;
-- if (use_extension)
- context->preedit_mode = mode;
-- extension_visible = context->preedit_visible |
-+ }
-+ extension_visible = context->preedit_visible ||
- (context->emoji_extension != NULL);
-
- if (use_extension && context->emoji_extension) {
-diff --git a/src/ibuscomposetable.c b/src/ibuscomposetable.c
-index c50be2b3..ef20469c 100644
---- a/src/ibuscomposetable.c
-+++ b/src/ibuscomposetable.c
-@@ -382,7 +382,7 @@ ibus_compose_list_check_duplicated (GList *compose_list,
-
- if (n_outputs == unichar_length (output_chars)) {
- int j = 0;
-- while (compose_data->values[j] && j < n_outputs) {
-+ while (j < n_outputs && compose_data->values[j]) {
- if (compose_data->values[j] != output_chars[j])
- break;
- ++j;
-diff --git a/src/ibusxml.c b/src/ibusxml.c
-index 266a8207..b6d0feb8 100644
---- a/src/ibusxml.c
-+++ b/src/ibusxml.c
-@@ -148,7 +148,7 @@ _is_space (const gchar *text,
- {
- gsize i = 0;
-
-- for (i = 0; text[i] != '\0' && i < text_len; i++) {
-+ for (i = 0; i < text_len && text[i] != '\0'; i++) {
- switch (text[i]) {
- case '\t':
- case ' ':
---
-2.24.1
-
-From 7caead10d3698ef1ecaa97e6e122e27a720d612e Mon Sep 17 00:00:00 2001
-From: fujiwarat <takao.fujiwara1@gmail.com>
-Date: Thu, 3 Sep 2020 21:21:31 +0900
-Subject: [PATCH] Fix string formats in translatable strings
-
----
- data/dconf/org.freedesktop.ibus.gschema.xml | 2 +-
- setup/enginetreeview.py | 6 +++---
- setup/main.py | 6 +++---
- tools/main.vala | 4 ++--
- 6 files changed, 16 insertions(+), 16 deletions(-)
-
-diff --git a/data/dconf/org.freedesktop.ibus.gschema.xml b/data/dconf/org.freedesktop.ibus.gschema.xml
-index 11a179a6..a79e9296 100644
---- a/data/dconf/org.freedesktop.ibus.gschema.xml
-+++ b/data/dconf/org.freedesktop.ibus.gschema.xml
-@@ -195,7 +195,7 @@
- <key name="lang" type="s">
- <default>'en'</default>
- <summary>Default language for emoji dictionary</summary>
-- <description>Choose a default language of emoji dictionaries on the emoji dialog. The value $lang is applied to /usr/share/ibus/dicts/emoji-$lang.dict</description>
-+ <description>Choose a default language of emoji dictionaries on the emoji dialog. The value $lang is applied to /usr/share/ibus/dicts/emoji-$lang.dict .</description>
- </key>
- <key name="favorites" type="as">
- <default>[]</default>
-diff --git a/setup/enginetreeview.py b/setup/enginetreeview.py
-index aea84593..8534de5e 100644
---- a/setup/enginetreeview.py
-+++ b/setup/enginetreeview.py
-@@ -3,8 +3,8 @@
- # ibus - The Input Bus
- #
- # Copyright (c) 2007-2015 Peng Huang <shawn.p.huang@gmail.com>
--# Copyright (c) 2014-2018 Takao Fujiwara <takao.fujiwara1@gmail.com>
--# Copyright (c) 2007-2018 Red Hat, Inc.
-+# Copyright (c) 2014-2020 Takao Fujiwara <takao.fujiwara1@gmail.com>
-+# Copyright (c) 2007-2020 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
-@@ -93,7 +93,7 @@ class EngineTreeView(Gtk.TreeView):
- renderer.set_property("has-entry", False)
- renderer.set_property("editable", True)
-
-- column = Gtk.TreeViewColumn(_("Kbd"))
-+ column = Gtk.TreeViewColumn("Kbd")
- column.set_expand(False)
- column.set_fixed_width(32)
- column.set_sizing(Gtk.TreeViewColumnSizing.FIXED)
-diff --git a/setup/main.py b/setup/main.py
-index 8c8d7a47..673c8cde 100644
---- a/setup/main.py
-+++ b/setup/main.py
-@@ -4,8 +4,8 @@
- # ibus - The Input Bus
- #
- # Copyright (c) 2007-2016 Peng Huang <shawn.p.huang@gmail.com>
--# Copyright (c) 2010-2018 Takao Fujiwara <takao.fujiwara1@gmail.com>
--# Copyright (c) 2007-2016 Red Hat, Inc.
-+# Copyright (c) 2010-2020 Takao Fujiwara <takao.fujiwara1@gmail.com>
-+# Copyright (c) 2007-2020 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
-@@ -547,7 +547,7 @@ class Setup(object):
- self.__flush_gtk_events()
- else:
- # Translators: %d == 5 currently
-- message = _("IBus daemon could not be started in %d seconds")
-+ message = _("IBus daemon could not be started in %d seconds.")
- dlg = Gtk.MessageDialog(message_type = Gtk.MessageType.INFO,
- buttons = Gtk.ButtonsType.OK,
- text = message % timeout)
-diff --git a/tools/main.vala b/tools/main.vala
-index bf9c0fc9..26e7fd88 100644
---- a/tools/main.vala
-+++ b/tools/main.vala
-@@ -3,7 +3,7 @@
- * ibus - The Input Bus
- *
- * Copyright(c) 2013 Peng Huang <shawn.p.huang@gmail.com>
-- * Copyright(c) 2015-2018 Takao Fujiwara <takao.fujiwara1@gmail.com>
-+ * Copyright(c) 2015-2020 Takao Fujiwara <takao.fujiwara1@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
-@@ -453,7 +453,7 @@ const CommandEntry commands[] = {
- { "read-config", N_("Show the configuration values"), read_config },
- { "reset-config", N_("Reset the configuration values"), reset_config },
- #if EMOJI_DICT
-- { "emoji", N_("Save emoji on dialog to clipboard "), emoji_dialog },
-+ { "emoji", N_("Save emoji on dialog to clipboard"), emoji_dialog },
- #endif
- { "help", N_("Show this information"), print_help }
- };
---
-2.24.1
-
-From a440942a62c46578377a8679c48146f597e338a4 Mon Sep 17 00:00:00 2001
-From: fujiwarat <takao.fujiwara1@gmail.com>
-Date: Wed, 9 Sep 2020 18:36:18 +0900
-Subject: [PATCH] ui/gtk3: Accept xdigits only for Unicode typing
-
-Ctrl-Shift-u behavior now follows GTK's one.
-
-BUG=https://github.com/ibus/ibus/issues/2249
----
- ui/gtk3/panelbinding.vala | 8 +++++---
- 1 file changed, 5 insertions(+), 3 deletions(-)
-
-diff --git a/ui/gtk3/panelbinding.vala b/ui/gtk3/panelbinding.vala
-index 01c43b0d..861255b1 100644
---- a/ui/gtk3/panelbinding.vala
-+++ b/ui/gtk3/panelbinding.vala
-@@ -3,7 +3,7 @@
- * ibus - The Input Bus
- *
- * Copyright(c) 2018 Peng Huang <shawn.p.huang@gmail.com>
-- * Copyright(c) 2018 Takao Fujwiara <takao.fujiwara1@gmail.com>
-+ * Copyright(c) 2018-2020 Takao Fujwiara <takao.fujiwara1@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
-@@ -190,7 +190,7 @@ class Preedit : Gtk.Window {
-
- public IBus.Text get_commit_text() {
- string extension_text = m_extension_preedit_emoji.get_text();
-- if (extension_text.length == 0)
-+ if (extension_text.length == 0 && m_prefix != "u")
- extension_text = m_extension_preedit_text.get_text();
- return new IBus.Text.from_string(extension_text);
- }
-@@ -556,8 +556,10 @@ class PanelBinding : IBus.PanelService {
-
- private bool key_press_keyval(uint keyval) {
- unichar ch = IBus.keyval_to_unicode(keyval);
-+ if (m_extension_name == "unicode" && !ch.isxdigit())
-+ return false;
- if (ch.iscntrl())
-- return false;
-+ return false;
- string str = ch.to_string();
- m_preedit.append_text(str);
- string annotation = m_preedit.get_text();
---
-2.24.1
-
-From 3aa670e9f8319fe064ce7c45ce56304ca5af94dc Mon Sep 17 00:00:00 2001
-From: fujiwarat <takao.fujiwara1@gmail.com>
-Date: Wed, 9 Sep 2020 18:42:10 +0900
-Subject: [PATCH] engine: Fix to pull the correct language with no iso639
- variants
-
-Some variants have iso639 but others do not in evdev.xml and
-gensimple.py have to fallback to the layout iso639.
-
-BUG=rhbz#1876877
----
- engine/gensimple.py | 19 +++++++++++++++++--
- 1 file changed, 17 insertions(+), 2 deletions(-)
-
-diff --git a/engine/gensimple.py b/engine/gensimple.py
-index 18f7dc8c..de6d7ff5 100755
---- a/engine/gensimple.py
-+++ b/engine/gensimple.py
-@@ -90,6 +90,7 @@ class EvdevXML(XMLFilterBase):
- self.__description = ''
- self.__variant = ''
- self.__list_iso639 = []
-+ self.__list_iso639_for_variant = []
- def startDocument(self):
- if self.__downstream:
- self.__downstream.startDocument()
-@@ -106,7 +107,10 @@ class EvdevXML(XMLFilterBase):
- elif name == 'configItem':
- self.__is_config_item = True
- elif name == 'languageList':
-- self.__list_iso639 = []
-+ if self.__is_variant and self.__is_config_item:
-+ self.__list_iso639_for_variant = []
-+ elif self.__is_layout and self.__is_config_item:
-+ self.__list_iso639 = []
- elif name == 'iso639Id':
- self.__is_iso639 = True
- elif name == 'variant':
-@@ -129,6 +133,7 @@ class EvdevXML(XMLFilterBase):
- self.__is_iso639 = False
- elif name == 'variant':
- self.__is_variant = False
-+ self.__list_iso639_for_variant = []
- elif name == 'name':
- self.__is_name = False
- def characters(self, text):
-@@ -140,11 +145,21 @@ class EvdevXML(XMLFilterBase):
- elif self.__is_layout and self.__is_config_item:
- self.__layout = text
- elif self.__is_iso639:
-+ if self.__is_variant and self.__is_config_item:
-+ self.__list_iso639_for_variant.append(text)
-+ elif self.__is_layout and self.__is_config_item:
- self.__list_iso639.append(text)
- def save(self):
- if not self.__downstream:
- return
-- for iso in self.__list_iso639:
-+ list_iso639 = []
-+ if self.__is_variant and self.__is_config_item:
-+ list_iso639 = self.__list_iso639_for_variant
-+ if len(list_iso639) == 0:
-+ list_iso639 = self.__list_iso639
-+ elif self.__is_layout and self.__is_config_item:
-+ list_iso639 = self.__list_iso639
-+ for iso in list_iso639:
- do_deny = False
- for [xkb, layout, variant, lang] in self.__denylist:
- if xkb == 'xkb' \
---
-2.24.1
-
next reply other threads:[~2026-05-31 2:07 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-31 2:07 Takao Fujiwara [this message]
-- strict thread matches above, loose matches on Subject: below --
2026-05-31 2:09 [rpms/ibus] autotool: Delete upstreamed ibus-HEAD.patch Takao Fujiwara
2026-05-31 2:09 Takao Fujiwara
2026-05-31 2:08 Takao Fujiwara
2026-05-31 2:08 Takao Fujiwara
2026-05-31 2:08 Takao Fujiwara
2026-05-31 2:07 Takao Fujiwara
2026-05-31 2:07 Takao Fujiwara
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=178019325006.1.2493224813599113829.rpms-ibus-1ddc1a0b4155@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