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 patches
Date: Sun, 31 May 2026 02:07:20 GMT	[thread overview]
Message-ID: <178019324067.1.4268397372429861323.rpms-ibus-bd586f3b2dab@fedoraproject.org> (raw)

A new commit has been pushed.

Repo   : rpms/ibus
Branch : autotool
Commit : bd586f3b2dab6cbdc0fc640595e9b36a7539a10a
Author : Takao Fujiwara <tfujiwar@redhat.com>
Date   : 2020-02-21T22:15:39+09:00
Stats  : +0/-3384 in 1 file(s)
URL    : https://src.fedoraproject.org/rpms/ibus/c/bd586f3b2dab6cbdc0fc640595e9b36a7539a10a?branch=autotool

Log:
Delete upstreamed patches

---
diff --git a/ibus-HEAD.patch b/ibus-HEAD.patch
deleted file mode 100644
index 9e83a36..0000000
--- a/ibus-HEAD.patch
+++ /dev/null
@@ -1,3384 +0,0 @@
-From fcb2187dd46d71031867f3bd43196c2448693469 Mon Sep 17 00:00:00 2001
-From: fujiwarat <takao.fujiwara1@gmail.com>
-Date: Fri, 6 Sep 2019 20:59:49 +0900
-Subject: [PATCH] src/tests: Replace push with cd for Posix SH
-
-BUG=https://github.com/ibus/ibus/issues/2124
-BUG=https://github.com/ibus/ibus/issues/2126
----
- src/tests/ibus-config.c | 2 +-
- src/tests/runtest       | 5 +++--
- 2 files changed, 4 insertions(+), 3 deletions(-)
-
-diff --git a/src/tests/ibus-config.c b/src/tests/ibus-config.c
-index 9b925ad9..5e845f10 100644
---- a/src/tests/ibus-config.c
-+++ b/src/tests/ibus-config.c
-@@ -114,7 +114,7 @@ test_config_set_get (void)
-             value_bits |= (1 << 1);
-         }
-         else {
--            g_warning ("unknow value name=%s", name);
-+            g_warning ("Unknown value name=%s", name);
-         }
-         ibus_config_unset (config, "test", name);
-         g_variant_unref (value);
-diff --git a/src/tests/runtest b/src/tests/runtest
-index 1fcc9283..ed38992f 100755
---- a/src/tests/runtest
-+++ b/src/tests/runtest
-@@ -111,7 +111,8 @@ fi
- run_test_case()
- {
-     test -d $tstdir || mkdir $tstdir
--    pushd $tstdir
-+    backup_dir=$PWD
-+    cd $tstdir
- 
-     need_bus=no
-     for t in $BUS_REQUIRED_TESTS; do
-@@ -190,7 +191,7 @@ run_test_case()
- 
-     retval=`expr $retval \| $?`
- 
--    popd
-+    cd $backup_dir
- 
-     func_cleanup $tstdir
- }
--- 
-2.21.0
-
-From 48a8d7ed58bdfb02c24c8039bae1cb15d4fc1bce Mon Sep 17 00:00:00 2001
-From: fujiwarat <takao.fujiwara1@gmail.com>
-Date: Fri, 6 Sep 2019 21:24:24 +0900
-Subject: [PATCH] Delete deprecated g_type_class_add_private since glib 2.58
-
-G_DEFINE_TYPE_WITH_PRIVATE() and G_ADD_PRIVATE() have been available
-since 2.38.
-IBusService has custom GBaseInitFunc and GBaseFinalizeFunc in
-ibus_service_get_type() and implements ibus_service_private_offset
-and ibus_service_get_instance_private() directly without
-G_DEFINE_TYPE_WITH_PRIVATE().
----
- bus/ibusimpl.c         |  7 +++---
- src/ibusbus.c          |  8 +++---
- src/ibuscomponent.c    | 10 ++++----
- src/ibusconfig.c       |  9 +++----
- src/ibusemoji.c        | 14 +++++------
- src/ibusengine.c       | 10 +++-----
- src/ibusenginedesc.c   | 10 ++++----
- src/ibusenginesimple.c |  8 +++---
- src/ibusfactory.c      |  8 +++---
- src/ibushotkey.c       | 55 ++++++++++++------------------------------
- src/ibusinputcontext.c | 12 ++++-----
- src/ibusobject.c       |  8 +++---
- src/ibusobservedpath.c |  6 ++---
- src/ibusproperty.c     |  8 +++---
- src/ibusregistry.c     | 10 +++-----
- src/ibusserializable.c | 24 ++++++++++++++----
- src/ibusservice.c      | 34 +++++++++++++++++++-------
- src/ibusunicode.c      | 24 ++++++++----------
- src/ibusxevent.c       | 22 ++++++++---------
- 19 files changed, 135 insertions(+), 152 deletions(-)
-
-diff --git a/bus/ibusimpl.c b/bus/ibusimpl.c
-index bbbb5770..39b16139 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-2018 Takao Fujiwara <takao.fujiwara1@gmail.com>
-- * Copyright (C) 2008-2018 Red Hat, Inc.
-+ * Copyright (C) 2011-2019 Takao Fujiwara <takao.fujiwara1@gmail.com>
-+ * Copyright (C) 2008-2019 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
-@@ -2180,7 +2180,8 @@ bus_ibus_impl_registry_destroy (BusIBusImpl *ibus)
- 
-     g_clear_pointer (&ibus->engine_table, g_hash_table_destroy);
- 
--    g_clear_pointer (&ibus->registry, ibus_object_destroy);
-+    ibus_object_destroy (IBUS_OBJECT (ibus->registry));
-+    ibus->registry = NULL;
- 
-     if (ibus->extension_register_keys)
-         g_clear_pointer (&ibus->extension_register_keys, g_variant_unref);
-diff --git a/src/ibusbus.c b/src/ibusbus.c
-index 09054851..0783e7bb 100644
---- a/src/ibusbus.c
-+++ b/src/ibusbus.c
-@@ -2,7 +2,7 @@
- /* vim:set et sts=4: */
- /* ibus - The Input Bus
-  * Copyright (C) 2008-2015 Peng Huang <shawn.p.huang@gmail.com>
-- * Copyright (C) 2015-2018 Takao Fujiwara <takao.fujiwara1@gmail.com>
-+ * Copyright (C) 2015-2019 Takao Fujiwara <takao.fujiwara1@gmail.com>
-  * Copyright (C) 2008-2016 Red Hat, Inc.
-  *
-  * This library is free software; you can redistribute it and/or
-@@ -36,7 +36,7 @@
- #include "ibusconfig.h"
- 
- #define IBUS_BUS_GET_PRIVATE(o)  \
--   (G_TYPE_INSTANCE_GET_PRIVATE ((o), IBUS_TYPE_BUS, IBusBusPrivate))
-+   ((IBusBusPrivate *)ibus_bus_get_instance_private (o))
- 
- enum {
-     CONNECTED,
-@@ -115,7 +115,7 @@ static void      ibus_bus_get_property           (IBusBus                *bus,
- 
- static void     ibus_bus_close_connection        (IBusBus                *bus);
- 
--G_DEFINE_TYPE (IBusBus, ibus_bus, IBUS_TYPE_OBJECT)
-+G_DEFINE_TYPE_WITH_PRIVATE (IBusBus, ibus_bus, IBUS_TYPE_OBJECT)
- 
- static void
- ibus_bus_class_init (IBusBusClass *class)
-@@ -234,8 +234,6 @@ ibus_bus_class_init (IBusBusClass *class)
-             G_TYPE_NONE,
-             3,
-             G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
--
--    g_type_class_add_private (class, sizeof (IBusBusPrivate));
- }
- 
- static void
-diff --git a/src/ibuscomponent.c b/src/ibuscomponent.c
-index a933e79b..9837f47c 100644
---- a/src/ibuscomponent.c
-+++ b/src/ibuscomponent.c
-@@ -2,7 +2,7 @@
- /* vim:set et sts=4: */
- /* bus - The Input Bus
-  * Copyright (C) 2008-2010 Peng Huang <shawn.p.huang@gmail.com>
-- * Copyright (C) 2008-2010 Red Hat, Inc.
-+ * Copyright (C) 2008-2019 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
-@@ -58,7 +58,7 @@ struct _IBusComponentPrivate {
- };
- 
- #define IBUS_COMPONENT_GET_PRIVATE(o)  \
--   (G_TYPE_INSTANCE_GET_PRIVATE ((o), IBUS_TYPE_COMPONENT, IBusComponentPrivate))
-+   ((IBusComponentPrivate *)ibus_component_get_instance_private (o))
- 
- // static guint            _signals[LAST_SIGNAL] = { 0 };
- 
-@@ -90,7 +90,9 @@ static void         ibus_component_parse_observed_paths
-                                                  XMLNode                *node,
-                                                  gboolean                access_fs);
- 
--G_DEFINE_TYPE (IBusComponent, ibus_component, IBUS_TYPE_SERIALIZABLE)
-+G_DEFINE_TYPE_WITH_PRIVATE (IBusComponent,
-+                            ibus_component,
-+                            IBUS_TYPE_SERIALIZABLE)
- 
- static void
- ibus_component_class_init (IBusComponentClass *class)
-@@ -99,8 +101,6 @@ ibus_component_class_init (IBusComponentClass *class)
-     IBusObjectClass *object_class = IBUS_OBJECT_CLASS (class);
-     IBusSerializableClass *serializable_class = IBUS_SERIALIZABLE_CLASS (class);
- 
--    g_type_class_add_private (class, sizeof (IBusComponentPrivate));
--
-     gobject_class->set_property = (GObjectSetPropertyFunc) ibus_component_set_property;
-     gobject_class->get_property = (GObjectGetPropertyFunc) ibus_component_get_property;
-     object_class->destroy = (IBusObjectDestroyFunc) ibus_component_destroy;
-diff --git a/src/ibusconfig.c b/src/ibusconfig.c
-index 621a4e53..713fe251 100644
---- a/src/ibusconfig.c
-+++ b/src/ibusconfig.c
-@@ -2,7 +2,7 @@
- /* 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) 2008-2019 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
-@@ -27,7 +27,7 @@
- #include "ibuserror.h"
- 
- #define IBUS_CONFIG_GET_PRIVATE(o)  \
--   (G_TYPE_INSTANCE_GET_PRIVATE ((o), IBUS_TYPE_CONFIG, IBusConfigPrivate))
-+   ((IBusConfigPrivate *)ibus_config_get_instance_private (o))
- 
- enum {
-     VALUE_CHANGED,
-@@ -65,6 +65,7 @@ static void      _signal_unsubscribe        (GDBusProxy         *proxy,
- static void      _remove_all_match_rules    (IBusConfig         *config);
- 
- G_DEFINE_TYPE_WITH_CODE (IBusConfig, ibus_config, IBUS_TYPE_PROXY,
-+                         G_ADD_PRIVATE (IBusConfig)
-                          G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, initable_iface_init)
-                          G_IMPLEMENT_INTERFACE (G_TYPE_ASYNC_INITABLE, async_initable_iface_init)
-                          );
-@@ -75,8 +76,6 @@ ibus_config_class_init (IBusConfigClass *class)
-     GDBusProxyClass *dbus_proxy_class = G_DBUS_PROXY_CLASS (class);
-     IBusProxyClass *proxy_class = IBUS_PROXY_CLASS (class);
- 
--    g_type_class_add_private (class, sizeof (IBusConfigPrivate));
--
-     dbus_proxy_class->g_signal = ibus_config_g_signal;
-     proxy_class->destroy = ibus_config_real_destroy;
- 
-@@ -116,7 +115,7 @@ ibus_config_init (IBusConfig *config)
- static void
- ibus_config_real_destroy (IBusProxy *proxy)
- {
--    IBusConfigPrivate *priv = IBUS_CONFIG_GET_PRIVATE (proxy);
-+    IBusConfigPrivate *priv = IBUS_CONFIG_GET_PRIVATE (IBUS_CONFIG (proxy));
- 
-     _signal_unsubscribe (G_DBUS_PROXY (proxy), priv->watch_config_signal_id);
-     _remove_all_match_rules (IBUS_CONFIG (proxy));
-diff --git a/src/ibusemoji.c b/src/ibusemoji.c
-index d56c48aa..ae8907a2 100644
---- a/src/ibusemoji.c
-+++ b/src/ibusemoji.c
-@@ -1,8 +1,8 @@
- /* -*- mode: C; c-basic-offset: 4; indent-tabs-mode: nil; -*- */
- /* vim:set et sts=4: */
- /* bus - The Input Bus
-- * Copyright (C) 2017 Takao Fujiwara <takao.fujiwara1@gmail.com>
-- * Copyright (C) 2017 Red Hat, Inc.
-+ * Copyright (C) 2017-2019 Takao Fujiwara <takao.fujiwara1@gmail.com>
-+ * Copyright (C) 2017-2019 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
-@@ -47,9 +47,7 @@ struct _IBusEmojiDataPrivate {
- };
- 
- #define IBUS_EMOJI_DATA_GET_PRIVATE(o)  \
--   (G_TYPE_INSTANCE_GET_PRIVATE ((o), \
--    IBUS_TYPE_EMOJI_DATA, \
--    IBusEmojiDataPrivate))
-+   ((IBusEmojiDataPrivate *)ibus_emoji_data_get_instance_private (o))
- 
- /* functions prototype */
- static void      ibus_emoji_data_set_property  (IBusEmojiData       *emoji,
-@@ -68,7 +66,9 @@ static gint      ibus_emoji_data_deserialize   (IBusEmojiData       *emoji,
- static gboolean  ibus_emoji_data_copy          (IBusEmojiData       *emoji,
-                                                 const IBusEmojiData *src);
- 
--G_DEFINE_TYPE (IBusEmojiData, ibus_emoji_data, IBUS_TYPE_SERIALIZABLE)
-+G_DEFINE_TYPE_WITH_PRIVATE (IBusEmojiData,
-+                            ibus_emoji_data,
-+                            IBUS_TYPE_SERIALIZABLE)
- 
- static void
- ibus_emoji_data_class_init (IBusEmojiDataClass *class)
-@@ -89,8 +89,6 @@ ibus_emoji_data_class_init (IBusEmojiDataClass *class)
-     serializable_class->copy        =
-             (IBusSerializableCopyFunc) ibus_emoji_data_copy;
- 
--    g_type_class_add_private (class, sizeof (IBusEmojiDataPrivate));
--
-     /* install properties */
-     /**
-      * IBusEmojiData:emoji:
-diff --git a/src/ibusengine.c b/src/ibusengine.c
-index 7fb4e856..9aeafbf9 100644
---- a/src/ibusengine.c
-+++ b/src/ibusengine.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) 2018 Takao Fujiwara <takao.fujiwara1@gmail.com>
-- * Copyright (C) 2008-2018 Red Hat, Inc.
-+ * Copyright (C) 2018-2019 Takao Fujiwara <takao.fujiwara1@gmail.com>
-+ * Copyright (C) 2008-2019 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
-@@ -32,7 +32,7 @@
- #include "ibusxevent.h"
- 
- #define IBUS_ENGINE_GET_PRIVATE(o)  \
--   (G_TYPE_INSTANCE_GET_PRIVATE ((o), IBUS_TYPE_ENGINE, IBusEnginePrivate))
-+   ((IBusEnginePrivate *)ibus_engine_get_instance_private (o))
- 
- enum {
-     PROCESS_KEY_EVENT,
-@@ -187,7 +187,7 @@ static void      ibus_engine_dbus_property_changed
-                                               GVariant           *value);
- 
- 
--G_DEFINE_TYPE (IBusEngine, ibus_engine, IBUS_TYPE_SERVICE)
-+G_DEFINE_TYPE_WITH_PRIVATE (IBusEngine, ibus_engine, IBUS_TYPE_SERVICE)
- 
- static const gchar introspection_xml[] =
-     "<node>"
-@@ -830,8 +830,6 @@ ibus_engine_class_init (IBusEngineClass *class)
-             G_TYPE_UINT,
-             G_TYPE_UINT);
- 
--    g_type_class_add_private (class, sizeof (IBusEnginePrivate));
--
-     text_empty = ibus_text_new_from_static_string ("");
-     g_object_ref_sink (text_empty);
- }
-diff --git a/src/ibusenginedesc.c b/src/ibusenginedesc.c
-index 22622865..064588bd 100644
---- a/src/ibusenginedesc.c
-+++ b/src/ibusenginedesc.c
-@@ -2,7 +2,7 @@
- /* vim:set et sts=4: */
- /* bus - The Input Bus
-  * Copyright (C) 2008-2015 Peng Huang <shawn.p.huang@gmail.com>
-- * Copyright (C) 2008-2015 Red Hat, Inc.
-+ * Copyright (C) 2008-2019 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
-@@ -72,7 +72,7 @@ struct _IBusEngineDescPrivate {
- };
- 
- #define IBUS_ENGINE_DESC_GET_PRIVATE(o)  \
--   (G_TYPE_INSTANCE_GET_PRIVATE ((o), IBUS_TYPE_ENGINE_DESC, IBusEngineDescPrivate))
-+   ((IBusEngineDescPrivate *)ibus_engine_desc_get_instance_private (o))
- 
- // static guint            _signals[LAST_SIGNAL] = { 0 };
- 
-@@ -95,7 +95,9 @@ static gboolean     ibus_engine_desc_copy           (IBusEngineDesc         *des
- static gboolean     ibus_engine_desc_parse_xml_node (IBusEngineDesc         *desc,
-                                                      XMLNode                *node);
- 
--G_DEFINE_TYPE (IBusEngineDesc, ibus_engine_desc, IBUS_TYPE_SERIALIZABLE)
-+G_DEFINE_TYPE_WITH_PRIVATE (IBusEngineDesc,
-+                            ibus_engine_desc,
-+                            IBUS_TYPE_SERIALIZABLE)
- 
- 
- static void
-@@ -113,8 +115,6 @@ ibus_engine_desc_class_init (IBusEngineDescClass *class)
-     serializable_class->deserialize = (IBusSerializableDeserializeFunc) ibus_engine_desc_deserialize;
-     serializable_class->copy        = (IBusSerializableCopyFunc) ibus_engine_desc_copy;
- 
--    g_type_class_add_private (class, sizeof (IBusEngineDescPrivate));
--
-     /* install properties */
-     /**
-      * IBusEngineDesc:name:
-diff --git a/src/ibusenginesimple.c b/src/ibusenginesimple.c
-index b623e149..43bd5283 100644
---- a/src/ibusenginesimple.c
-+++ b/src/ibusenginesimple.c
-@@ -45,7 +45,7 @@
- 
- #define X11_DATADIR X11_DATA_PREFIX "/share/X11/locale"
- #define IBUS_ENGINE_SIMPLE_GET_PRIVATE(o)  \
--   (G_TYPE_INSTANCE_GET_PRIVATE ((o), IBUS_TYPE_ENGINE_SIMPLE, IBusEngineSimplePrivate))
-+   ((IBusEngineSimplePrivate *)ibus_engine_simple_get_instance_private (o))
- 
- #define SET_COMPOSE_BUFFER_ELEMENT_NEXT(buffer, index, value) {         \
-     if ((index) >= COMPOSE_BUFFER_SIZE &&                               \
-@@ -150,7 +150,9 @@ static void     ibus_engine_simple_commit_str  (IBusEngineSimple    *simple,
- static void     ibus_engine_simple_update_preedit_text
-                                                (IBusEngineSimple    *simple);
- 
--G_DEFINE_TYPE (IBusEngineSimple, ibus_engine_simple, IBUS_TYPE_ENGINE)
-+G_DEFINE_TYPE_WITH_PRIVATE (IBusEngineSimple,
-+                            ibus_engine_simple,
-+                            IBUS_TYPE_ENGINE)
- 
- static void
- ibus_engine_simple_class_init (IBusEngineSimpleClass *class)
-@@ -170,8 +172,6 @@ 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;
--
--    g_type_class_add_private (class, sizeof (IBusEngineSimplePrivate));
- }
- 
- static void
-diff --git a/src/ibusfactory.c b/src/ibusfactory.c
-index e915c931..cb9b53cc 100644
---- a/src/ibusfactory.c
-+++ b/src/ibusfactory.c
-@@ -2,7 +2,7 @@
- /* vim:set et sts=4: */
- /* ibus - The Input Bus
-  * Copyright (C) 2008-2015 Peng Huang <shawn.p.huang@gmail.com>
-- * Copyright (C) 2008-2015 Red Hat, Inc.
-+ * Copyright (C) 2008-2019 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
-@@ -26,7 +26,7 @@
- #include "ibusinternal.h"
- 
- #define IBUS_FACTORY_GET_PRIVATE(o)  \
--   (G_TYPE_INSTANCE_GET_PRIVATE ((o), IBUS_TYPE_FACTORY, IBusFactoryPrivate))
-+   ((IBusFactoryPrivate *)ibus_factory_get_instance_private (o))
- 
- enum {
-     CREATE_ENGINE,
-@@ -87,7 +87,7 @@ static void      ibus_factory_engine_destroy_cb
-                                              (IBusEngine         *engine,
-                                               IBusFactory        *factory);
- 
--G_DEFINE_TYPE (IBusFactory, ibus_factory, IBUS_TYPE_SERVICE)
-+G_DEFINE_TYPE_WITH_PRIVATE (IBusFactory, ibus_factory, IBUS_TYPE_SERVICE)
- 
- static const gchar introspection_xml[] =
-     "<node>"
-@@ -158,8 +158,6 @@ ibus_factory_class_init (IBusFactoryClass *class)
- 
-     ibus_service_class_add_interfaces (IBUS_SERVICE_CLASS (class), introspection_xml);
- 
--    g_type_class_add_private (class, sizeof (IBusFactoryPrivate));
--
-     /**
-      * IBusFactory::create-engine:
-      * @factory: the factory which received the signal
-diff --git a/src/ibushotkey.c b/src/ibushotkey.c
-index 249ed5d2..d4ab7c23 100644
---- a/src/ibushotkey.c
-+++ b/src/ibushotkey.c
-@@ -2,8 +2,8 @@
- /* vim:set et sts=4: */
- /* IBus - The Input Bus
-  * Copyright (C) 2008-2010 Peng Huang <shawn.p.huang@gmail.com>
-- * Copyright (C) 2018 Takao Fujiwara <takao.fujiwara1@gmail.com>
-- * Copyright (C) 2008-2018 Red Hat, Inc.
-+ * Copyright (C) 2018-2019 Takao Fujiwara <takao.fujiwara1@gmail.com>
-+ * Copyright (C) 2008-2019 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
-@@ -27,7 +27,7 @@
- #include "ibusshare.h"
- 
- #define IBUS_HOTKEY_PROFILE_GET_PRIVATE(o)  \
--   (G_TYPE_INSTANCE_GET_PRIVATE ((o), IBUS_TYPE_HOTKEY_PROFILE, IBusHotkeyProfilePrivate))
-+   ((IBusHotkeyProfilePrivate *)ibus_hotkey_profile_get_instance_private (o))
- 
- enum {
-     TRIGGER,
-@@ -79,7 +79,10 @@ static guint         normalize_modifiers            (guint                   key
-                                                      guint                   modifiers);
- static gboolean      is_modifier                    (guint                   keyval);
- 
--static IBusSerializableClass *parent_class = NULL;
-+G_DEFINE_TYPE_WITH_PRIVATE (IBusHotkeyProfile,
-+                            ibus_hotkey_profile,
-+                            IBUS_TYPE_SERIALIZABLE)
-+
- 
- static guint profile_signals[LAST_SIGNAL] = { 0 };
- 
-@@ -141,43 +144,12 @@ ibus_hotkey_cmp_with_data (IBusHotkey *hotkey1,
- 
- 
- 
--GType
--ibus_hotkey_profile_get_type (void)
--{
--    static GType type = 0;
--
--    static const GTypeInfo type_info = {
--        sizeof (IBusHotkeyProfileClass),
--        (GBaseInitFunc)     NULL,
--        (GBaseFinalizeFunc) NULL,
--        (GClassInitFunc)    ibus_hotkey_profile_class_init,
--        NULL,               /* class finalize */
--        NULL,               /* class data */
--        sizeof (IBusHotkeyProfile),
--        0,
--        (GInstanceInitFunc) ibus_hotkey_profile_init,
--    };
--
--    if (type == 0) {
--        type = g_type_register_static (IBUS_TYPE_SERIALIZABLE,
--                                       "IBusHotkeyProfile",
--                                       &type_info,
--                                       0);
--    }
--
--    return type;
--}
--
- static void
- ibus_hotkey_profile_class_init (IBusHotkeyProfileClass *class)
- {
-     IBusObjectClass *object_class = IBUS_OBJECT_CLASS (class);
-     IBusSerializableClass *serializable_class = IBUS_SERIALIZABLE_CLASS (class);
- 
--    parent_class = (IBusSerializableClass *) g_type_class_peek_parent (class);
--
--    g_type_class_add_private (class, sizeof (IBusHotkeyProfilePrivate));
--
-     object_class->destroy = (IBusObjectDestroyFunc) ibus_hotkey_profile_destroy;
- 
-     serializable_class->serialize   = (IBusSerializableSerializeFunc) ibus_hotkey_profile_serialize;
-@@ -255,7 +227,8 @@ ibus_hotkey_profile_destroy (IBusHotkeyProfile *profile)
-         priv->hotkeys = NULL;
-     }
- 
--    IBUS_OBJECT_CLASS (parent_class)->destroy ((IBusObject *)profile);
-+    IBUS_OBJECT_CLASS (ibus_hotkey_profile_parent_class)->
-+            destroy ((IBusObject *)profile);
- }
- 
- static gboolean
-@@ -264,7 +237,8 @@ ibus_hotkey_profile_serialize (IBusHotkeyProfile *profile,
- {
-     gboolean retval;
- 
--    retval = parent_class->serialize ((IBusSerializable *) profile, builder);
-+    retval = IBUS_SERIALIZABLE_CLASS (ibus_hotkey_profile_parent_class)->
-+            serialize ((IBusSerializable *) profile, builder);
-     g_return_val_if_fail (retval, FALSE);
- 
-     return TRUE;
-@@ -276,7 +250,8 @@ ibus_hotkey_profile_deserialize (IBusHotkeyProfile *profile,
- {
-     gint retval;
- 
--    retval = parent_class->deserialize ((IBusSerializable *) profile, variant);
-+    retval = IBUS_SERIALIZABLE_CLASS (ibus_hotkey_profile_parent_class)->
-+            deserialize ((IBusSerializable *) profile, variant);
-     g_return_val_if_fail (retval, 0);
- 
-     return retval;
-@@ -288,8 +263,8 @@ ibus_hotkey_profile_copy (IBusHotkeyProfile       *dest,
- {
-     gboolean retval;
- 
--    retval = parent_class->copy ((IBusSerializable *)dest,
--                                 (IBusSerializable *)src);
-+    retval = IBUS_SERIALIZABLE_CLASS (ibus_hotkey_profile_parent_class)->
-+            copy ((IBusSerializable *)dest, (IBusSerializable *)src);
-     g_return_val_if_fail (retval, FALSE);
- 
-     g_return_val_if_fail (IBUS_IS_HOTKEY_PROFILE (dest), FALSE);
-diff --git a/src/ibusinputcontext.c b/src/ibusinputcontext.c
-index a809ef08..2b1438fc 100644
---- a/src/ibusinputcontext.c
-+++ b/src/ibusinputcontext.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) 2018 Takao Fujiwara <takao.fujiwara1@gmail.com>
-- * Copyright (C) 2008-2018 Red Hat, Inc.
-+ * Copyright (C) 2018-2019 Takao Fujiwara <takao.fujiwara1@gmail.com>
-+ * Copyright (C) 2008-2019 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
-@@ -31,7 +31,7 @@
- #include "ibuserror.h"
- 
- #define IBUS_INPUT_CONTEXT_GET_PRIVATE(o)  \
--   (G_TYPE_INSTANCE_GET_PRIVATE ((o), IBUS_TYPE_INPUT_CONTEXT, IBusInputContextPrivate))
-+   ((IBusInputContextPrivate *)ibus_input_context_get_instance_private (o))
- 
- enum {
-     ENABLED,
-@@ -83,7 +83,9 @@ static void     ibus_input_context_g_signal     (GDBusProxy             *proxy,
-                                                  const gchar            *signal_name,
-                                                  GVariant               *parameters);
- 
--G_DEFINE_TYPE (IBusInputContext, ibus_input_context, IBUS_TYPE_PROXY)
-+G_DEFINE_TYPE_WITH_PRIVATE (IBusInputContext,
-+                            ibus_input_context,
-+                            IBUS_TYPE_PROXY)
- 
- static void
- ibus_input_context_class_init (IBusInputContextClass *class)
-@@ -91,8 +93,6 @@ ibus_input_context_class_init (IBusInputContextClass *class)
-     IBusProxyClass *ibus_proxy_class = IBUS_PROXY_CLASS (class);
-     GDBusProxyClass *g_dbus_proxy_class = G_DBUS_PROXY_CLASS (class);
- 
--    g_type_class_add_private (class, sizeof (IBusInputContextPrivate));
--
-     ibus_proxy_class->destroy = ibus_input_context_real_destroy;
- 
-     g_dbus_proxy_class->g_signal = ibus_input_context_g_signal;
-diff --git a/src/ibusobject.c b/src/ibusobject.c
-index 258048c0..15d9aa3a 100644
---- a/src/ibusobject.c
-+++ b/src/ibusobject.c
-@@ -2,7 +2,7 @@
- /* 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) 2008-2019 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
-@@ -25,7 +25,7 @@
- #include "ibusinternal.h"
- 
- #define IBUS_OBJECT_GET_PRIVATE(o)  \
--   (G_TYPE_INSTANCE_GET_PRIVATE ((o), IBUS_TYPE_OBJECT, IBusObjectPrivate))
-+   ((IBusObjectPrivate *)ibus_object_get_instance_private (o))
- 
- enum {
-     DESTROY,
-@@ -53,7 +53,7 @@ static void      ibus_object_dispose        (IBusObject         *obj);
- static void      ibus_object_finalize       (IBusObject         *obj);
- static void      ibus_object_real_destroy   (IBusObject         *obj);
- 
--G_DEFINE_TYPE (IBusObject, ibus_object, G_TYPE_INITIALLY_UNOWNED)
-+G_DEFINE_TYPE_WITH_PRIVATE (IBusObject, ibus_object, G_TYPE_INITIALLY_UNOWNED)
- 
- static void
- ibus_object_class_init     (IBusObjectClass *class)
-@@ -86,8 +86,6 @@ ibus_object_class_init     (IBusObjectClass *class)
-             _ibus_marshal_VOID__VOID,
-             G_TYPE_NONE, 0);
- 
--    g_type_class_add_private (class, sizeof (IBusObjectPrivate));
--
- #ifdef DEBUG_MEMORY
-     _count_table = g_hash_table_new (g_direct_hash, g_direct_equal);
- #endif
-diff --git a/src/ibusobservedpath.c b/src/ibusobservedpath.c
-index cbb846df..5b79f1fe 100644
---- a/src/ibusobservedpath.c
-+++ b/src/ibusobservedpath.c
-@@ -2,7 +2,7 @@
- /* vim:set et sts=4: */
- /* ibus - The Input IBus
-  * Copyright (C) 2008-2015 Peng Huang <shawn.p.huang@gmail.com>
-- * Copyright (C) 2008-2015 Red Hat, Inc.
-+ * Copyright (C) 2008-2019 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
-@@ -37,7 +37,7 @@ struct _IBusObservedPathPrivate {
- typedef struct _IBusObservedPathPrivate IBusObservedPathPrivate;
- 
- #define IBUS_OBSERVED_PATH_GET_PRIVATE(o)  \
--   (G_TYPE_INSTANCE_GET_PRIVATE ((o), IBUS_TYPE_OBSERVED_PATH, IBusObservedPathPrivate))
-+   ((IBusObservedPathPrivate *)ibus_observed_path_get_instance_private (o))
- 
- // static guint            _signals[LAST_SIGNAL] = { 0 };
- 
-@@ -60,8 +60,6 @@ ibus_observed_path_class_init (IBusObservedPathClass *class)
-     IBusObjectClass *object_class = IBUS_OBJECT_CLASS (class);
-     IBusSerializableClass *serializable_class = IBUS_SERIALIZABLE_CLASS (class);
- 
--    // g_type_class_add_private (class, sizeof (IBusObservedPathPrivate));
--
-     object_class->destroy = (IBusObjectDestroyFunc) ibus_observed_path_destroy;
- 
-     serializable_class->serialize   = (IBusSerializableSerializeFunc) ibus_observed_path_serialize;
-diff --git a/src/ibusproperty.c b/src/ibusproperty.c
-index c6a37534..e87d26b6 100644
---- a/src/ibusproperty.c
-+++ b/src/ibusproperty.c
-@@ -2,7 +2,7 @@
- /* 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) 2008-2019 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
-@@ -59,7 +59,7 @@ struct _IBusPropertyPrivate {
- };
- 
- #define IBUS_PROPERTY_GET_PRIVATE(o)  \
--   (G_TYPE_INSTANCE_GET_PRIVATE ((o), IBUS_TYPE_PROPERTY, IBusPropertyPrivate))
-+   ((IBusPropertyPrivate *)ibus_property_get_instance_private (o))
- 
- /* functions prototype */
- static void         ibus_property_set_property  (IBusProperty       *prop,
-@@ -78,7 +78,7 @@ static gint         ibus_property_deserialize   (IBusProperty       *prop,
- static gboolean     ibus_property_copy          (IBusProperty       *dest,
-                                                  const IBusProperty *src);
- 
--G_DEFINE_TYPE (IBusProperty, ibus_property, IBUS_TYPE_SERIALIZABLE)
-+G_DEFINE_TYPE_WITH_PRIVATE (IBusProperty, ibus_property, IBUS_TYPE_SERIALIZABLE)
- 
- static void
- ibus_property_class_init (IBusPropertyClass *class)
-@@ -87,8 +87,6 @@ ibus_property_class_init (IBusPropertyClass *class)
-     IBusObjectClass *object_class = IBUS_OBJECT_CLASS (class);
-     IBusSerializableClass *serializable_class = IBUS_SERIALIZABLE_CLASS (class);
- 
--    g_type_class_add_private (class, sizeof (IBusPropertyPrivate));
--
-     gobject_class->set_property = (GObjectSetPropertyFunc) ibus_property_set_property;
-     gobject_class->get_property = (GObjectGetPropertyFunc) ibus_property_get_property;
- 
-diff --git a/src/ibusregistry.c b/src/ibusregistry.c
-index b0483998..43990d5f 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-2018 Takao Fujiwara <takao.fujiwara1@gmail.com>
-- * Copyright (C) 2015 Red Hat, Inc.
-+ * Copyright (C) 2015-2019 Takao Fujiwara <takao.fujiwara1@gmail.com>
-+ * Copyright (C) 2015-2019 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
-@@ -55,7 +55,7 @@ struct _IBusRegistryPrivate {
- };
- 
- #define IBUS_REGISTRY_GET_PRIVATE(o)  \
--   (G_TYPE_INSTANCE_GET_PRIVATE ((o), IBUS_TYPE_REGISTRY, IBusRegistryPrivate))
-+   ((IBusRegistryPrivate *)ibus_registry_get_instance_private (o))
- 
- /* functions prototype */
- static void     ibus_registry_destroy        (IBusRegistry           *registry);
-@@ -67,7 +67,7 @@ static gint     ibus_registry_deserialize    (IBusRegistry           *registry,
- static gboolean ibus_registry_copy           (IBusRegistry           *dest,
-                                               const IBusRegistry     *src);
- 
--G_DEFINE_TYPE (IBusRegistry, ibus_registry, IBUS_TYPE_SERIALIZABLE)
-+G_DEFINE_TYPE_WITH_PRIVATE (IBusRegistry, ibus_registry, IBUS_TYPE_SERIALIZABLE)
- 
- static void
- ibus_registry_class_init (IBusRegistryClass *class)
-@@ -84,8 +84,6 @@ ibus_registry_class_init (IBusRegistryClass *class)
-         (IBusSerializableDeserializeFunc) ibus_registry_deserialize;
-     serializable_class->copy = (IBusSerializableCopyFunc) ibus_registry_copy;
- 
--    g_type_class_add_private (class, sizeof (IBusRegistryPrivate));
--
-     /* install signals */
-     /**
-      * IBusRegistry::changed:
-diff --git a/src/ibusserializable.c b/src/ibusserializable.c
-index a8d4dd65..231020b7 100644
---- a/src/ibusserializable.c
-+++ b/src/ibusserializable.c
-@@ -2,8 +2,8 @@
- /* vim:set et sts=4: */
- /* ibus - The Input Bus
-  * Copyright (C) 2008-2010 Peng Huang <shawn.p.huang@gmail.com>
-- * Copyright (C) 2018 Takao Fujiwara <takao.fujiwara1@gmail.com>
-- * Copyright (C) 2008-2018 Red Hat, Inc.
-+ * Copyright (C) 2018-2019 Takao Fujiwara <takao.fujiwara1@gmail.com>
-+ * Copyright (C) 2008-2019 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
-@@ -24,7 +24,7 @@
- #include "ibusserializable.h"
- 
- #define IBUS_SERIALIZABLE_GET_PRIVATE(o)  \
--   (G_TYPE_INSTANCE_GET_PRIVATE ((o), IBUS_TYPE_SERIALIZABLE, IBusSerializablePrivate))
-+   ((IBusSerializablePrivate *)ibus_serializable_get_instance_private (o))
- 
- enum {
-     LAST_SIGNAL,
-@@ -50,7 +50,15 @@ static gboolean  ibus_serializable_real_copy        (IBusSerializable       *des
-                                                      const IBusSerializable *src);
- 
- static IBusObjectClass *parent_class = NULL;
-+static gint ibus_serializable_private_offset;
- 
-+G_GNUC_UNUSED
-+static inline gpointer
-+ibus_serializable_get_instance_private (IBusSerializable *self)
-+{
-+    return (G_STRUCT_MEMBER_P (self, ibus_serializable_private_offset));
-+}
-+ 
- GType
- ibus_serializable_get_type (void)
- {
-@@ -73,6 +81,9 @@ ibus_serializable_get_type (void)
-                                        "IBusSerializable",
-                                        &type_info,
-                                        0);
-+        ibus_serializable_private_offset =
-+                g_type_add_instance_private (type,
-+                                             sizeof (IBusSerializablePrivate));
-     }
- 
-     return type;
-@@ -101,7 +112,10 @@ ibus_serializable_class_init     (IBusSerializableClass *class)
- 
-     parent_class = (IBusObjectClass *) g_type_class_peek_parent (class);
- 
--    g_type_class_add_private (class, sizeof (IBusSerializablePrivate));
-+    if (ibus_serializable_private_offset) {
-+        g_type_class_adjust_private_offset (class,
-+                                            &ibus_serializable_private_offset);
-+    }
- 
-     object_class->destroy = (IBusObjectDestroyFunc) ibus_serializable_destroy;
- 
-@@ -184,7 +198,7 @@ ibus_serializable_real_copy (IBusSerializable *dest,
- {
-     IBusSerializablePrivate *src_priv;
-     IBusSerializablePrivate *dest_priv;
--    src_priv = IBUS_SERIALIZABLE_GET_PRIVATE (src);
-+    src_priv = IBUS_SERIALIZABLE_GET_PRIVATE (IBUS_SERIALIZABLE (src));
-     dest_priv = IBUS_SERIALIZABLE_GET_PRIVATE (dest);
- 
-     g_datalist_foreach (&src_priv->attachments,
-diff --git a/src/ibusservice.c b/src/ibusservice.c
-index eb370e8b..60255bd5 100644
---- a/src/ibusservice.c
-+++ b/src/ibusservice.c
-@@ -2,8 +2,8 @@
- /* vim:set et sts=4: */
- /* ibus - The Input Bus
-  * Copyright (C) 2008-2015 Peng Huang <shawn.p.huang@gmail.com>
-- * Copyright (C) 2015-2018 Takao Fujiwara <takao.fujiwara1@gmail.com>
-- * Copyright (C) 2008-2018 Red Hat, Inc.
-+ * Copyright (C) 2015-2019 Takao Fujiwara <takao.fujiwara1@gmail.com>
-+ * Copyright (C) 2008-2019 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
-@@ -24,7 +24,7 @@
- #include "ibusinternal.h"
- 
- #define IBUS_SERVICE_GET_PRIVATE(o)  \
--   (G_TYPE_INSTANCE_GET_PRIVATE ((o), IBUS_TYPE_SERVICE, IBusServicePrivate))
-+   ((IBusServicePrivate *)ibus_service_get_instance_private (o))
- 
- enum {
-     LAST_SIGNAL
-@@ -133,6 +133,13 @@ static const GDBusInterfaceVTable ibus_service_interface_vtable = {
- };
- 
- static IBusObjectClass *ibus_service_parent_class = NULL;
-+static gint ibus_service_private_offset;
-+
-+static inline gpointer
-+ibus_service_get_instance_private (IBusService *self)
-+{
-+    return (G_STRUCT_MEMBER_P (self, ibus_service_private_offset));
-+}
- 
- GType
- ibus_service_get_type (void)
-@@ -156,6 +163,9 @@ ibus_service_get_type (void)
-                                        "IBusService",
-                                        &type_info,
-                                        0);
-+        ibus_service_private_offset =
-+                g_type_add_instance_private (type,
-+                                             sizeof (IBusServicePrivate));
-     }
- 
-     return type;
-@@ -198,12 +208,20 @@ ibus_service_class_init (IBusServiceClass *class)
-     GObjectClass *gobject_class = G_OBJECT_CLASS (class);
-     IBusObjectClass *ibus_object_class = IBUS_OBJECT_CLASS (class);
- 
--    ibus_service_parent_class = IBUS_OBJECT_CLASS (g_type_class_peek_parent (class));
-+    ibus_service_parent_class =
-+            IBUS_OBJECT_CLASS (g_type_class_peek_parent (class));
-+    if (ibus_service_private_offset) {
-+        g_type_class_adjust_private_offset (class,
-+                                            &ibus_service_private_offset);
-+    }
- 
-     gobject_class->constructed  = ibus_service_constructed;
--    gobject_class->set_property = (GObjectSetPropertyFunc) ibus_service_set_property;
--    gobject_class->get_property = (GObjectGetPropertyFunc) ibus_service_get_property;
--    ibus_object_class->destroy  = (IBusObjectDestroyFunc) ibus_service_destroy;
-+    gobject_class->set_property =
-+            (GObjectSetPropertyFunc) ibus_service_set_property;
-+    gobject_class->get_property =
-+            (GObjectGetPropertyFunc) ibus_service_get_property;
-+    ibus_object_class->destroy  =
-+            (IBusObjectDestroyFunc) ibus_service_destroy;
- 
-     /* virtual functions */
-     class->service_method_call = ibus_service_service_method_call;
-@@ -252,8 +270,6 @@ ibus_service_class_init (IBusServiceClass *class)
-                         G_PARAM_STATIC_NICK |
-                         G_PARAM_STATIC_BLURB)
-                     );
--
--    g_type_class_add_private (class, sizeof (IBusServicePrivate));
- }
- 
- static void
-diff --git a/src/ibusunicode.c b/src/ibusunicode.c
-index aac9c135..9e6f6b2b 100644
---- a/src/ibusunicode.c
-+++ b/src/ibusunicode.c
-@@ -1,8 +1,8 @@
- /* -*- mode: C; c-basic-offset: 4; indent-tabs-mode: nil; -*- */
- /* vim:set et sts=4: */
- /* bus - The Input Bus
-- * Copyright (C) 2018 Takao Fujiwara <takao.fujiwara1@gmail.com>
-- * Copyright (C) 2018 Red Hat, Inc.
-+ * Copyright (C) 2018-2019 Takao Fujiwara <takao.fujiwara1@gmail.com>
-+ * Copyright (C) 2018-2019 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
-@@ -64,13 +64,9 @@ typedef struct {
- } IBusUnicodeDataLoadData;
- 
- #define IBUS_UNICODE_DATA_GET_PRIVATE(o)  \
--   (G_TYPE_INSTANCE_GET_PRIVATE ((o), \
--    IBUS_TYPE_UNICODE_DATA, \
--    IBusUnicodeDataPrivate))
-+   ((IBusUnicodeDataPrivate *)ibus_unicode_data_get_instance_private (o))
- #define IBUS_UNICODE_BLOCK_GET_PRIVATE(o)  \
--   (G_TYPE_INSTANCE_GET_PRIVATE ((o), \
--    IBUS_TYPE_UNICODE_BLOCK, \
--    IBusUnicodeBlockPrivate))
-+   ((IBusUnicodeBlockPrivate *)ibus_unicode_block_get_instance_private (o))
- 
- /* functions prototype */
- static void      ibus_unicode_data_set_property (IBusUnicodeData      *unicode,
-@@ -106,8 +102,12 @@ static gint      ibus_unicode_block_deserialize (IBusUnicodeBlock     *block,
- static gboolean  ibus_unicode_block_copy        (IBusUnicodeBlock     *dest,
-                                                 const IBusUnicodeBlock *src);
- 
--G_DEFINE_TYPE (IBusUnicodeData, ibus_unicode_data, IBUS_TYPE_SERIALIZABLE)
--G_DEFINE_TYPE (IBusUnicodeBlock, ibus_unicode_block, IBUS_TYPE_SERIALIZABLE)
-+G_DEFINE_TYPE_WITH_PRIVATE (IBusUnicodeData,
-+                            ibus_unicode_data,
-+                            IBUS_TYPE_SERIALIZABLE)
-+G_DEFINE_TYPE_WITH_PRIVATE (IBusUnicodeBlock,
-+                            ibus_unicode_block,
-+                            IBUS_TYPE_SERIALIZABLE)
- 
- static void
- ibus_unicode_data_class_init (IBusUnicodeDataClass *class)
-@@ -128,8 +128,6 @@ ibus_unicode_data_class_init (IBusUnicodeDataClass *class)
-     serializable_class->copy        =
-             (IBusSerializableCopyFunc) ibus_unicode_data_copy;
- 
--    g_type_class_add_private (class, sizeof (IBusUnicodeDataPrivate));
--
-     /* install properties */
-     /**
-      * IBusUnicodeData:code:
-@@ -690,8 +688,6 @@ ibus_unicode_block_class_init (IBusUnicodeBlockClass *class)
-     serializable_class->copy        =
-             (IBusSerializableCopyFunc) ibus_unicode_block_copy;
- 
--    g_type_class_add_private (class, sizeof (IBusUnicodeBlockPrivate));
--
-     /* install properties */
-     /**
-      * IBusUnicodeBlock:start:
-diff --git a/src/ibusxevent.c b/src/ibusxevent.c
-index 287bb99b..a2ea7b57 100644
---- a/src/ibusxevent.c
-+++ b/src/ibusxevent.c
-@@ -1,8 +1,8 @@
- /* -*- mode: C; c-basic-offset: 4; indent-tabs-mode: nil; -*- */
- /* vim:set et sts=4: */
- /* ibus - The Input Bus
-- * Copyright (C) 2018 Takao Fujiwara <takao.fujiwara1@gmail.com>
-- * Copyright (C) 2018 Red Hat, Inc.
-+ * Copyright (C) 2018-2019 Takao Fujiwara <takao.fujiwara1@gmail.com>
-+ * Copyright (C) 2018-2019 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
-@@ -24,13 +24,11 @@
- 
- #define IBUS_EXTENSION_EVENT_VERSION 1
- #define IBUS_EXTENSION_EVENT_GET_PRIVATE(o)                             \
--   (G_TYPE_INSTANCE_GET_PRIVATE ((o),                                   \
--                                 IBUS_TYPE_EXTENSION_EVENT,             \
--                                 IBusExtensionEventPrivate))
-+   ((IBusExtensionEventPrivate *)ibus_extension_event_get_instance_private (o))
- 
- #define IBUS_X_EVENT_VERSION 1
- #define IBUS_X_EVENT_GET_PRIVATE(o)                                     \
--   (G_TYPE_INSTANCE_GET_PRIVATE ((o), IBUS_TYPE_X_EVENT, IBusXEventPrivate))
-+   ((IBusXEventPrivate *)ibus_x_event_get_instance_private (o))
- 
- enum {
-     PROP_0,
-@@ -128,8 +126,12 @@ static gint      ibus_x_event_deserialize          (IBusXEvent         *event,
- static gboolean  ibus_x_event_copy                 (IBusXEvent         *dest,
-                                                     const IBusXEvent   *src);
- 
--G_DEFINE_TYPE (IBusExtensionEvent, ibus_extension_event, IBUS_TYPE_SERIALIZABLE)
--G_DEFINE_TYPE (IBusXEvent, ibus_x_event, IBUS_TYPE_SERIALIZABLE)
-+G_DEFINE_TYPE_WITH_PRIVATE (IBusExtensionEvent,
-+                            ibus_extension_event,
-+                            IBUS_TYPE_SERIALIZABLE)
-+G_DEFINE_TYPE_WITH_PRIVATE (IBusXEvent,
-+                            ibus_x_event,
-+                            IBUS_TYPE_SERIALIZABLE)
- 
- static void
- ibus_extension_event_class_init (IBusExtensionEventClass *class)
-@@ -228,8 +230,6 @@ ibus_extension_event_class_init (IBusExtensionEventClass *class)
-                         "",
-                         G_PARAM_READWRITE |
-                         G_PARAM_CONSTRUCT_ONLY));
--
--    g_type_class_add_private (class, sizeof (IBusExtensionEventPrivate));
- }
- 
- static void
-@@ -779,8 +779,6 @@ ibus_x_event_class_init (IBusXEventClass *class)
-                         "",
-                         G_PARAM_READWRITE |
-                         G_PARAM_CONSTRUCT_ONLY));
--
--    g_type_class_add_private (class, sizeof (IBusXEventPrivate));
- }
- 
- static void
--- 
-2.21.0
-
-From 3d442dbf936d197aa11ca0a71663c2bc61696151 Mon Sep 17 00:00:00 2001
-From: fujiwarat <takao.fujiwara1@gmail.com>
-Date: Fri, 13 Sep 2019 15:59:03 +0900
-Subject: [PATCH] bus: Implement GDBusAuthObserver callback
-
-ibus uses a GDBusServer with G_DBUS_SERVER_FLAGS_AUTHENTICATION_ALLOW_ANONYMOUS,
-and doesn't set a GDBusAuthObserver, which allows anyone who can connect
-to its AF_UNIX socket to authenticate and be authorized to send method calls.
-It also seems to use an abstract AF_UNIX socket, which does not have
-filesystem permissions, so the practical effect might be that a local
-attacker can connect to another user's ibus service and make arbitrary
-method calls.
-
-BUGS=rhbz#1717958
----
- bus/server.c | 89 ++++++++++++++++++++++++++++++++++++++++++----------
- 1 file changed, 73 insertions(+), 16 deletions(-)
-
-diff --git a/bus/server.c b/bus/server.c
-index 3a626230..2439de14 100644
---- a/bus/server.c
-+++ b/bus/server.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-2010 Red Hat, Inc.
-+ * Copyright (C) 2011-2019 Takao Fujiwara <takao.fujiwara1@gmail.com>
-+ * Copyright (C) 2008-2019 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
-@@ -69,17 +70,64 @@ _restart_server (void)
-     exit (-1);
- }
- 
-+/**
-+ * bus_allow_mechanism_cb:
-+ * @observer: A #GDBusAuthObserver.
-+ * @mechanism: The name of the mechanism.
-+ * @user_data: always %NULL.
-+ *
-+ * Check if @mechanism can be used to authenticate the other peer.
-+ * Returns: %TRUE if the peer's mechanism is allowed.
-+ */
-+static gboolean
-+bus_allow_mechanism_cb (GDBusAuthObserver     *observer,
-+                        const gchar           *mechanism,
-+                        G_GNUC_UNUSED gpointer user_data)
-+{
-+    if (g_strcmp0 (mechanism, "EXTERNAL") == 0)
-+        return TRUE;
-+    return FALSE;
-+}
-+
-+/**
-+ * bus_authorize_authenticated_peer_cb:
-+ * @observer: A #GDBusAuthObserver.
-+ * @stream: A #GIOStream.
-+ * @credentials: A #GCredentials.
-+ * @user_data: always %NULL.
-+ *
-+ * Check if a peer who has already authenticated should be authorized.
-+ * Returns: %TRUE if the peer's credential is authorized.
-+ */
-+static gboolean
-+bus_authorize_authenticated_peer_cb (GDBusAuthObserver     *observer,
-+                                     GIOStream             *stream,
-+                                     GCredentials          *credentials,
-+                                     G_GNUC_UNUSED gpointer user_data)
-+{
-+    gboolean authorized = FALSE;
-+    if (credentials) {
-+        GCredentials *own_credentials = g_credentials_new ();
-+        if (g_credentials_is_same_user (credentials, own_credentials, NULL))
-+            authorized = TRUE;
-+        g_object_unref (own_credentials);
-+    }
-+    return authorized;
-+}
-+
- /**
-  * bus_new_connection_cb:
-- * @user_data: always NULL.
-- * @returns: TRUE when the function can handle the connection.
-+ * @observer: A #GDBusAuthObserver.
-+ * @dbus_connection: A #GDBusconnection.
-+ * @user_data: always %NULL.
-  *
-  * Handle incoming connections.
-+ * Returns: %TRUE when the function can handle the connection.
-  */
- static gboolean
--bus_new_connection_cb (GDBusServer     *server,
--                       GDBusConnection *dbus_connection,
--                       gpointer         user_data)
-+bus_new_connection_cb (GDBusServer           *server,
-+                       GDBusConnection       *dbus_connection,
-+                       G_GNUC_UNUSED gpointer user_data)
- {
-     BusConnection *connection = bus_connection_new (dbus_connection);
-     bus_dbus_impl_new_connection (dbus, connection);
-@@ -94,9 +142,9 @@ bus_new_connection_cb (GDBusServer     *server,
- }
- 
- static void
--_server_connect_start_portal_cb (GObject      *source_object,
--                                 GAsyncResult *res,
--                                 gpointer      user_data)
-+_server_connect_start_portal_cb (GObject               *source_object,
-+                                 GAsyncResult          *res,
-+                                 G_GNUC_UNUSED gpointer user_data)
- {
-     GVariant *result;
-     GError *error = NULL;
-@@ -113,9 +161,9 @@ _server_connect_start_portal_cb (GObject      *source_object,
- }
- 
- static void
--bus_acquired_handler (GDBusConnection *connection,
--                      const gchar     *name,
--                      gpointer         user_data)
-+bus_acquired_handler (GDBusConnection       *connection,
-+                      const gchar           *name,
-+                      G_GNUC_UNUSED gpointer user_data)
- {
-     g_dbus_connection_call (connection,
-                             IBUS_SERVICE_PORTAL,
-@@ -136,14 +184,17 @@ void
- bus_server_init (void)
- {
-     GError *error = NULL;
-+    GDBusServerFlags flags = G_DBUS_SERVER_FLAGS_NONE;
-+    gchar *guid;
-+    GDBusAuthObserver *observer;
- 
-     dbus = bus_dbus_impl_get_default ();
-     ibus = bus_ibus_impl_get_default ();
-     bus_dbus_impl_register_object (dbus, (IBusService *)ibus);
- 
-     /* init server */
--    GDBusServerFlags flags = G_DBUS_SERVER_FLAGS_AUTHENTICATION_ALLOW_ANONYMOUS;
--    gchar *guid = g_dbus_generate_guid ();
-+    guid = g_dbus_generate_guid ();
-+    observer = g_dbus_auth_observer_new ();
-     if (!g_str_has_prefix (g_address, "unix:tmpdir=") &&
-         !g_str_has_prefix (g_address, "unix:path=")) {
-         g_error ("Your socket address does not have the format unix:tmpdir=$DIR "
-@@ -152,7 +203,7 @@ bus_server_init (void)
-     server =  g_dbus_server_new_sync (
-                     g_address, /* the place where the socket file lives, e.g. /tmp, abstract namespace, etc. */
-                     flags, guid,
--                    NULL /* observer */,
-+                    observer,
-                     NULL /* cancellable */,
-                     &error);
-     if (server == NULL) {
-@@ -162,7 +213,13 @@ bus_server_init (void)
-     }
-     g_free (guid);
- 
--    g_signal_connect (server, "new-connection", G_CALLBACK (bus_new_connection_cb), NULL);
-+    g_signal_connect (observer, "allow-mechanism",
-+                      G_CALLBACK (bus_allow_mechanism_cb), NULL);
-+    g_signal_connect (observer, "authorize-authenticated-peer",
-+                      G_CALLBACK (bus_authorize_authenticated_peer_cb), NULL);
-+    g_object_unref (observer);
-+    g_signal_connect (server, "new-connection",
-+                      G_CALLBACK (bus_new_connection_cb), NULL);
- 
-     g_dbus_server_start (server);
- 
--- 
-2.21.0
-
-From a141a14102da038e3f35557ec42e14e322cfdff1 Mon Sep 17 00:00:00 2001
-From: fujiwarat <takao.fujiwara1@gmail.com>
-Date: Fri, 13 Sep 2019 20:19:36 +0900
-Subject: [PATCH] bus: Use XDG_RUNTIME_DIR for Unix socket directory
-
-g_dbus_server_new_sync() is failed with address "unix:tmpdir=/tmp/ibus"
-in BSD systems because BSD systems do not support abstract socket files
-and use the real files but no directory "/tmp/ibus". Now the default
-directory will be an unique "unix:tmpdir=$XDG_RUNTIME_DIR/ibus" by user
-in Linux and "unix:tmpdir=/tmp" in BSD and mkdir() runs with the directory
-mode 0700 not to modify by malicious users.
-
-BUG=https://github.com/ibus/ibus/issues/2116
----
- bus/global.c |  6 ++--
- bus/server.c | 99 +++++++++++++++++++++++++++++++++++++++++++++++-----
- configure.ac | 25 +++++++++++++
- 3 files changed, 120 insertions(+), 10 deletions(-)
-
-diff --git a/bus/global.c b/bus/global.c
-index 2ba8b2a7..8758d923 100644
---- a/bus/global.c
-+++ b/bus/global.c
-@@ -2,7 +2,7 @@
- /* 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) 2008-2019 Red Hat, Inc.
-  * Copyright (c) 2012 Google, Inc.
-  *
-  * This library is free software; you can redistribute it and/or
-@@ -21,10 +21,12 @@
-  * USA
-  */
- 
-+#include <config.h>
-+
- #include "global.h"
- 
- gchar **g_argv = NULL;
--gchar *g_address = "unix:tmpdir=/tmp/ibus";
-+gchar *g_address = IBUS_SOCKET_DIR;
- gchar *g_cache = "auto";
- gboolean g_mempro = FALSE;
- gboolean g_verbose = FALSE;
-diff --git a/bus/server.c b/bus/server.c
-index 2439de14..d9c30e44 100644
---- a/bus/server.c
-+++ b/bus/server.c
-@@ -22,6 +22,8 @@
-  */
- #include "server.h"
- 
-+#include <errno.h>
-+#include <glib/gstdio.h>
- #include <gio/gio.h>
- #include <stdlib.h>
- #include <string.h>
-@@ -180,28 +182,102 @@ bus_acquired_handler (GDBusConnection       *connection,
-                             NULL);
- }
- 
-+static gchar *
-+_bus_extract_address (void)
-+{
-+    gchar *socket_address = g_strdup (g_address);
-+    gchar *p;
-+
-+#define IF_REPLACE_VARIABLE_WITH_FUNC(variable, func, format)           \
-+    if ((p = g_strstr_len (socket_address, -1, (variable)))) {          \
-+        gchar *sub1 = g_strndup (socket_address, p - socket_address);   \
-+        gchar *sub2 = g_strdup (p + strlen (variable));                 \
-+        gchar *tmp = g_strdup_printf ("%s" format "%s",                 \
-+                                      sub1, (func) (), sub2);           \
-+        g_free (sub1);                                                  \
-+        g_free (sub2);                                                  \
-+        g_free (socket_address);                                        \
-+        socket_address = tmp;                                           \
-+    }
-+
-+    IF_REPLACE_VARIABLE_WITH_FUNC ("$XDG_RUNTIME_DIR",
-+                                   g_get_user_runtime_dir,
-+                                   "%s")
-+    else
-+    IF_REPLACE_VARIABLE_WITH_FUNC ("$XDG_CACHE_HOME",
-+                                   g_get_user_cache_dir,
-+                                   "%s")
-+    else
-+    IF_REPLACE_VARIABLE_WITH_FUNC ("$UID", getuid, "%d")
-+
-+#undef IF_REPLACE_VARIABLE_WITH_FUNC
-+
-+    return socket_address;
-+}
-+
- void
- bus_server_init (void)
- {
--    GError *error = NULL;
-+#define IBUS_UNIX_TMPDIR        "unix:tmpdir="
-+#define IBUS_UNIX_PATH          "unix:path="
-+#define IBUS_UNIX_ABSTRACT      "unix:abstract="
-+#define IBUS_UNIX_DIR           "unix:dir="
-+
-+    gchar *socket_address;
-     GDBusServerFlags flags = G_DBUS_SERVER_FLAGS_NONE;
-     gchar *guid;
-     GDBusAuthObserver *observer;
-+    GError *error = NULL;
-+    gchar *unix_dir = NULL;
- 
-     dbus = bus_dbus_impl_get_default ();
-     ibus = bus_ibus_impl_get_default ();
-     bus_dbus_impl_register_object (dbus, (IBusService *)ibus);
- 
-     /* init server */
-+    socket_address = _bus_extract_address ();
-+
-+#define IF_GET_UNIX_DIR(prefix)                                         \
-+    if (g_str_has_prefix (socket_address, (prefix))) {                  \
-+        unix_dir = g_strdup (socket_address + strlen (prefix));         \
-+    }
-+
-+    IF_GET_UNIX_DIR (IBUS_UNIX_TMPDIR)
-+    else
-+    IF_GET_UNIX_DIR (IBUS_UNIX_PATH)
-+    else
-+    IF_GET_UNIX_DIR (IBUS_UNIX_ABSTRACT)
-+    else
-+    IF_GET_UNIX_DIR (IBUS_UNIX_DIR)
-+    else {
-+        g_error ("Your socket address \"%s\" does not correspond with "
-+                 "one of the following formats; "
-+                 IBUS_UNIX_TMPDIR "DIR, " IBUS_UNIX_PATH "FILE, "
-+                 IBUS_UNIX_ABSTRACT "FILE, " IBUS_UNIX_DIR "DIR.",
-+                 socket_address);
-+    }
-+    if (!g_file_test (unix_dir, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR)) {
-+        /* Require mkdir for BSD system. */
-+        if (g_mkdir_with_parents (unix_dir, 0) != 0) {
-+            g_error ("mkdir is failed in: %s: %s",
-+                     unix_dir, g_strerror (errno));
-+        }
-+        /* The mode 0700 can eliminate malicious users change the mode.
-+         * `chmod` runs for the last directory only not to change the modes
-+         * of the parent directories. E.g. "/tmp/ibus".
-+         */
-+        if (g_chmod (unix_dir, 0700) != 0) {
-+            g_error ("chmod(700) is failed in: %s: %s",
-+                     unix_dir, g_strerror (errno));
-+        }
-+    }
-+    g_free (unix_dir);
-     guid = g_dbus_generate_guid ();
-     observer = g_dbus_auth_observer_new ();
--    if (!g_str_has_prefix (g_address, "unix:tmpdir=") &&
--        !g_str_has_prefix (g_address, "unix:path=")) {
--        g_error ("Your socket address does not have the format unix:tmpdir=$DIR "
--                 "or unix:path=$FILE; %s", g_address);
--    }
-     server =  g_dbus_server_new_sync (
--                    g_address, /* the place where the socket file lives, e.g. /tmp, abstract namespace, etc. */
-+                    /* the place where the socket file lives, e.g. /tmp,
-+                     * abstract namespace, etc. */
-+                    socket_address,
-                     flags, guid,
-                     observer,
-                     NULL /* cancellable */,
-@@ -209,8 +285,9 @@ bus_server_init (void)
-     if (server == NULL) {
-         g_error ("g_dbus_server_new_sync() is failed with address %s "
-                  "and guid %s: %s",
--                 g_address, guid, error->message);
-+                 socket_address, guid, error->message);
-     }
-+    g_free (socket_address);
-     g_free (guid);
- 
-     g_signal_connect (observer, "allow-mechanism",
-@@ -235,6 +312,12 @@ bus_server_init (void)
-                     G_BUS_NAME_OWNER_FLAGS_NONE,
-                     bus_acquired_handler,
-                     NULL, NULL, NULL, NULL);
-+
-+#undef IF_GET_UNIX_DIR
-+#undef IBUS_UNIX_TMPDIR
-+#undef IBUS_UNIX_PATH
-+#undef IBUS_UNIX_ABSTRACT
-+#undef IBUS_UNIX_DIR
- }
- 
- const gchar *
-diff --git a/configure.ac b/configure.ac
-index c47e23dc..0c1ee40e 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -702,6 +702,30 @@ the UCD files from https://www.unicode.org/Public/UNIDATA/)
-     enable_unicode_dict="yes (enabled, use --disable-unicode-dict to disable)"
- fi
- 
-+AC_ARG_WITH(socket-dir,
-+    AS_HELP_STRING([--with-socket-dir[=DIR]],
-+        [Set the default socket directory to connect ibus-daemon with D-Bus
-+         connections (default: "$XDG_RUNTIME_DIR/ibus").
-+         The best practice of the socket directory would be unique per user
-+         not to modify by malicious users but XDG_RUNTIME_DIR is not integrated
-+         in BSD systems and the BSD's default is "/tmp".
-+         "$XDG_RUMTIME_DIR", "$XDG_CACHE_HOME", "$UID" are extracted by
-+         ibus-daemon.
-+         ibus-daemon also runs mkdir for the socket directory since BSD
-+         systems do not support abstract socket paths.
-+         The socket path on a NFS mount would not be a good idea likes
-+         "/home/$USER" because the directory is not sometimes accessible
-+         with the network condition.]),
-+    [IBUS_SOCKET_DIR=$with_socket_dir],
-+    [case $host in
-+         *linux*) IBUS_SOCKET_DIR='unix:tmpdir=$XDG_RUNTIME_DIR/ibus';;
-+         *)       IBUS_SOCKET_DIR='unix:tmpdir=/tmp';;
-+     esac]
-+
-+)
-+AC_DEFINE_UNQUOTED(IBUS_SOCKET_DIR, "$IBUS_SOCKET_DIR",
-+                   [The default socket directory to connect ibus-daemon.])
-+
- # Check iso-codes.
- PKG_CHECK_MODULES(ISOCODES, [
-     iso-codes
-@@ -793,6 +817,7 @@ Build options:
-   CLDR annotation directory     $EMOJI_ANNOTATION_DIR
-   Enable Unicode dict           $enable_unicode_dict
-   UCD directory                 $UCD_DIR
-+  Socket directory              "$IBUS_SOCKET_DIR"
-   Run test cases                $enable_tests
-   Install tests                 $enable_install_tests
- ])
--- 
-2.21.0
-
-From 773420fad23078ceef83e8ae84bba4e139d0bea3 Mon Sep 17 00:00:00 2001
-From: fujiwarat <takao.fujiwara1@gmail.com>
-Date: Thu, 19 Sep 2019 17:09:46 +0900
-Subject: [PATCH] src: Fix to allocate compose output buffer with more than two
- chars
-
-If the compose output chars are more than two, IBusCompose calls
-g_renew() but the size is not enough to insert '\0'.
-
-BUG=https://github.com/ibus/ibus/issues/2123
----
- src/ibuscomposetable.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/ibuscomposetable.c b/src/ibuscomposetable.c
-index 5fd37f10..dd9d31d4 100644
---- a/src/ibuscomposetable.c
-+++ b/src/ibuscomposetable.c
-@@ -148,7 +148,7 @@ parse_compose_value (IBusComposeData  *compose_data,
-             } else {
-                 compose_data->values = g_renew (gunichar,
-                                                 compose_data->values,
--                                                n_uchars + 1);
-+                                                n_uchars + 2);
-             }
-             compose_data->values[n_uchars++] = *up;
-         }
--- 
-2.21.0
-
-From 5742e1b399e5d50f34f35b1cda74e548b95554da Mon Sep 17 00:00:00 2001
-From: fujiwarat <takao.fujiwara1@gmail.com>
-Date: Wed, 2 Oct 2019 16:41:27 +0900
-Subject: [PATCH] Revert XDG_RUNTIME_DIR to XDG_CONFIG_HOME
-
-Some users failed to run ibus-daemon with XDG_RUNTIME_DIR because
-the directory is not created by `su` command.
-Now the IBus socket files will be generated in XDG_CACHE_HOME.
-
-BUG=https://github.com/ibus/ibus/issues/2135
----
- configure.ac    | 6 ++++--
- 2 files changed, 8 insertions(+), 3 deletions(-)
-
-diff --git a/configure.ac b/configure.ac
-index 0c1ee40e..84589be0 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -705,10 +705,12 @@ fi
- AC_ARG_WITH(socket-dir,
-     AS_HELP_STRING([--with-socket-dir[=DIR]],
-         [Set the default socket directory to connect ibus-daemon with D-Bus
--         connections (default: "$XDG_RUNTIME_DIR/ibus").
-+         connections (default: "$XDG_CACHE_HOME/ibus").
-          The best practice of the socket directory would be unique per user
-          not to modify by malicious users but XDG_RUNTIME_DIR is not integrated
-          in BSD systems and the BSD's default is "/tmp".
-+         XDG_RUMTIME_DIR is not useful now because XDG_RUMTIME_DIR is available
-+         by login but not `su` command but ibus-daemon can be run with su.
-          "$XDG_RUMTIME_DIR", "$XDG_CACHE_HOME", "$UID" are extracted by
-          ibus-daemon.
-          ibus-daemon also runs mkdir for the socket directory since BSD
-@@ -718,7 +720,7 @@ AC_ARG_WITH(socket-dir,
-          with the network condition.]),
-     [IBUS_SOCKET_DIR=$with_socket_dir],
-     [case $host in
--         *linux*) IBUS_SOCKET_DIR='unix:tmpdir=$XDG_RUNTIME_DIR/ibus';;
-+         *linux*) IBUS_SOCKET_DIR='unix:tmpdir=$XDG_CACHE_HOME/ibus';;
-          *)       IBUS_SOCKET_DIR='unix:tmpdir=/tmp';;
-      esac]
- 
--- 
-2.21.0
-
-From 35863d81d15e3d3463cd5dafd0473afb193c57e3 Mon Sep 17 00:00:00 2001
-From: fujiwarat <takao.fujiwara1@gmail.com>
-Date: Wed, 30 Oct 2019 17:29:25 +0900
-Subject: [PATCH] Fix deprecated APIs
-
-- Fix deprecated gtk_misc_set_padding(), gtk_widget_set_margin_left(),
-  gtk_widget_set_margin_right() in emojilang.py, enginedialog.py,
-  setup.ui, candidatearea.vala, candidatepanel.vala, switcher.vala
-  since GTK 3.12
-
-- Fix g_new0() argument 1 range [18446744071562067968, 18446744073709551615]
-  exceeds maximum object size 9223372036854775807
-  [-Walloc-size-larger-than=] by adding g_assert() in ibuscomposetable.c
-
-- Fix gdk_keymap_get_default() with gdk_keymap_get_for_display() in
-  bindingcommon.vala
-
-- Fix string.utf8_offset() with string.next_char() in emojier.vala
-
-- Fix Posix.SIGUSR1 with Posix.Signal.USR1 in panel.vala
----
- bus/ibusimpl.c              |  1 +
- configure.ac                |  3 ++-
- setup/emojilang.py          | 14 +++++++-------
- setup/enginedialog.py       | 18 +++++++++---------
- setup/setup.ui              | 34 +++++++++++++++++-----------------
- src/ibuscomposetable.c      |  1 +
- ui/gtk3/bindingcommon.vala  |  6 +++---
- ui/gtk3/candidatearea.vala  |  9 +++++----
- ui/gtk3/candidatepanel.vala | 10 +++++-----
- ui/gtk3/emojier.vala        |  4 +++-
- ui/gtk3/panel.vala          |  4 ++--
- ui/gtk3/switcher.vala       |  9 +++++----
- 12 files changed, 60 insertions(+), 53 deletions(-)
-
-diff --git a/bus/ibusimpl.c b/bus/ibusimpl.c
-index 39b16139..85761d30 100644
---- a/bus/ibusimpl.c
-+++ b/bus/ibusimpl.c
-@@ -2180,6 +2180,7 @@ bus_ibus_impl_registry_destroy (BusIBusImpl *ibus)
- 
-     g_clear_pointer (&ibus->engine_table, g_hash_table_destroy);
- 
-+    /* g_clear_pointer() does not set the cast. */
-     ibus_object_destroy (IBUS_OBJECT (ibus->registry));
-     ibus->registry = NULL;
- 
-diff --git a/configure.ac b/configure.ac
-index 84589be0..ab74a380 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -53,6 +53,7 @@ m4_define([ibus_binary_version],
- 
- # Required versions of other packages.
- m4_define([glib_required_version], [2.46.0])
-+m4_define([gtk3_required_version], [3.12.0])
- 
- # VALA_TARGET_GLIB_VERSION is used by valac --ccode --target-glib .
- # VALA_TARGET_GLIB_VERSION and glib_required_version will be different
-@@ -238,7 +239,7 @@ fi
- if test x"$enable_gtk3" = x"yes"; then
-     # check for gtk3
-     PKG_CHECK_MODULES(GTK3, [
--        gtk+-3.0
-+        gtk+-3.0 >= gtk3_required_version
-     ])
-     PKG_CHECK_EXISTS([gdk-wayland-3.0],
-         [enable_gdk3_wayland=yes],
-diff --git a/setup/emojilang.py b/setup/emojilang.py
-index 8250589d..58757d86 100644
---- a/setup/emojilang.py
-+++ b/setup/emojilang.py
-@@ -3,7 +3,7 @@
- #
- # ibus - The Input Bus
- #
--# Copyright (c) 2017 Takao Fujiwara <takao.fujiwara1@gmail.com>
-+# Copyright (c) 2017-2019 Takao Fujiwara <takao.fujiwara1@gmail.com>
- # Copyright (c) 2017 Red Hat, Inc.
- #
- # This program is free software; you can redistribute it and/or
-@@ -83,8 +83,8 @@ class EmojiLangChooser(Gtk.Dialog):
-                 hscrollbar_policy = Gtk.PolicyType.NEVER,
-                 vscrollbar_policy = Gtk.PolicyType.NEVER,
-                 shadow_type = Gtk.ShadowType.IN,
--                margin_left = 6,
--                margin_right = 6,
-+                margin_start = 6,
-+                margin_end = 6,
-                 margin_top = 6,
-                 margin_bottom = 6)
-         self.vbox.add(self.__scrolled)
-@@ -192,8 +192,8 @@ class EmojiLangChooser(Gtk.Dialog):
-         label = Gtk.Label(label = text)
-         label.set_halign(alignment)
-         label.set_valign(Gtk.Align.CENTER)
--        label.set_margin_left(20)
--        label.set_margin_right(20)
-+        label.set_margin_start(20)
-+        label.set_margin_end(20)
-         label.set_margin_top(6)
-         label.set_margin_bottom(6)
-         hbox.pack_start(label, True, True, 0)
-@@ -235,8 +235,8 @@ class EmojiLangChooser(Gtk.Dialog):
-         row.set_tooltip_text(_("More…"))
-         arrow = Gtk.Image.new_from_icon_name('view-more-symbolic',
-                                              Gtk.IconSize.MENU)
--        arrow.set_margin_left(20)
--        arrow.set_margin_right(20)
-+        arrow.set_margin_start(20)
-+        arrow.set_margin_end(20)
-         arrow.set_margin_top(6)
-         arrow.set_margin_bottom(6)
-         arrow.set_halign(Gtk.Align.CENTER)
-diff --git a/setup/enginedialog.py b/setup/enginedialog.py
-index 2c472deb..72deada8 100644
---- a/setup/enginedialog.py
-+++ b/setup/enginedialog.py
-@@ -4,7 +4,7 @@
- # ibus - The Input Bus
- #
- # Copyright (c) 2015 Peng Huang <shawn.p.huang@gmail.com>
--# Copyright (c) 2015 Takao Fujiwara <takao.fujiwara1@gmail.com>
-+# Copyright (c) 2015-2019 Takao Fujiwara <takao.fujiwara1@gmail.com>
- # Copyright (c) 2013-2015 Red Hat, Inc.
- #
- # This program is free software; you can redistribute it and/or
-@@ -70,8 +70,8 @@ class EngineDialog(Gtk.Dialog):
-                 hscrollbar_policy = Gtk.PolicyType.NEVER,
-                 vscrollbar_policy = Gtk.PolicyType.NEVER,
-                 shadow_type = Gtk.ShadowType.IN,
--                margin_left = 6,
--                margin_right = 6,
-+                margin_start = 6,
-+                margin_end = 6,
-                 margin_top = 6,
-                 margin_bottom = 6)
-         self.vbox.add(self.__scrolled)
-@@ -94,8 +94,8 @@ class EngineDialog(Gtk.Dialog):
-         self.__filter_timeout_id = 0
-         self.__filter_word = None
-         self.__filter_entry = Gtk.SearchEntry(hexpand = True,
--                                              margin_left = 6,
--                                              margin_right = 6,
-+                                              margin_start = 6,
-+                                              margin_end = 6,
-                                               margin_top = 6,
-                                               margin_bottom = 6)
-         self.__filter_entry.set_no_show_all(True)
-@@ -164,8 +164,8 @@ class EngineDialog(Gtk.Dialog):
-         label = Gtk.Label(label = text)
-         label.set_halign(alignment)
-         label.set_valign(Gtk.Align.CENTER)
--        label.set_margin_left(20)
--        label.set_margin_right(20)
-+        label.set_margin_start(20)
-+        label.set_margin_end(20)
-         label.set_margin_top(6)
-         label.set_margin_bottom(6)
-         hbox.pack_start(label, True, True, 0)
-@@ -205,8 +205,8 @@ class EngineDialog(Gtk.Dialog):
-         row.set_tooltip_text(_("More…"))
-         arrow = Gtk.Image.new_from_icon_name('view-more-symbolic',
-                                              Gtk.IconSize.MENU)
--        arrow.set_margin_left(20)
--        arrow.set_margin_right(20)
-+        arrow.set_margin_start(20)
-+        arrow.set_margin_end(20)
-         arrow.set_margin_top(6)
-         arrow.set_margin_bottom(6)
-         arrow.set_halign(Gtk.Align.CENTER)
-diff --git a/setup/setup.ui b/setup/setup.ui
-index 9d9d7ee9..56453054 100644
---- a/setup/setup.ui
-+++ b/setup/setup.ui
-@@ -90,8 +90,8 @@
-                 <property name="spacing">18</property>
-                 <property name="margin_top">12</property>
-                 <property name="margin_bottom">12</property>
--                <property name="margin_left">12</property>
--                <property name="margin_right">12</property>
-+                <property name="margin_start">12</property>
-+                <property name="margin_end">12</property>
-                 <child>
-                   <object class="GtkFrame" id="frame3">
-                     <property name="visible">True</property>
-@@ -105,7 +105,7 @@
-                         <property name="column_spacing">12</property>
-                         <property name="row_spacing">6</property>
-                         <property name="margin_top">6</property>
--                        <property name="margin_left">12</property>
-+                        <property name="margin_start">12</property>
-                         <child>
-                           <object class="GtkLabel" id="label8">
-                             <property name="visible">True</property>
-@@ -366,7 +366,7 @@
-                         <property name="column_spacing">12</property>
-                         <property name="row_spacing">6</property>
-                         <property name="margin_top">6</property>
--                        <property name="margin_left">12</property>
-+                        <property name="margin_start">12</property>
-                         <child>
-                           <object class="GtkLabel" id="label6">
-                             <property name="visible">True</property>
-@@ -589,8 +589,8 @@
-                 <property name="can_focus">False</property>
-                 <property name="margin_top">12</property>
-                 <property name="margin_bottom">12</property>
--                <property name="margin_left">12</property>
--                <property name="margin_right">12</property>
-+                <property name="margin_start">12</property>
-+                <property name="margin_end">12</property>
-                 <child>
-                   <object class="GtkBox" id="hbox1">
-                     <property name="orientation">horizontal</property>
-@@ -658,7 +658,7 @@
-                         <property name="can_focus">False</property>
-                         <property name="spacing">5</property>
-                         <property name="layout_style">start</property>
--                        <property name="margin_left">12</property>
-+                        <property name="margin_start">12</property>
-                         <child>
-                           <object class="GtkButton" id="button_engine_add">
-                             <property name="label" translatable="yes">_Add</property>
-@@ -811,7 +811,7 @@
-                         <property name="max_width_chars">74</property>
-                         <property name="label" translatable="yes">&lt;small&gt;&lt;i&gt;The active input method can be switched around from the selected ones in the above list by pressing the keyboard shortcut keys or clicking the panel icon.&lt;/i&gt;&lt;/small&gt;</property>
-                         <property name="use_markup">True</property>
--                        <!-- property name="margin_left">0</property -->
-+                        <!-- property name="margin_start">0</property -->
-                       </object>
-                       <packing>
-                         <property name="expand">True</property>
-@@ -850,8 +850,8 @@
-                 <property name="spacing">18</property>
-                 <property name="margin_top">12</property>
-                 <property name="margin_bottom">12</property>
--                <property name="margin_left">12</property>
--                <property name="margin_right">12</property>
-+                <property name="margin_start">12</property>
-+                <property name="margin_end">12</property>
-                 <child>
-                   <object class="GtkFrame" id="frame_emoji1">
-                     <property name="visible">True</property>
-@@ -865,7 +865,7 @@
-                         <property name="column_spacing">12</property>
-                         <property name="row_spacing">6</property>
-                         <property name="margin_top">6</property>
--                        <property name="margin_left">12</property>
-+                        <property name="margin_start">12</property>
-                         <child>
-                           <object class="GtkLabel" id="label_emoji1">
-                             <property name="visible">True</property>
-@@ -1004,7 +1004,7 @@
-                         <property name="column_spacing">12</property>
-                         <property name="row_spacing">6</property>
-                         <property name="margin_top">6</property>
--                        <property name="margin_left">12</property>
-+                        <property name="margin_start">12</property>
-                         <property name="row_homogeneous">false</property>
-                         <child>
-                           <object class="GtkLabel" id="label_emoji_font">
-@@ -1187,8 +1187,8 @@
-                 <property name="can_focus">False</property>
-                 <property name="margin_top">12</property>
-                 <property name="margin_bottom">12</property>
--                <property name="margin_left">12</property>
--                <property name="margin_right">12</property>
-+                <property name="margin_start">12</property>
-+                <property name="margin_end">12</property>
-                 <child>
-                   <object class="GtkFrame" id="frame2">
-                     <property name="visible">True</property>
-@@ -1202,7 +1202,7 @@
-                         <property name="can_focus">False</property>
-                         <property name="spacing">6</property>
-                         <property name="margin_top">6</property>
--                        <property name="margin_left">24</property>
-+                        <property name="margin_start">24</property>
-                         <child>
-                           <object class="GtkCheckButton" id="checkbutton_use_sys_layout">
-                             <property name="label" translatable="yes">Use system keyboard layout</property>
-@@ -1251,7 +1251,7 @@
-                         <property name="can_focus">False</property>
-                         <property name="spacing">6</property>
-                         <property name="margin_top">6</property>
--                        <property name="margin_left">24</property>
-+                        <property name="margin_start">24</property>
-                         <child>
-                           <object class="GtkCheckButton" id="checkbutton_use_global_engine">
-                             <property name="label" translatable="yes">Share the same input method among all applications</property>
-@@ -1348,7 +1348,7 @@ Homepage: https://github.com/ibus/ibus/wiki
-                         <property name="halign">start</property>
-                         <property name="draw_indicator">True</property>
-                         <property name="margin_top">6</property>
--                        <property name="margin_left">12</property>
-+                        <property name="margin_start">12</property>
-                       </object>
-                     </child>
-                     <child type="label">
-diff --git a/src/ibuscomposetable.c b/src/ibuscomposetable.c
-index dd9d31d4..e4e3a7cd 100644
---- a/src/ibuscomposetable.c
-+++ b/src/ibuscomposetable.c
-@@ -1058,6 +1058,7 @@ ibus_compose_table_list_add_array (GSList        *compose_tables,
-     int i;
-     guint16 *ibus_compose_seqs = NULL;
- 
-+    g_assert (length >= 0);
-     g_return_val_if_fail (data != NULL, compose_tables);
-     g_return_val_if_fail (max_seq_len <= IBUS_MAX_COMPOSE_LEN, compose_tables);
- 
-diff --git a/ui/gtk3/bindingcommon.vala b/ui/gtk3/bindingcommon.vala
-index 4171f29d..150d4c39 100644
---- a/ui/gtk3/bindingcommon.vala
-+++ b/ui/gtk3/bindingcommon.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-2019 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
-@@ -75,8 +75,8 @@ class BindingCommon {
-         // workaround a bug in gdk vapi vala > 0.18
-         // https://bugzilla.gnome.org/show_bug.cgi?id=677559
- #if VALA_0_18
--            Gdk.Keymap.get_default().map_virtual_modifiers(
--                    ref switch_modifiers);
-+            Gdk.Keymap.get_for_display(Gdk.Display.get_default()
-+                    ).map_virtual_modifiers(ref switch_modifiers);
- #else
-             if ((switch_modifiers & Gdk.ModifierType.SUPER_MASK) != 0)
-                 switch_modifiers |= Gdk.ModifierType.MOD4_MASK;
-diff --git a/ui/gtk3/candidatearea.vala b/ui/gtk3/candidatearea.vala
-index 781ecd1e..b22ab5da 100644
---- a/ui/gtk3/candidatearea.vala
-+++ b/ui/gtk3/candidatearea.vala
-@@ -3,7 +3,7 @@
-  * ibus - The Input Bus
-  *
-  * Copyright(c) 2011-2015 Peng Huang <shawn.p.huang@gmail.com>
-- * Copyright(c) 2015-2017 Takao Fujiwara <takao.fujiwara1@gmail.com>
-+ * Copyright(c) 2015-2019 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
-@@ -215,9 +215,10 @@ class CandidateArea : Gtk.Box {
-                 candidate.show();
-                 m_candidates += candidate;
- 
--                /* Use Gtk.Widget.set_margin_start() since gtk 3.12 */
--                label.set_padding(8, 0);
--                candidate.set_padding(8, 0);
-+                label.set_margin_start (8);
-+                label.set_margin_end (8);
-+                candidate.set_margin_start (8);
-+                candidate.set_margin_end (8);
- 
-                 // Make a copy of i to workaround a bug in vala.
-                 // https://bugzilla.gnome.org/show_bug.cgi?id=628336
-diff --git a/ui/gtk3/candidatepanel.vala b/ui/gtk3/candidatepanel.vala
-index d404c659..8994cdb9 100644
---- a/ui/gtk3/candidatepanel.vala
-+++ b/ui/gtk3/candidatepanel.vala
-@@ -3,7 +3,7 @@
-  * ibus - The Input Bus
-  *
-  * Copyright(c) 2011-2015 Peng Huang <shawn.p.huang@gmail.com>
-- * Copyright(c) 2015-2018 Takao Fujiwara <takao.fujiwara1@gmail.com>
-+ * Copyright(c) 2015-2019 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
-@@ -242,16 +242,16 @@ public class CandidatePanel : Gtk.Box{
-         m_preedit_label.set_size_request(20, -1);
-         m_preedit_label.set_halign(Gtk.Align.START);
-         m_preedit_label.set_valign(Gtk.Align.CENTER);
--        /* Use Gtk.Widget.set_margin_start() since gtk 3.12 */
--        m_preedit_label.set_padding(8, 0);
-+        m_preedit_label.set_margin_start(8);
-+        m_preedit_label.set_margin_end(8);
-         m_preedit_label.set_no_show_all(true);
- 
-         m_aux_label = new Gtk.Label(null);
-         m_aux_label.set_size_request(20, -1);
-         m_aux_label.set_halign(Gtk.Align.START);
-         m_aux_label.set_valign(Gtk.Align.CENTER);
--        /* Use Gtk.Widget.set_margin_start() since gtk 3.12 */
--        m_aux_label.set_padding(8, 0);
-+        m_aux_label.set_margin_start(8);
-+        m_aux_label.set_margin_end(8);
-         m_aux_label.set_no_show_all(true);
- 
-         m_candidate_area = new CandidateArea(m_vertical_panel_system);
-diff --git a/ui/gtk3/emojier.vala b/ui/gtk3/emojier.vala
-index fc15cffe..4e52769c 100644
---- a/ui/gtk3/emojier.vala
-+++ b/ui/gtk3/emojier.vala
-@@ -2147,11 +2147,13 @@ public class IBusEmojier : Gtk.ApplicationWindow {
-                         ncandidates));
-         int char_count = text.text.char_count();
-         int start_index = -1;
-+        unowned string title = text.text;
-         for (int i = 0; i < char_count; i++) {
--            if (text.text.utf8_offset(i).has_prefix(language)) {
-+            if (title.has_prefix(language)) {
-                 start_index = i;
-                 break;
-             }
-+            title = title.next_char();
-         }
-         if (start_index >= 0) {
-             var attr = new IBus.Attribute(
-diff --git a/ui/gtk3/panel.vala b/ui/gtk3/panel.vala
-index 2054658e..680c86ed 100644
---- a/ui/gtk3/panel.vala
-+++ b/ui/gtk3/panel.vala
-@@ -1053,7 +1053,7 @@ class Panel : IBus.PanelService {
- 
-     private void show_setup_dialog() {
-         if (m_setup_pid != 0) {
--            if (Posix.kill(m_setup_pid, Posix.SIGUSR1) == 0)
-+            if (Posix.kill(m_setup_pid, Posix.Signal.USR1) == 0)
-                 return;
-             m_setup_pid = 0;
-         }
-@@ -1087,7 +1087,7 @@ class Panel : IBus.PanelService {
- 
-             string copyright =
-                 "Copyright © 2007-2015 Peng Huang\n" +
--                "Copyright © 2015 Takao Fujiwara\n" +
-+                "Copyright © 2015-2019 Takao Fujiwara\n" +
-                 "Copyright © 2007-2015 Red Hat, Inc.\n";
- 
-             m_about_dialog.set_copyright(copyright);
-diff --git a/ui/gtk3/switcher.vala b/ui/gtk3/switcher.vala
-index 0de44e98..a4529c88 100644
---- a/ui/gtk3/switcher.vala
-+++ b/ui/gtk3/switcher.vala
-@@ -3,7 +3,7 @@
-  * ibus - The Input Bus
-  *
-  * Copyright(c) 2011-2016 Peng Huang <shawn.p.huang@gmail.com>
-- * Copyright(c) 2015-2017 Takao Fujiwara <takao.fujiwara1@gmail.com>
-+ * Copyright(c) 2015-2019 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
-@@ -125,9 +125,10 @@ class Switcher : Gtk.Window {
-         Atk.Object obj = m_label.get_accessible();
-         obj.set_role (Atk.Role.STATUSBAR);
- 
--        /* Use Gtk.Widget.set_margin_start() and
--         * Gtk.Widget.set_margin_top() since gtk 3.12 */
--        m_label.set_padding(3, 3);
-+        m_label.set_margin_start(3);
-+        m_label.set_margin_end(3);
-+        m_label.set_margin_top(3);
-+        m_label.set_margin_bottom(3);
-         vbox.pack_end(m_label, false, false, 0);
- 
-         grab_focus();
--- 
-2.21.0
-
-From efeb7b9689126e4f05bd1e10441cdc4a3720ff1c Mon Sep 17 00:00:00 2001
-From: Robert Hoffmann <externer.dl.hoffmann@muenchen.de>
-Date: Fri, 1 Nov 2019 21:55:13 +0900
-Subject: [PATCH] bus: Fix restart crash with inotify read()
-
-Do not close inotify desciptors when restarting the server. This
-may lead to crashes in glib.
-
-Fixes crash in libglib/libgio with
-GLib-GIO-ERROR : inotify read(): Bad file descriptor
-
-See also src/tests/ibus-bus.c: start_exit_async():
-    /* When `./runtest ibus-bus` runs, ibus-daemon sometimes failed to
-     * restart because closing a file descriptor was failed in
-     * bus/server.c:_restart_server() with a following error:
-     *     "inotify read(): Bad file descriptor"
-
-Test plan:
-Run
-$ ibus restart
-several times. Without the patch ibus-daemon will crash occasionally.
-
-BUG=https://github.com/ibus/ibus/pull/2148
----
- bus/server.c | 28 ++++++++++++++++++++++++----
- 1 file changed, 24 insertions(+), 4 deletions(-)
-
-diff --git a/bus/server.c b/bus/server.c
-index d9c30e44..a7554a88 100644
---- a/bus/server.c
-+++ b/bus/server.c
-@@ -26,6 +26,8 @@
- #include <glib/gstdio.h>
- #include <gio/gio.h>
- #include <stdlib.h>
-+#include <fcntl.h>
-+#include <errno.h>
- #include <string.h>
- 
- #include "dbusimpl.h"
-@@ -45,16 +47,33 @@ _restart_server (void)
- {
-     gchar *exe;
-     gint fd;
-+    ssize_t r;
-+    int MAXSIZE = 0xFFF;
-+    char proclnk[MAXSIZE];
-+    char filename[MAXSIZE];
- 
--    exe = g_strdup_printf ("/proc/%d/exe", getpid ());
--    exe = g_file_read_link (exe, NULL);
-+    exe = g_file_read_link ("/proc/self/exe", NULL);
- 
-     if (exe == NULL)
--        exe = BINDIR "/ibus-daemon";
-+        exe = g_strdup (BINDIR "/ibus-daemon");
- 
-     /* close all fds except stdin, stdout, stderr */
-     for (fd = 3; fd <= sysconf (_SC_OPEN_MAX); fd ++) {
--        close (fd);
-+        errno = 0;
-+        /* only close valid fds */
-+        if (fcntl (fd, F_GETFD) != -1 || errno != EBADF) {
-+            g_sprintf (proclnk, "/proc/self/fd/%d", fd);
-+            r = readlink (proclnk, filename, MAXSIZE);
-+            if (r < 0) {
-+                continue;
-+            }
-+            filename[r] = '\0';
-+
-+            /* Do not close 'anon_inode:inotify' fds, that may crash in glib */
-+            if (g_strcmp0 (filename, "anon_inode:inotify") != 0) {
-+                close (fd);
-+            }
-+        }
-     }
- 
-     _restart = FALSE;
-@@ -69,6 +88,7 @@ _restart_server (void)
-         execv (exe, g_argv);
-     }
-     g_warning ("execv %s failed!", g_argv[0]);
-+    g_free (exe);
-     exit (-1);
- }
- 
--- 
-2.21.0
-
-From 26a8105b7003953e56bf04426ee89a93482a45c5 Mon Sep 17 00:00:00 2001
-From: fujiwarat <takao.fujiwara1@gmail.com>
-Date: Sun, 10 Nov 2019 09:53:27 +0900
-Subject: [PATCH] ui/gtk3: Fix to exit `ibus emoji` with Escape key
-
-When Escape key is pressed, the current ibus-ui-emojier should exit
-although another daemon one is alive.
-
-`ibus emoji` was used in Wayland desktop as a workaround but now
-IBus emoji functions are moved to the engine's pre-edit and the same
-function is available with Ctrl-Sfhit-e and space key so this problem
-would not be so visible.
-
-BUG=rhbz#1658187
----
- ui/gtk3/emojier.vala    |  5 ++--
- ui/gtk3/emojierapp.vala | 63 +++++++++++++++++++++++++++++------------
- 2 files changed, 48 insertions(+), 20 deletions(-)
-
-diff --git a/ui/gtk3/emojier.vala b/ui/gtk3/emojier.vala
-index 4e52769c..13bacebd 100644
---- a/ui/gtk3/emojier.vala
-+++ b/ui/gtk3/emojier.vala
-@@ -320,6 +320,7 @@ public class IBusEmojier : Gtk.ApplicationWindow {
- 
-     public signal void candidate_clicked(uint index, uint button, uint state);
-     public signal void commit_text(string text);
-+    public signal void cancel();
- 
-     public IBusEmojier() {
-         GLib.Object(
-@@ -1789,8 +1790,7 @@ public class IBusEmojier : Gtk.ApplicationWindow {
-             show_emoji_variants(emojis);
-             return true;
-         }
--        if (m_input_context_path != "")
--            m_result = text;
-+        m_result = text;
-         if (need_commit_signal)
-             commit_text(text);
-         return false;
-@@ -1897,6 +1897,7 @@ public class IBusEmojier : Gtk.ApplicationWindow {
-             // PageUp/PageDown.
-             remove_all_children();
-         }
-+        cancel();
-         return false;
-     }
- 
-diff --git a/ui/gtk3/emojierapp.vala b/ui/gtk3/emojierapp.vala
-index e8331989..783c611c 100644
---- a/ui/gtk3/emojierapp.vala
-+++ b/ui/gtk3/emojierapp.vala
-@@ -3,6 +3,7 @@
-  * ibus - The Input Bus
-  *
-  * Copyright (c) 2017 Peng Wu <alexepico@gmail.com>
-+ * Copyright (c) 2017-2019 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
-@@ -40,6 +41,33 @@ public class EmojiApplication : Gtk.Application {
-     }
- 
- 
-+    private void save_selected_string(string? selected_string,
-+                                      bool    cancelled) {
-+        if (cancelled) {
-+            m_command_line.print("%s\n", _("Canceled to choose an emoji."));
-+            return;
-+        }
-+        GLib.return_if_fail(selected_string != null);
-+        Gtk.Clipboard clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD);
-+        clipboard.set_text(selected_string, -1);
-+        clipboard.store();
-+
-+        var emojier_favorites = m_settings_emoji.get_strv("favorites");
-+        bool has_favorite = false;
-+        foreach (unowned string favorite in emojier_favorites) {
-+            if (favorite == selected_string) {
-+                has_favorite = true;
-+                break;
-+            }
-+        }
-+        if (!has_favorite) {
-+            emojier_favorites += selected_string;
-+            m_settings_emoji.set_strv("favorites", emojier_favorites);
-+        }
-+        m_command_line.print("%s\n", _("Copied an emoji to your clipboard."));
-+    }
-+
-+
-     private void show_dialog(ApplicationCommandLine command_line) {
-         m_command_line = command_line;
-         m_emojier.reset();
-@@ -55,7 +83,7 @@ public class EmojiApplication : Gtk.Application {
-             return;
-         if (button == IBusEmojier.BUTTON_CLOSE_BUTTON) {
-             m_emojier.hide();
--            m_command_line.print("%s\n", _("Canceled to choose an emoji."));
-+            save_selected_string(null, true);
-             m_command_line = null;
-             return;
-         }
-@@ -74,23 +102,7 @@ public class EmojiApplication : Gtk.Application {
-         }
-         string emoji = m_emojier.get_current_candidate();
-         m_emojier.hide();
--        Gtk.Clipboard clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD);
--        clipboard.set_text(emoji, -1);
--        clipboard.store();
--
--        var emojier_favorites = m_settings_emoji.get_strv("favorites");
--        bool has_favorite = false;
--        foreach (unowned string favorite in emojier_favorites) {
--            if (favorite == emoji) {
--                has_favorite = true;
--                break;
--            }
--        }
--        if (!has_favorite) {
--            emojier_favorites += emoji;
--            m_settings_emoji.set_strv("favorites", emojier_favorites);
--        }
--        m_command_line.print("%s\n", _("Copied an emoji to your clipboard."));
-+        save_selected_string(emoji, false);
-         m_command_line = null;
-     }
- 
-@@ -202,6 +214,21 @@ public class EmojiApplication : Gtk.Application {
-             m_emojier.candidate_clicked.connect((i, b, s) => {
-                 candidate_clicked_lookup_table(i, b, s);
-             });
-+            m_emojier.cancel.connect(() => {
-+                if (m_command_line == null)
-+                    return;
-+                m_emojier.hide();
-+                save_selected_string(null, true);
-+                m_command_line = null;
-+            });
-+            m_emojier.commit_text.connect(() => {
-+                if (m_command_line == null)
-+                    return;
-+                m_emojier.hide();
-+                string selected_string = m_emojier.get_selected_string();
-+                save_selected_string(selected_string, false);
-+                m_command_line = null;
-+            });
-         }
- 
-         activate_dialog(command_line);
--- 
-2.21.0
-
-From 76b1773c6ef529888bcd62c4f8207c89ba23503f Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Mangano-Tarumi?= <fmang@mg0.fr>
-Date: Mon, 18 Nov 2019 12:05:35 +0900
-Subject: [PATCH] engine-simple: Add the French bepo_afnor layout
-
-BUG=https://github.com/ibus/ibus/pull/2155
----
- engine/simple.xml.in | 12 ++++++++++++
- 1 file changed, 12 insertions(+)
-
-diff --git a/engine/simple.xml.in b/engine/simple.xml.in
-index 4445c254..fc1541ec 100644
---- a/engine/simple.xml.in
-+++ b/engine/simple.xml.in
-@@ -283,6 +283,18 @@
-                         <icon>ibus-keyboard</icon>
-                         <rank>1</rank>
-                 </engine>
-+                <engine>
-+                        <name>xkb:fr:bepo_afnor:fra</name>
-+                        <language>fr</language>
-+                        <license>GPL</license>
-+                        <author>Peng Huang &lt;shawn.p.huang@gmail.com&gt;</author>
-+                        <layout>fr</layout>
-+                        <layout_variant>bepo_afnor</layout_variant>
-+                        <longname>French (Bepo, ergonomic, Dvorak way, AFNOR)</longname>
-+                        <description>French (Bepo, ergonomic, Dvorak way, AFNOR)</description>
-+                        <icon>ibus-keyboard</icon>
-+                        <rank>1</rank>
-+                </engine>
-                 <engine>
-                         <name>xkb:fr:dvorak:fra</name>
-                         <language>fr</language>
--- 
-2.21.0
-
-From 7f335dcc3dcfe51f74f1dc4e13315e1031d4561e Mon Sep 17 00:00:00 2001
-From: fujiwarat <takao.fujiwara1@gmail.com>
-Date: Mon, 18 Nov 2019 11:33:04 +0900
-Subject: [PATCH] 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    |   7 +-
- src/ibusobservedpath.c | 275 ++++++++++++++++++++++++++++++++++++-----
- src/ibusregistry.c     |   2 +-
- 3 files changed, 250 insertions(+), 34 deletions(-)
-
-diff --git a/src/ibuscomponent.c b/src/ibuscomponent.c
-index 9837f47c..bbff10fd 100644
---- a/src/ibuscomponent.c
-+++ b/src/ibuscomponent.c
-@@ -2,6 +2,7 @@
- /* vim:set et sts=4: */
- /* bus - The Input Bus
-  * Copyright (C) 2008-2010 Peng Huang <shawn.p.huang@gmail.com>
-+ * Copyright (C) 2019 Takao Fujiwara <takao.fujiwara1@gmail.com>
-  * Copyright (C) 2008-2019 Red Hat, Inc.
-  *
-  * This library is free software; you can redistribute it and/or
-@@ -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..bf7229b7 100644
---- a/src/ibusobservedpath.c
-+++ b/src/ibusobservedpath.c
-@@ -2,6 +2,7 @@
- /* vim:set et sts=4: */
- /* ibus - The Input IBus
-  * Copyright (C) 2008-2015 Peng Huang <shawn.p.huang@gmail.com>
-+ * Copyright (C) 2019 Takao Fujiwara <takao.fujiwara1@gmail.com>
-  * Copyright (C) 2008-2019 Red Hat, Inc.
-  *
-  * This library is free software; you can redistribute it and/or
-@@ -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..378388d9 100644
---- a/src/ibusregistry.c
-+++ b/src/ibusregistry.c
-@@ -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.21.0
-
-From bccf94d5ec1c5fc80d5aeac622f2ab8007d5a28a Mon Sep 17 00:00:00 2001
-From: fujiwarat <takao.fujiwara1@gmail.com>
-Date: Fri, 29 Nov 2019 20:28:49 +0900
-Subject: [PATCH] src/tests: RHEL codereview for ibus-desktop-testing-runner
-
----
- src/tests/ibus-desktop-testing-runner.in | 16 ++++++++++------
- 1 file changed, 10 insertions(+), 6 deletions(-)
-
-diff --git a/src/tests/ibus-desktop-testing-runner.in b/src/tests/ibus-desktop-testing-runner.in
-index 141e9b5b..72537cd4 100755
---- a/src/tests/ibus-desktop-testing-runner.in
-+++ b/src/tests/ibus-desktop-testing-runner.in
-@@ -28,6 +28,10 @@
- # # /root/ibus/tests/test-console.sh --tests ibus-compose \
- #   --builddir /root/ibus/src/tests --srcdir /root/ibus/src/tests
- 
-+# POSIX sh has no 'echo -e'
-+: ${ECHO:='/usr/bin/echo'}
-+
-+
- PROGNAME=`basename $0`
- VERSION=0.1
- DISPLAY=:99.0
-@@ -54,15 +58,15 @@ print_log()
-             shift
-         fi
-         NO_ESCAPE=`echo $@ | sed -e 's/\\\033\\[0;3.m//g' -e 's/\\\033\\[0m//g'`
--        echo $NO_ESCAPE >> $RESULT_LOG
-+        $ECHO $NO_ESCAPE >> $RESULT_LOG
-     else
--        echo $@
-+        $ECHO $@
-     fi
- }
- 
- usage()
- {
--    echo -e \
-+    $ECHO -e \
- "This test runs /usr/bin/ibus-daemon after install ibus\n"                     \
- "$PROGNAME [OPTIONS…]\n"                                                       \
- "\n"                                                                           \
-@@ -92,7 +96,7 @@ parse_args()
-     while [ 1 ] ; do
-         case "$1" in
-         -h | --help )        usage; exit 0;;
--        -v | --version )     echo -e "$VERSION"; exit 0;;
-+        -v | --version )     $ECHO -e "$VERSION"; exit 0;;
-         -b | --builddir )    BUILDDIR="$2"; shift 2;;
-         -s | --srcdir )      SRCDIR="$2"; shift 2;;
-         -c | --no-graphics ) HAVE_GRAPHICS=0; shift;;
-@@ -121,7 +125,7 @@ init_desktop()
-     fi
-     if [ "$TEST_LOG" = "" ] ; then
-         print_log -e "${RED}FAIL${NC}: ${RED}ERROR${NC}: a log file is required to get return value with 'read' command"
--        exit -1
-+        exit 255
-     elif [ -f $TEST_LOG ] ; then
-         rm $TEST_LOG
-     fi
-@@ -291,7 +295,7 @@ EOF
-     done
-     child_pass=`grep '^PASS:' $TEST_LOG | wc -l`
-     child_fail=`grep '^FAIL:' $TEST_LOG | wc -l`
--    if [ $child_pass -ne 0 -o $child_fail -ne 0 ] ; then
-+    if [ $child_pass -ne 0 ] || [ $child_fail -ne 0 ] ; then
-         pass=$child_pass
-         if [ $child_fail -ne 0 ] ; then
-             fail=`expr $child_fail / 2`
--- 
-2.21.0
-
-From d50627f0b7a000ee13ea6dcc02a4162be1fa853d Mon Sep 17 00:00:00 2001
-From: fujiwarat <takao.fujiwara1@gmail.com>
-Date: Tue, 3 Dec 2019 21:42:49 +0900
-Subject: [PATCH] src/tests: RHEL codereview #2 for ibus-desktop-testing-runner
-
----
- src/tests/ibus-compose-locales.in        | 21 +++++++--------
- src/tests/ibus-desktop-testing-runner.in | 33 ++++++++++++------------
- 2 files changed, 27 insertions(+), 27 deletions(-)
-
-diff --git a/src/tests/ibus-compose-locales.in b/src/tests/ibus-compose-locales.in
-index f650b584..b36165fe 100755
---- a/src/tests/ibus-compose-locales.in
-+++ b/src/tests/ibus-compose-locales.in
-@@ -7,27 +7,26 @@ BUILDDIR=`dirname $0`
- export IBUS_COMPOSE_CACHE_DIR=$PWD
- 
- retval=0
--# Let for-loop notice '\n' as a delimiter
--IFS=$'\n'
--for var in `cat $SRCDIR/ibus-compose.env`
-+# Deleted for var in `cat *.env` because IFS=$'\n' is not supported in POSIX sh
-+while read var
- do
--    # Revert IFS to recognize env a=foo b=foo
--    IFS=' '
-     IS_COMMENT=`echo "$var" | grep "^#"`
-     if [ "x$IS_COMMENT" != x ] ; then
-         continue
-     fi
--    echo "# Starting $var $BUILDDIR/ibus-compose $SRCDIR $@"
--    env $var $BUILDDIR/ibus-compose $SRCDIR $@
-+    # Use $* instead of $@ not to mix strings and integers
-+    echo "# Starting $var $BUILDDIR/ibus-compose $SRCDIR $*"
-+    # Need to enclose $@ with double quotes not to split the array.
-+    env $var $BUILDDIR/ibus-compose $SRCDIR "$@"
-     retval=`expr $retval + $?`
--    echo "# Finished $var $BUILDDIR/ibus-compose $SRCDIR $@ with $retval"
-+    echo "# Finished $var $BUILDDIR/ibus-compose $SRCDIR $* with $retval"
- 
-     CACHE_FILES=`ls *.cache`
-     if [ x"$CACHE_FILES" != x ] ; then
-         echo "Clean $CACHE_FILES"
-         rm $CACHE_FILES
-     fi
--    IFS=$'\n'
--done
--IFS=' '
-+done << EOF_ENVS
-+`cat $SRCDIR/ibus-compose.env`
-+EOF_ENVS
- exit $retval
-diff --git a/src/tests/ibus-desktop-testing-runner.in b/src/tests/ibus-desktop-testing-runner.in
-index 72537cd4..981941d5 100755
---- a/src/tests/ibus-desktop-testing-runner.in
-+++ b/src/tests/ibus-desktop-testing-runner.in
-@@ -30,6 +30,8 @@
- 
- # POSIX sh has no 'echo -e'
- : ${ECHO:='/usr/bin/echo'}
-+# POSIX sh has $UID
-+: ${UID:='`id -u`'}
- 
- 
- PROGNAME=`basename $0`
-@@ -57,10 +59,10 @@ print_log()
-         if [ x"$1" = x'-e' ] ; then
-             shift
-         fi
--        NO_ESCAPE=`echo $@ | sed -e 's/\\\033\\[0;3.m//g' -e 's/\\\033\\[0m//g'`
-+        NO_ESCAPE=`echo "$@" | sed -e 's/\\\033\\[0;3.m//g' -e 's/\\\033\\[0m//g'`
-         $ECHO $NO_ESCAPE >> $RESULT_LOG
-     else
--        $ECHO $@
-+        $ECHO "$@"
-     fi
- }
- 
-@@ -231,9 +233,9 @@ run_direct_test_cases()
-         if test x"$ENVS" = x ; then
-             $BUILDDIR/$tst $SRCDIR 2>>$TEST_LOG 1>>$TEST_LOG
-             retval=$?
--            read pass fail << EOF
-+            read pass fail << EOF_COUNT
-             `count_case_result $retval $pass $fail`
--EOF
-+EOF_COUNT
-             echo_case_result $retval $tst
-             CACHE_FILES=`ls *.cache`
-             if [ x"$CACHE_FILES" != x ] ; then
-@@ -242,11 +244,9 @@ EOF
-             fi
-         else
-             i=1
--            # Let for-loop notice '\n' as a delimiter
--            IFS=$'\n'
--            for e in $ENVS; do
--                # Revert IFS to recognize env a=foo b=foo
--                IFS=' '
-+            # Deleted for var in "$ENVS" because IFS=$'\n' is not supported
-+            # in POSIX sh
-+            while read e ; do
-                 first=`echo "$e" | grep '^#'`
-                 if test x"$first" = x"#" ; then
-                     continue
-@@ -255,9 +255,9 @@ EOF
-                 env $e $BUILDDIR/$tst $SRCDIR 2>>$TEST_LOG 1>>$TEST_LOG
-                 retval=$?
-                 echo "# Finished $e $BUILDDIR/$tst $SRCDIR with $retval" >>$TEST_LOG
--                read pass fail << EOF
-+                read pass fail << EOF_COUNT
-                 `count_case_result $retval $pass $fail`
--EOF
-+EOF_COUNT
-                 echo_case_result $retval $tst $e
-                 CACHE_FILES=`ls *.cache`
-                 if [ x"$CACHE_FILES" != x ] ; then
-@@ -265,9 +265,9 @@ EOF
-                     rm $CACHE_FILES
-                 fi
-                 i=`expr $i + 1`
--                IFS=$'\n'
--            done
--            IFS=' '
-+            done << EOF_ENVS
-+            `echo "$ENVS"`
-+EOF_ENVS
-         fi
-     done
-     echo $pass $fail
-@@ -357,7 +357,7 @@ finit()
- 
- main()
- {
--    parse_args $@
-+    parse_args "$@"
-     init_desktop
-     run_dbus_daemon 2>>$TEST_LOG 1>>$TEST_LOG
-     run_desktop 2>>$TEST_LOG 1>>$TEST_LOG
-@@ -365,4 +365,5 @@ main()
-     finit
- }
- 
--main $@
-+# Need to enclose $@ with double quotes not to split the array.
-+main "$@"
--- 
-2.21.0
-
-From 25d11f5cfd4c39e53be11a1348da29a61593cc4c Mon Sep 17 00:00:00 2001
-From: fujiwarat <takao.fujiwara1@gmail.com>
-Date: Wed, 11 Dec 2019 16:28:22 +0900
-Subject: [PATCH] client/gtk2: Fix to set use_button_press_event after signals
- are connected
-
-_ibus_context_update_preedit_text_cb() can be called with reset signals
-before ibus_im_context_set_client_window() is called. Then
-use_button_press_event needs to be set only when the signals are connected.
-
-BUG=https://github.com/ibus/ibus/issues/1980
----
- client/gtk2/ibusimcontext.c | 12 ++++++++----
- 1 file changed, 8 insertions(+), 4 deletions(-)
-
-diff --git a/client/gtk2/ibusimcontext.c b/client/gtk2/ibusimcontext.c
-index 5e3457ba..ac5de809 100644
---- a/client/gtk2/ibusimcontext.c
-+++ b/client/gtk2/ibusimcontext.c
-@@ -1074,8 +1074,9 @@ ibus_im_context_reset (GtkIMContext *context)
-         /* Commented out ibus_im_context_clear_preedit_text().
-          * Hangul needs to receive the reset callback with button press
-          * but other IMEs should avoid to receive the reset callback
--         * so the signal would need to be customized with GtkSetting.
--         * IBus uses button-press-event instead.
-+         * by themselves.
-+         * IBus uses button-press-event instead until GTK is fixed.
-+         * https://gitlab.gnome.org/GNOME/gtk/issues/1534
-          */
-         ibus_input_context_reset (ibusimcontext->ibuscontext);
-     }
-@@ -1657,10 +1658,13 @@ _ibus_context_update_preedit_text_cb (IBusInputContext  *ibuscontext,
-     if (!ibusimcontext->use_button_press_event &&
-         mode == IBUS_ENGINE_PREEDIT_COMMIT) {
- #if !GTK_CHECK_VERSION (3, 93, 0)
--        if (ibusimcontext->client_window)
-+        if (ibusimcontext->client_window) {
-             _connect_button_press_event (ibusimcontext, TRUE);
--#endif
-+            ibusimcontext->use_button_press_event = TRUE;
-+        }
-+#else
-         ibusimcontext->use_button_press_event = TRUE;
-+#endif
-     }
- 
-     str = text->text;
--- 
-2.21.0
-
-From c662a02bf3b50914c697af12fc152ee97e2df961 Mon Sep 17 00:00:00 2001
-From: fujiwarat <takao.fujiwara1@gmail.com>
-Date: Wed, 25 Dec 2019 17:30:56 +0900
-Subject: [PATCH] client/gtk2: Fix to connect button-press-event signal
-
-IBus clients do not connect button-press-event in some conditions
-and it will be fixed.
-
-BUG=https://github.com/ibus/ibus/issues/1980
----
- client/gtk2/ibusimcontext.c | 21 ++++++++++++---------
- 1 file changed, 12 insertions(+), 9 deletions(-)
-
-diff --git a/client/gtk2/ibusimcontext.c b/client/gtk2/ibusimcontext.c
-index ac5de809..30585403 100644
---- a/client/gtk2/ibusimcontext.c
-+++ b/client/gtk2/ibusimcontext.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) 2015-2018 Takao Fujiwara <takao.fujiwara1@gmail.com>
-- * Copyright (C) 2008-2018 Red Hat, Inc.
-+ * Copyright (C) 2015-2019 Takao Fujiwara <takao.fujiwara1@gmail.com>
-+ * Copyright (C) 2008-2019 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
-@@ -73,7 +73,7 @@ struct _IBusIMContext {
-     GCancellable    *cancellable;
-     GQueue          *events_queue;
- 
--    gboolean use_button_press_event;
-+    gboolean         use_button_press_event;
- };
- 
- struct _IBusIMContextClass {
-@@ -1125,6 +1125,10 @@ ibus_im_context_get_preedit_string (GtkIMContext   *context,
- 
- 
- #if !GTK_CHECK_VERSION (3, 93, 0)
-+/* Use the button-press-event signal until GtkIMContext always emits the reset
-+ * signal.
-+ * https://gitlab.gnome.org/GNOME/gtk/merge_requests/460
-+ */
- static gboolean
- ibus_im_context_button_press_event_cb (GtkWidget      *widget,
-                                        GdkEventButton *event,
-@@ -1157,11 +1161,13 @@ _connect_button_press_event (IBusIMContext *ibusimcontext,
-                     "button-press-event",
-                     G_CALLBACK (ibus_im_context_button_press_event_cb),
-                     ibusimcontext);
-+            ibusimcontext->use_button_press_event = TRUE;
-         } else {
-             g_signal_handlers_disconnect_by_func (
-                     widget,
-                     G_CALLBACK (ibus_im_context_button_press_event_cb),
-                     ibusimcontext);
-+            ibusimcontext->use_button_press_event = FALSE;
-         }
-     }
- }
-@@ -1188,7 +1194,7 @@ ibus_im_context_set_client_window (GtkIMContext *context, GdkWindow *client)
-     if (client != NULL) {
-         ibusimcontext->client_window = g_object_ref (client);
- #if !GTK_CHECK_VERSION (3, 93, 0)
--        if (ibusimcontext->use_button_press_event)
-+        if (!ibusimcontext->use_button_press_event)
-             _connect_button_press_event (ibusimcontext, TRUE);
- #endif
-     }
-@@ -1655,17 +1661,14 @@ _ibus_context_update_preedit_text_cb (IBusInputContext  *ibuscontext,
-         ibusimcontext->preedit_attrs = NULL;
-     }
- 
-+#if !GTK_CHECK_VERSION (3, 93, 0)
-     if (!ibusimcontext->use_button_press_event &&
-         mode == IBUS_ENGINE_PREEDIT_COMMIT) {
--#if !GTK_CHECK_VERSION (3, 93, 0)
-         if (ibusimcontext->client_window) {
-             _connect_button_press_event (ibusimcontext, TRUE);
--            ibusimcontext->use_button_press_event = TRUE;
-         }
--#else
--        ibusimcontext->use_button_press_event = TRUE;
--#endif
-     }
-+#endif
- 
-     str = text->text;
-     ibusimcontext->preedit_string = g_strdup (str);
--- 
-2.21.0
-
-From ecc3465a585448486b2ce68bcefc11d6aebae755 Mon Sep 17 00:00:00 2001
-From: fujiwarat <takao.fujiwara1@gmail.com>
-Date: Thu, 23 Jan 2020 16:13:05 +0900
-Subject: [PATCH 1/5] client/gtk2: Fix some format sentences
-
----
- client/gtk2/ibusimcontext.c | 23 +++++++++++------------
- 1 file changed, 11 insertions(+), 12 deletions(-)
-
-diff --git a/client/gtk2/ibusimcontext.c b/client/gtk2/ibusimcontext.c
-index 30585403..50290c55 100644
---- a/client/gtk2/ibusimcontext.c
-+++ b/client/gtk2/ibusimcontext.c
-@@ -73,7 +73,9 @@ struct _IBusIMContext {
-     GCancellable    *cancellable;
-     GQueue          *events_queue;
- 
-+#if !GTK_CHECK_VERSION (3, 93, 0)
-     gboolean         use_button_press_event;
-+#endif
- };
- 
- struct _IBusIMContextClass {
-@@ -137,12 +139,12 @@ static void     ibus_im_context_set_surrounding
- 
- /* static methods*/
- static void     _ibus_context_update_preedit_text_cb
--                                           (IBusInputContext   *ibuscontext,
--                                            IBusText           *text,
--                                            gint                cursor_pos,
--                                            gboolean            visible,
--                                            guint               mode,
--                                            IBusIMContext      *ibusimcontext);
-+                                            (IBusInputContext   *ibuscontext,
-+                                             IBusText           *text,
-+                                             gint                cursor_pos,
-+                                             gboolean            visible,
-+                                             guint               mode,
-+                                             IBusIMContext      *ibusimcontext);
- static void     _create_input_context       (IBusIMContext      *context);
- static gboolean _set_cursor_location_internal
-                                             (IBusIMContext      *context);
-@@ -172,7 +174,6 @@ static void     _create_fake_input_context  (void);
- static gboolean _set_content_type           (IBusIMContext      *context);
- 
- 
--
- static GType                _ibus_type_im_context = 0;
- static GtkIMContextClass    *parent_class = NULL;
- 
-@@ -313,7 +314,6 @@ _process_key_event_done (GObject      *object,
- {
-     IBusInputContext *context = (IBusInputContext *)object;
-     GdkEventKey *event = (GdkEventKey *) user_data;
--
-     GError *error = NULL;
-     gboolean retval = ibus_input_context_process_key_event_async_finish (
-             context,
-@@ -362,12 +362,10 @@ _process_key_event (IBusInputContext *context,
-         retval = TRUE;
-     }
- 
--    if (retval) {
-+    if (retval)
-         event->state |= IBUS_HANDLED_MASK;
--    }
--    else {
-+    else
-         event->state |= IBUS_IGNORED_MASK;
--    }
- 
-     return retval;
- }
-@@ -1508,6 +1506,7 @@ _key_is_modifier (guint keyval)
-         return FALSE;
-     }
- }
-+
- /* Copy from gdk */
- static GdkEventKey *
- _create_gdk_event (IBusIMContext *ibusimcontext,
--- 
-2.24.1
-
-From afc0a89c74950351c32df3d60abb343a0dbc06cc Mon Sep 17 00:00:00 2001
-From: Alex Henrie <alexhenrie24@gmail.com>
-Date: Fri, 24 Jan 2020 15:37:01 +0900
-Subject: [PATCH 2/5] Handle small final sigma in ibus_keyval_convert_case
-
-lowercase: GREEK SMALL LETTER FINAL SIGMA (U+03C2)
-uppercase: GREEK CAPITAL LETTER SIGMA (U+03A3)
-
-This mapping was correct in UCSConvertCase, but the "legacy" mapping
-must also be correct for Caps Lock to work with the final sigma key.
-
-https://gitlab.freedesktop.org/xorg/lib/libx11/commit/7f46a38139
-
-BUG=https://github.com/ibus/ibus/pull/2176
----
- src/ibuskeynames.c | 5 +++--
- 1 file changed, 3 insertions(+), 2 deletions(-)
-
-diff --git a/src/ibuskeynames.c b/src/ibuskeynames.c
-index 08505598..544c6ade 100644
---- a/src/ibuskeynames.c
-+++ b/src/ibuskeynames.c
-@@ -331,8 +331,9 @@ ibus_keyval_convert_case (guint symbol,
-         xupper -= (IBUS_KEY_Greek_alphaaccent - IBUS_KEY_Greek_ALPHAaccent);
-       else if (symbol >= IBUS_KEY_Greek_ALPHA && symbol <= IBUS_KEY_Greek_OMEGA)
-         xlower += (IBUS_KEY_Greek_alpha - IBUS_KEY_Greek_ALPHA);
--      else if (symbol >= IBUS_KEY_Greek_alpha && symbol <= IBUS_KEY_Greek_omega &&
--               symbol != IBUS_KEY_Greek_finalsmallsigma)
-+      else if (symbol == IBUS_KEY_Greek_finalsmallsigma)
-+        xupper = IBUS_KEY_Greek_SIGMA;
-+      else if (symbol >= IBUS_KEY_Greek_alpha && symbol <= IBUS_KEY_Greek_omega)
-         xupper -= (IBUS_KEY_Greek_alpha - IBUS_KEY_Greek_ALPHA);
-       break;
-     }
--- 
-2.24.1
-
-From 74863851e83972e86a5bdb3da3d99784fc8d4955 Mon Sep 17 00:00:00 2001
-From: fujiwarat <takao.fujiwara1@gmail.com>
-Date: Tue, 28 Jan 2020 18:46:13 +0900
-Subject: [PATCH 3/5] src/tests: Increase sleep to 3 waiting for IBusConfig
-
-Sleep 1 would be too short for ibus-daemon which could run all components.
-ibus-config test requires the running IBusConfig and the test could fail
-in some slow systems.
-Sleep time will be increased to 3 to run all components.
-
-BUG=https://github.com/ibus/ibus/issues/2170
----
- src/tests/ibus-config.c                  | 4 ++++
- src/tests/ibus-desktop-testing-runner.in | 2 +-
- src/tests/runtest                        | 2 +-
- 3 files changed, 6 insertions(+), 2 deletions(-)
-
-diff --git a/src/tests/ibus-config.c b/src/tests/ibus-config.c
-index 5e845f10..0d9812a3 100644
---- a/src/tests/ibus-config.c
-+++ b/src/tests/ibus-config.c
-@@ -16,6 +16,10 @@ finish_create_config_async_success (GObject      *source_object,
-     IBusConfig *config =
-           ibus_config_new_async_finish (res, &error);
- 
-+    if (error) {
-+        g_message ("Failed to generate IBusConfig: %s", error->message);
-+        g_error_free (error);
-+    }
-     g_assert (IBUS_IS_CONFIG (config));
- 
-     /* Since we reuse single D-Bus connection, we need to remove the
-diff --git a/src/tests/ibus-desktop-testing-runner.in b/src/tests/ibus-desktop-testing-runner.in
-index 981941d5..0d9a847c 100755
---- a/src/tests/ibus-desktop-testing-runner.in
-+++ b/src/tests/ibus-desktop-testing-runner.in
-@@ -190,7 +190,7 @@ run_desktop()
-     HAS_GNOME=`echo $DESKTOP_COMMAND | grep gnome-session`
-     if [ x"$HAS_GNOME" = x ] ; then
-         ibus-daemon --daemonize --verbose
--        sleep 1
-+        sleep 3
-     fi
- }
- 
-diff --git a/src/tests/runtest b/src/tests/runtest
-index ed38992f..a6e4194b 100755
---- a/src/tests/runtest
-+++ b/src/tests/runtest
-@@ -180,7 +180,7 @@ run_test_case()
-         fi
- 
-         # Wait until all necessary components are up.
--        sleep 1
-+        sleep 3
- 
-         export GTK_IM_MODULE=ibus
-     fi
--- 
-2.24.1
-
-From cd4fef5a3290869fc1c36392f5d404fa09932926 Mon Sep 17 00:00:00 2001
-From: fujiwarat <takao.fujiwara1@gmail.com>
-Date: Fri, 31 Jan 2020 15:35:02 +0900
-Subject: [PATCH 4/5] src: Fix SEGV to access NULL GError when compose length
- is zero
-
-BUG=rhbz#1788754
----
- src/ibuscomposetable.c | 6 ++++--
- 1 file changed, 4 insertions(+), 2 deletions(-)
-
-diff --git a/src/ibuscomposetable.c b/src/ibuscomposetable.c
-index e4e3a7cd..3f439134 100644
---- a/src/ibuscomposetable.c
-+++ b/src/ibuscomposetable.c
-@@ -127,12 +127,14 @@ parse_compose_value (IBusComposeData  *compose_data,
-         compose_data->values[0] = g_ascii_strtoll(p, NULL, 8);
-         compose_data->values[1] = 0;
-     } else {
--        if (!(uchars = g_utf8_to_ucs4 (ustr, -1, NULL, NULL, &error)) ||
--            !uchars[0]) {
-+        if (!(uchars = g_utf8_to_ucs4 (ustr, -1, NULL, NULL, &error))) {
-             g_warning ("Invalid Unicode: %s: %s in %s:",
-                        error->message, ustr, line);
-             g_error_free (error);
-             goto fail;
-+        } else if (!uchars[0]) {
-+            g_warning ("Invalid Unicode: \"\" in %s:", line);
-+            goto fail;
-         }
- 
-         for (up = uchars; *up; up++) {
--- 
-2.24.1
-
-From a1705ad7e5f90cf8d87caf32d7b7acc7125e6778 Mon Sep 17 00:00:00 2001
-From: fujiwarat <takao.fujiwara1@gmail.com>
-Date: Thu, 13 Feb 2020 16:49:12 +0900
-Subject: [PATCH 5/5] bus: Fix recursive mkdir is failed in
- /var/lib/gdm/.cache/ibus
-
-If the parent directory (/var/lib/gdm/.cache) is not created,
-mkdir childdir (/var/lib/gdm/.cache/ibus) is failed by the parentdir
-with mode_t = 0.
-
-BUG=https://github.com/ibus/ibus/issues/2177
----
- bus/server.c | 12 ++++--------
- 1 file changed, 4 insertions(+), 8 deletions(-)
-
-diff --git a/bus/server.c b/bus/server.c
-index a7554a88..6c9e2c02 100644
---- a/bus/server.c
-+++ b/bus/server.c
-@@ -277,17 +277,13 @@ bus_server_init (void)
-                  socket_address);
-     }
-     if (!g_file_test (unix_dir, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR)) {
--        /* Require mkdir for BSD system. */
--        if (g_mkdir_with_parents (unix_dir, 0) != 0) {
--            g_error ("mkdir is failed in: %s: %s",
--                     unix_dir, g_strerror (errno));
--        }
--        /* The mode 0700 can eliminate malicious users change the mode.
-+        /* Require mkdir for BSD system.
-+         * The mode 0700 can eliminate malicious users change the mode.
-          * `chmod` runs for the last directory only not to change the modes
-          * of the parent directories. E.g. "/tmp/ibus".
-          */
--        if (g_chmod (unix_dir, 0700) != 0) {
--            g_error ("chmod(700) is failed in: %s: %s",
-+        if (g_mkdir_with_parents (unix_dir, 0700) != 0) {
-+            g_error ("mkdir is failed in: %s: %s",
-                      unix_dir, g_strerror (errno));
-         }
-     }
--- 
-2.24.1
-

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

Thread overview: 16+ 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 patches Takao Fujiwara
2026-05-31  2:09 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:08 Takao Fujiwara
2026-05-31  2:08 Takao Fujiwara
2026-05-31  2:08 Takao Fujiwara
2026-05-31  2:08 [rpms/ibus] autotool: Delete Upstreamed patches Takao Fujiwara
2026-05-31  2:08 [rpms/ibus] autotool: Delete upstreamed patches Takao Fujiwara
2026-05-31  2:08 Takao Fujiwara
2026-05-31  2:07 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=178019324067.1.4268397372429861323.rpms-ibus-bd586f3b2dab@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