Compare commits

...

No commits in common. "c8" and "c9" have entirely different histories.
c8 ... c9

14 changed files with 837 additions and 6026 deletions

3
.gitignore vendored
View File

@ -1,2 +1 @@
SOURCES/ibus-1.5.19.tar.gz
SOURCES/ibus-po-1.5.19-20210706.tar.gz
SOURCES/ibus-1.5.25.tar.gz

View File

@ -1,2 +1 @@
fdda025d81247e40ad7acf953c2a0a606d18e965 SOURCES/ibus-1.5.19.tar.gz
236f5dc3c072d0587e107ae75084454c791bbf73 SOURCES/ibus-po-1.5.19-20210706.tar.gz
4058f9b11781f9d33927c2464da6ebcaa5c2a83a SOURCES/ibus-1.5.25.tar.gz

View File

@ -1,108 +1,119 @@
From 865b204f1c06b782cf7b4a479b358e76f4b3dfee Mon Sep 17 00:00:00 2001
From 41c325dfb32269c9aadfeedb4df44656aac4d883 Mon Sep 17 00:00:00 2001
From: fujiwarat <takao.fujiwara1@gmail.com>
Date: Tue, 17 Jul 2018 13:39:30 +0900
Subject: [PATCH] bus: Fix SEGV in bus_panel_proxy_focus_in()
Date: Fri, 20 Nov 2020 09:53:54 +0900
Subject: [PATCH] Fix SEGV in bus_panel_proxy_focus_in()
rhbz#1350291 SEGV in BUS_IS_CONNECTION(skip_connection) in
bus_dbus_impl_dispatch_message_by_rule()
check if dbus_connection is closed in bus_dbus_impl_connection_filter_cb().
rhbz#1767976 SEGV in assert(connection != NULL) in
bus_dbus_impl_connection_filter_cb()
call bus_connection_set_filter() in bus_dbus_impl_destroy().
rhbz#1601577 rhbz#1797726 SEGV in ibus_engine_desc_get_layout() in
bus_engine_proxy_new_internal()
WIP: Added a GError to get the error message to check why the SEGV happened.
rhbz#1663528 SEGV in g_mutex_clear() in bus_dbus_impl_destroy()
If the mutex is not unlocked, g_mutex_clear() causes assert.
rhbz#1767691 SEGV in client/x11/main.c:_sighandler().
Do not call atexit functions in _sighandler().
rhbz#1795499 SEGV in ibus_bus_get_bus_address() because of no _bus->priv.
_changed_cb() should not be called after ibus_bus_destroy() is called.
rhbz#1771238 SEGV in assert(m_loop == null) in switcher.vala.
Grabbing keyboard could be failed and switcher received the keyboard
events and m_loop was not released.
rhbz#1797120 SEGV in assert(bus.is_connected()) in panel_binding_construct()
Check m_ibus in extension.vala:bus_name_acquired_cb()
BUG=rhbz#1349148
BUG=rhbz#1385349
BUG=rhbz#1350291
BUG=rhbz#1406699
BUG=rhbz#1432252
BUG=rhbz#1601577
BUG=rhbz#1663528
BUG=rhbz#1767691
BUG=rhbz#1795499
BUG=rhbz#1771238
BUG=rhbz#1767976
BUG=rhbz#1797120
---
bus/dbusimpl.c | 38 ++++++++++++++++++++++++++++++++------
bus/engineproxy.c | 5 ++++-
bus/ibusimpl.c | 21 ++++++++++++++++++---
3 files changed, 54 insertions(+), 10 deletions(-)
bus/dbusimpl.c | 47 ++++++++++++++++++++++++---
bus/engineproxy.c | 51 ++++++++++++++++++++++-------
client/x11/main.c | 8 ++++-
src/ibusbus.c | 5 +++
ui/gtk3/extension.vala | 4 +++
ui/gtk3/switcher.vala | 73 +++++++++++++++++++++++++-----------------
6 files changed, 141 insertions(+), 47 deletions(-)
diff --git a/bus/dbusimpl.c b/bus/dbusimpl.c
index b54ef817..e4dd8683 100644
index 59787a80..af2fbde2 100644
--- a/bus/dbusimpl.c
+++ b/bus/dbusimpl.c
@@ -2,7 +2,8 @@
/* vim:set et sts=4: */
/* ibus - The Input Bus
* Copyright (C) 2008-2013 Peng Huang <shawn.p.huang@gmail.com>
- * Copyright (C) 2008-2013 Red Hat, Inc.
+ * Copyright (C) 2015-2017 Takao Fujiwara <takao.fujiwara1@gmail.com>
+ * Copyright (C) 2008-2017 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -344,6 +345,8 @@ bus_name_service_set_primary_owner (BusNameService *service,
BusConnectionOwner *owner,
BusDBusImpl *dbus)
@@ -610,6 +610,7 @@ static void
bus_dbus_impl_destroy (BusDBusImpl *dbus)
{
+ gboolean has_old_owner = FALSE;
+
g_assert (service != NULL);
g_assert (owner != NULL);
g_assert (dbus != NULL);
@@ -351,6 +354,13 @@ bus_name_service_set_primary_owner (BusNameService *service,
BusConnectionOwner *old = service->owners != NULL ?
(BusConnectionOwner *)service->owners->data : NULL;
GList *p;
+ int i;
+ /* rhbz#1432252 If bus_connection_get_unique_name() == NULL,
+ * "Hello" method is not received yet.
+ */
+ if (old != NULL && bus_connection_get_unique_name (old->conn) != NULL) {
+ has_old_owner = TRUE;
for (p = dbus->objects; p != NULL; p = p->next) {
IBusService *object = (IBusService *) p->data;
@@ -633,6 +634,10 @@ bus_dbus_impl_destroy (BusDBusImpl *dbus)
for (p = dbus->connections; p != NULL; p = p->next) {
BusConnection *connection = BUS_CONNECTION (p->data);
+ /* rhbz#1767976 Fix connection == NULL in
+ * bus_dbus_impl_connection_filter_cb()
+ */
+ bus_connection_set_filter (connection, NULL, NULL, NULL);
g_signal_handlers_disconnect_by_func (connection,
bus_dbus_impl_connection_destroy_cb, dbus);
ibus_object_destroy (IBUS_OBJECT (connection));
@@ -647,12 +652,39 @@ bus_dbus_impl_destroy (BusDBusImpl *dbus)
dbus->unique_names = NULL;
dbus->names = NULL;
+ for (i = 0; g_idle_remove_by_data (dbus); i++) {
+ if (i > 1000) {
+ g_warning ("Too many idle threads were generated by " \
+ "bus_dbus_impl_forward_message_idle_cb and " \
+ "bus_dbus_impl_dispatch_message_by_rule_idle_cb");
+ break;
+ }
+ }
g_list_free_full (dbus->start_service_calls,
(GDestroyNotify) bus_method_call_free);
dbus->start_service_calls = NULL;
- g_mutex_clear (&dbus->dispatch_lock);
- g_mutex_clear (&dbus->forward_lock);
+ /* rhbz#1663528 Call g_mutex_trylock() before g_mutex_clear()
+ * because if the mutex is not unlocked, g_mutex_clear() causes assert.
+ */
+#define BUS_DBUS_MUTEX_SAFE_CLEAR(mtex) { \
+ int count = 0; \
+ while (!g_mutex_trylock ((mtex))) { \
+ g_usleep (1); \
+ if (count > 60) { \
+ g_warning (#mtex " is dead lock"); \
+ break; \
+ } \
+ ++count; \
+ } \
+ g_mutex_unlock ((mtex)); \
+ g_mutex_clear ((mtex)); \
+}
+
if (old != NULL) {
g_signal_emit (dbus,
dbus_signals[NAME_LOST],
@@ -370,7 +380,8 @@ bus_name_service_set_primary_owner (BusNameService *service,
0,
owner->conn,
service->name,
- old != NULL ? bus_connection_get_unique_name (old->conn) : "",
+ has_old_owner ? bus_connection_get_unique_name (old->conn) :
+ "",
bus_connection_get_unique_name (owner->conn));
+ BUS_DBUS_MUTEX_SAFE_CLEAR (&dbus->dispatch_lock);
+ BUS_DBUS_MUTEX_SAFE_CLEAR (&dbus->forward_lock);
+
+#undef BUS_DBUS_MUTEX_SAFE_CLEAR
if (old != NULL && old->do_not_queue != 0) {
@@ -427,6 +438,7 @@ bus_name_service_remove_owner (BusNameService *service,
BusDBusImpl *dbus)
{
GSList *owners;
+ gboolean has_new_owner = FALSE;
g_assert (service != NULL);
g_assert (owner != NULL);
@@ -439,6 +451,13 @@ bus_name_service_remove_owner (BusNameService *service,
BusConnectionOwner *_new = NULL;
if (owners->next != NULL) {
_new = (BusConnectionOwner *)owners->next->data;
+ /* rhbz#1406699 If bus_connection_get_unique_name() == NULL,
+ * "Hello" method is not received yet.
+ */
+ if (_new != NULL &&
+ bus_connection_get_unique_name (_new->conn) != NULL) {
+ has_new_owner = TRUE;
+ }
}
if (dbus != NULL) {
@@ -447,7 +466,7 @@ bus_name_service_remove_owner (BusNameService *service,
0,
owner->conn,
service->name);
- if (_new != NULL) {
+ if (has_new_owner) {
g_signal_emit (dbus,
dbus_signals[NAME_ACQUIRED],
0,
@@ -460,7 +479,7 @@ bus_name_service_remove_owner (BusNameService *service,
_new != NULL ? _new->conn : NULL,
service->name,
bus_connection_get_unique_name (owner->conn),
- _new != NULL ? bus_connection_get_unique_name (_new->conn) : "");
+ has_new_owner ? bus_connection_get_unique_name (_new->conn) : "");
}
}
@@ -1464,13 +1483,20 @@ bus_dbus_impl_connection_filter_cb (GDBusConnection *dbus_connection,
/* FIXME destruct _lock and _queue members. */
IBUS_OBJECT_CLASS(bus_dbus_impl_parent_class)->destroy ((IBusObject *) dbus);
@@ -1483,13 +1515,20 @@ bus_dbus_impl_connection_filter_cb (GDBusConnection *dbus_connection,
gboolean incoming,
gpointer user_data)
{
@ -126,89 +137,267 @@ index b54ef817..e4dd8683 100644
if (incoming) {
/* is incoming message */
diff --git a/bus/engineproxy.c b/bus/engineproxy.c
index 2d98995c..d661673a 100644
index 2d98995c..bbbe5532 100644
--- a/bus/engineproxy.c
+++ b/bus/engineproxy.c
@@ -665,6 +665,7 @@ bus_engine_proxy_new_internal (const gchar *path,
@@ -660,20 +660,33 @@ bus_engine_proxy_g_signal (GDBusProxy *proxy,
g_return_if_reached ();
}
+#pragma GCC optimize ("O0")
static BusEngineProxy *
bus_engine_proxy_new_internal (const gchar *path,
IBusEngineDesc *desc,
GDBusConnection *connection)
- GDBusConnection *connection)
+ GDBusConnection *connection,
+ GError **error)
{
+ GError *error = NULL;
+ GDBusProxyFlags flags;
+ BusEngineProxy *engine;
+
g_assert (path);
g_assert (IBUS_IS_ENGINE_DESC (desc));
g_assert (G_IS_DBUS_CONNECTION (connection));
@@ -673,7 +674,7 @@ bus_engine_proxy_new_internal (const gchar *path,
BusEngineProxy *engine =
+ g_assert (error && *error == NULL);
- GDBusProxyFlags flags = G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START;
- BusEngineProxy *engine =
+ /* rhbz#1601577 engine == NULL if connection is closed. */
+ if (g_dbus_connection_is_closed (connection)) {
+ *error = g_error_new (G_DBUS_ERROR,
+ G_DBUS_ERROR_FAILED,
+ "Connection is closed.");
+ return NULL;
+ }
+ flags = G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START;
+ engine =
(BusEngineProxy *) g_initable_new (BUS_TYPE_ENGINE_PROXY,
NULL,
- NULL,
+ &error,
+ error,
"desc", desc,
"g-connection", connection,
"g-interface-name", IBUS_INTERFACE_ENGINE,
@@ -681,6 +682,8 @@ bus_engine_proxy_new_internal (const gchar *path,
@@ -681,12 +694,19 @@ bus_engine_proxy_new_internal (const gchar *path,
"g-default-timeout", g_gdbus_timeout,
"g-flags", flags,
NULL);
+ /* FIXME: rhbz#1601577 */
+ g_assert_no_error (error);
+ if (!engine) {
+ /* show abrt local variable */
+ gchar *message = g_strdup ((*error)->message);
+ g_error ("%s", message);
+ }
const gchar *layout = ibus_engine_desc_get_layout (desc);
if (layout != NULL && layout[0] != '\0') {
engine->keymap = ibus_keymap_get (layout);
diff --git a/bus/ibusimpl.c b/bus/ibusimpl.c
index ec1caea8..9ae3751b 100644
--- a/bus/ibusimpl.c
+++ b/bus/ibusimpl.c
@@ -484,13 +484,16 @@ _dbus_name_owner_changed_cb (BusDBusImpl *dbus,
else if (!g_strcmp0 (name, IBUS_SERVICE_PANEL_EXTENSION_EMOJI))
panel_type = PANEL_TYPE_EXTENSION_EMOJI;
- if (panel_type != PANEL_TYPE_NONE) {
+ do {
+ if (panel_type == PANEL_TYPE_NONE)
+ break;
if (g_strcmp0 (new_name, "") != 0) {
/* a Panel process is started. */
BusConnection *connection;
BusInputContext *context = NULL;
BusPanelProxy **panel = (panel_type == PANEL_TYPE_PANEL) ?
&ibus->panel : &ibus->emoji_extension;
+ GDBusConnection *dbus_connection = NULL;
if (*panel != NULL) {
ibus_proxy_destroy ((IBusProxy *)(*panel));
@@ -499,9 +502,21 @@ _dbus_name_owner_changed_cb (BusDBusImpl *dbus,
g_assert (*panel == NULL);
}
- connection = bus_dbus_impl_get_connection_by_name (BUS_DEFAULT_DBUS, new_name);
+ connection = bus_dbus_impl_get_connection_by_name (BUS_DEFAULT_DBUS,
+ new_name);
g_return_if_fail (connection != NULL);
+ dbus_connection = bus_connection_get_dbus_connection (connection);
+ /* rhbz#1349148 rhbz#1385349
+ * Avoid SEGV of BUS_IS_PANEL_PROXY (ibus->panel)
+ * This function is called during destroying the connection
+ * in this case? */
+ if (dbus_connection == NULL ||
+ g_dbus_connection_is_closed (dbus_connection)) {
+ new_name = "";
+ break;
+ }
+
*panel = bus_panel_proxy_new (connection, panel_type);
if (panel_type == PANEL_TYPE_EXTENSION_EMOJI)
ibus->enable_emoji_extension = FALSE;
@@ -555,7 +570,7 @@ _dbus_name_owner_changed_cb (BusDBusImpl *dbus,
}
}
}
- }
+ } while (0);
bus_ibus_impl_component_name_owner_changed (ibus, name, old_name, new_name);
}
return engine;
}
+#pragma GCC reset_options
typedef struct {
GTask *task;
@@ -748,23 +768,30 @@ create_engine_ready_cb (BusFactoryProxy *factory,
GAsyncResult *res,
EngineProxyNewData *data)
{
+ GError *error = NULL;
+ gchar *path;
+ BusEngineProxy *engine;
+
g_return_if_fail (data->task != NULL);
- GError *error = NULL;
- gchar *path = bus_factory_proxy_create_engine_finish (factory,
- res,
- &error);
+ path = bus_factory_proxy_create_engine_finish (factory, res, &error);
if (path == NULL) {
g_task_return_error (data->task, error);
engine_proxy_new_data_free (data);
return;
}
- BusEngineProxy *engine =
- bus_engine_proxy_new_internal (path,
- data->desc,
- g_dbus_proxy_get_connection ((GDBusProxy *)data->factory));
+ engine = bus_engine_proxy_new_internal (
+ path,
+ data->desc,
+ g_dbus_proxy_get_connection ((GDBusProxy *)data->factory),
+ &error);
g_free (path);
+ if (!engine) {
+ g_task_return_error (data->task, error);
+ engine_proxy_new_data_free (data);
+ return;
+ }
/* FIXME: set destroy callback ? */
g_task_return_pointer (data->task, engine, NULL);
diff --git a/client/x11/main.c b/client/x11/main.c
index c9ee174d..768b91f0 100644
--- a/client/x11/main.c
+++ b/client/x11/main.c
@@ -40,6 +40,7 @@
#include <iconv.h>
#include <signal.h>
#include <stdlib.h>
+#include <unistd.h>
#include <getopt.h>
@@ -1104,7 +1105,12 @@ _atexit_cb ()
static void
_sighandler (int sig)
{
- exit(EXIT_FAILURE);
+ /* rhbz#1767691 _sighandler() is called with SIGTERM
+ * and exit() causes SEGV during calling atexit functions.
+ * _atexit_cb() might be broken. _exit() does not call
+ * atexit functions.
+ */
+ _exit(EXIT_FAILURE);
}
static void
diff --git a/src/ibusbus.c b/src/ibusbus.c
index b7ffbb47..668c8a26 100644
--- a/src/ibusbus.c
+++ b/src/ibusbus.c
@@ -689,6 +689,11 @@ ibus_bus_destroy (IBusObject *object)
_bus = NULL;
if (bus->priv->monitor) {
+ /* rhbz#1795499 _changed_cb() causes SEGV because of no bus->priv
+ * after ibus_bus_destroy() is called.
+ */
+ g_signal_handlers_disconnect_by_func (bus->priv->monitor,
+ (GCallback) _changed_cb, bus);
g_object_unref (bus->priv->monitor);
bus->priv->monitor = NULL;
}
diff --git a/ui/gtk3/extension.vala b/ui/gtk3/extension.vala
index a6f2e8e6..b7a04081 100644
--- a/ui/gtk3/extension.vala
+++ b/ui/gtk3/extension.vala
@@ -73,6 +73,10 @@ class ExtensionGtk : Gtk.Application {
string signal_name,
Variant parameters) {
debug("signal_name = %s", signal_name);
+ /* rhbz#1797120 Fix assert(bus.is_connected()) in
+ * panel_binding_construct()
+ */
+ return_if_fail(m_bus.is_connected());
m_panel = new PanelBinding(m_bus, this);
m_panel.load_settings();
}
diff --git a/ui/gtk3/switcher.vala b/ui/gtk3/switcher.vala
index a4529c88..29a70dd5 100644
--- a/ui/gtk3/switcher.vala
+++ b/ui/gtk3/switcher.vala
@@ -140,8 +140,8 @@ class Switcher : Gtk.Window {
IBus.EngineDesc[] engines,
int index,
string input_context_path) {
- assert (m_loop == null);
- assert (index < engines.length);
+ assert(m_loop == null);
+ assert(index < engines.length);
m_is_running = true;
m_keyval = keyval;
@@ -198,16 +198,18 @@ class Switcher : Gtk.Window {
null,
event,
null);
- if (status != Gdk.GrabStatus.SUCCESS)
+ if (status != Gdk.GrabStatus.SUCCESS) {
warning("Grab keyboard failed! status = %d", status);
- status = seat.grab(get_window(),
- Gdk.SeatCapabilities.POINTER,
- true,
- null,
- event,
- null);
- if (status != Gdk.GrabStatus.SUCCESS)
- warning("Grab pointer failed! status = %d", status);
+ } else {
+ status = seat.grab(get_window(),
+ Gdk.SeatCapabilities.POINTER,
+ true,
+ null,
+ event,
+ null);
+ if (status != Gdk.GrabStatus.SUCCESS)
+ warning("Grab pointer failed! status = %d", status);
+ }
#else
Gdk.Device device = event.get_device();
if (device == null) {
@@ -243,30 +245,41 @@ class Switcher : Gtk.Window {
Gdk.EventMask.KEY_RELEASE_MASK,
null,
Gdk.CURRENT_TIME);
- if (status != Gdk.GrabStatus.SUCCESS)
+ if (status != Gdk.GrabStatus.SUCCESS) {
warning("Grab keyboard failed! status = %d", status);
- // Grab all pointer events
- status = pointer.grab(get_window(),
- Gdk.GrabOwnership.NONE,
- true,
- Gdk.EventMask.BUTTON_PRESS_MASK |
- Gdk.EventMask.BUTTON_RELEASE_MASK,
- null,
- Gdk.CURRENT_TIME);
- if (status != Gdk.GrabStatus.SUCCESS)
- warning("Grab pointer failed! status = %d", status);
+ } else {
+ // Grab all pointer events
+ status = pointer.grab(get_window(),
+ Gdk.GrabOwnership.NONE,
+ true,
+ Gdk.EventMask.BUTTON_PRESS_MASK |
+ Gdk.EventMask.BUTTON_RELEASE_MASK,
+ null,
+ Gdk.CURRENT_TIME);
+ if (status != Gdk.GrabStatus.SUCCESS)
+ warning("Grab pointer failed! status = %d", status);
+ }
#endif
- // Probably we can delete m_popup_delay_time in 1.6
- pointer.get_position_double(null,
- out m_mouse_init_x,
- out m_mouse_init_y);
- m_mouse_moved = false;
+ /* Fix RHBZ #1771238 assert(m_loop == null)
+ * Grabbing keyboard can be failed when the second Super-e is typed
+ * before Switcher dialog is focused. And m_loop could not be released
+ * if the failed Super-e would call m_loop.run() below and could not
+ * call key_release_event(). And m_loop == null would be false in the
+ * third Super-e.
+ */
+ if (status == Gdk.GrabStatus.SUCCESS) {
+ // Probably we can delete m_popup_delay_time in 1.6
+ pointer.get_position_double(null,
+ out m_mouse_init_x,
+ out m_mouse_init_y);
+ m_mouse_moved = false;
- m_loop = new GLib.MainLoop();
- m_loop.run();
- m_loop = null;
+ m_loop = new GLib.MainLoop();
+ m_loop.run();
+ m_loop = null;
+ }
#if VALA_0_34
seat.ungrab();
--
2.17.1
2.24.1

View File

@ -1,48 +0,0 @@
From 0f5084e07c215d74adc4eeeda40b374855cce59a Mon Sep 17 00:00:00 2001
From: fujiwarat <takao.fujiwara1@gmail.com>
Date: Fri, 11 Jan 2019 12:56:42 +0900
Subject: [PATCH] src/ibuscomposetable: Replace assert with warning for
.XCompose
BUG=rhbz#1470673
---
src/ibuscomposetable.c | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/src/ibuscomposetable.c b/src/ibuscomposetable.c
index b843e7e1..1c0ece41 100644
--- a/src/ibuscomposetable.c
+++ b/src/ibuscomposetable.c
@@ -1,7 +1,7 @@
/* -*- mode: C; c-basic-offset: 4; indent-tabs-mode: nil; -*- */
/* ibus - The Input Bus
* Copyright (C) 2013-2014 Peng Huang <shawn.p.huang@gmail.com>
- * Copyright (C) 2013-2018 Takao Fujiwara <takao.fujiwara1@gmail.com>
+ * Copyright (C) 2013-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
@@ -98,14 +98,16 @@ parse_compose_value (IBusComposeData *compose_data,
uch = words[1][1];
/* The escaped string "\"" is separated with '\\' and '"'. */
- if (uch == '\0' && words[2][0] == '"')
+ if (uch == '\0' && words[2][0] == '"') {
uch = '"';
/* The escaped octal */
- else if (uch >= '0' && uch <= '8')
+ } else if (uch >= '0' && uch <= '8') {
uch = g_ascii_strtoll(words[1] + 1, NULL, 8);
/* If we need to handle other escape sequences. */
- else if (uch != '\\')
- g_assert_not_reached ();
+ } else if (uch != '\\') {
+ g_warning ("Invalid backslash: %s: %s", val, line);
+ goto fail;
+ }
}
if (g_utf8_get_char (g_utf8_next_char (words[1])) > 0) {
--
2.21.0

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,179 +0,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
@@ -70,16 +71,63 @@ _restart_server (void)
}
/**
+ * 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 *
}
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
}
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,22 +184,27 @@ 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 ();
- if (!g_str_has_prefix (g_address, "unix:tmpdir=")) {
- g_error ("Your socket address does not have the format unix:tmpdir=$DIR; %s",
- g_address);
+ 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. */
flags, guid,
- NULL /* observer */,
+ observer,
NULL /* cancellable */,
&error);
if (server == NULL) {
@@ -161,7 +214,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

View File

@ -1,347 +0,0 @@
From c38e925eba2b1f7af39696e2f64ec1eaea94b00b Mon Sep 17 00:00:00 2001
From: Takao Fujiwara <fujiwara@redhat.com>
Date: Thu, 30 Sep 2021 09:36:12 -0400
Subject: [PATCH] Backport IBus Unicode feature
---
configure.ac | 10 +++++++
ui/gtk3/Makefile.am | 5 +++-
ui/gtk3/emojier.vala | 37 +++++++++++++++--------
ui/gtk3/emojierapp.vala | 63 ++++++++++++++++++++++++++++-----------
ui/gtk3/panelbinding.vala | 13 ++++++--
5 files changed, 93 insertions(+), 35 deletions(-)
diff --git a/configure.ac b/configure.ac
index 46ab7a9..26bb357 100644
--- a/configure.ac
+++ b/configure.ac
@@ -237,12 +237,21 @@ if test x"$enable_gtk3" = x"yes"; then
PKG_CHECK_MODULES(GTK3, [
gtk+-3.0
])
+ PKG_CHECK_EXISTS([gdk-wayland-3.0],
+ [enable_gdk3_wayland=yes],
+ [enable_gdk3_wayland=no]
+ )
gtk3_binary_version=`$PKG_CONFIG --variable=gtk_binary_version gtk+-3.0`
GTK3_IM_MODULEDIR="$libdir"/gtk-3.0/$gtk3_binary_version/immodules
else
enable_gtk3="no (disabled, use --enable-gtk3 to enable)"
+ enable_gdk3_wayland=no
+fi
+if test x"$enable_gdk3_wayland" != x"yes"; then
+ enable_gdk3_wayland="no (disabled, need to install gdk-wayland-3.0.pc)"
fi
+AM_CONDITIONAL([ENABLE_GDK3_WAYLAND], [test x"$enable_gdk3_wayland" = x"yes"])
if test x"$enable_xim" = x"yes"; then
# Check for x11
@@ -796,6 +805,7 @@ Build options:
Build gtk3 immodule $enable_gtk3
Build XIM agent server $enable_xim
Build wayland support $enable_wayland
+ Build gdk3 wayland support $enable_gdk3_wayland
Build appindicator support $enable_appindicator
Build appindicator engine icon $enable_appindicator_engine_icon
Build python library $enable_python_library
diff --git a/ui/gtk3/Makefile.am b/ui/gtk3/Makefile.am
index aaba7a4..6ebc96c 100644
--- a/ui/gtk3/Makefile.am
+++ b/ui/gtk3/Makefile.am
@@ -78,7 +78,6 @@ AM_VALAFLAGS = \
--pkg=ibus-1.0 \
--pkg=config \
--pkg=xi \
- --pkg=gdk-wayland \
--target-glib="$(VALA_TARGET_GLIB_VERSION)" \
$(NULL)
@@ -105,6 +104,10 @@ if ENABLE_APPINDICATOR_ENGINE_ICON
AM_VALAFLAGS += --define=INDICATOR_ENGINE_ICON
endif
+if ENABLE_GDK3_WAYLAND
+AM_VALAFLAGS += --pkg=gdk-wayland --define=USE_GDK_WAYLAND
+endif
+
libexec_PROGRAMS = ibus-ui-gtk3
ibus_ui_gtk3_SOURCES = \
diff --git a/ui/gtk3/emojier.vala b/ui/gtk3/emojier.vala
index 3eac2f2..9e6e926 100644
--- a/ui/gtk3/emojier.vala
+++ b/ui/gtk3/emojier.vala
@@ -2,7 +2,7 @@
*
* ibus - The Input Bus
*
- * Copyright (c) 2017-2018 Takao Fujiwara <takao.fujiwara1@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
@@ -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(
@@ -864,7 +865,7 @@ public class IBusEmojier : Gtk.ApplicationWindow {
row.get_allocation(out alloc);
var adjustment = m_scrolled_window.get_vadjustment();
adjustment.clamp_page(alloc.y, alloc.y + alloc.height);
- return_val_if_fail(m_category_active_index >= 0, false);
+ return_if_fail(m_category_active_index >= 0);
m_lookup_table.set_cursor_pos((uint)m_category_active_index);
}
@@ -936,8 +937,13 @@ public class IBusEmojier : Gtk.ApplicationWindow {
update_unicode_blocks();
return;
} else {
- unowned GLib.SList<unowned string> emojis =
- m_category_to_emojis_dict.lookup(category);
+ // Use copy_deep() since vala 0.43.4 does not allow to assign
+ // a weak pointer to the full one in SList:
+ // emojier.vala:885.48-886.62: error: Assignment: Cannot convert
+ // from `GLib.SList<string>' to `GLib.SList<weak string>?'
+ GLib.SList<string> emojis =
+ m_category_to_emojis_dict.lookup(category).copy_deep(
+ GLib.strdup);
m_lookup_table.clear();
m_candidate_panel_mode = true;
foreach (unowned string emoji in emojis) {
@@ -1601,8 +1607,8 @@ public class IBusEmojier : Gtk.ApplicationWindow {
m_vbox.add(widget);
widget.show_all();
}
- unowned GLib.SList<unowned string>? annotations =
- data.get_annotations();
+ GLib.SList<string> annotations =
+ data.get_annotations().copy_deep(GLib.strdup);
var buff = new GLib.StringBuilder();
int i = 0;
foreach (unowned string annotation in annotations) {
@@ -1784,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;
@@ -1892,6 +1897,7 @@ public class IBusEmojier : Gtk.ApplicationWindow {
// PageUp/PageDown.
remove_all_children();
}
+ cancel();
return false;
}
@@ -2055,17 +2061,20 @@ public class IBusEmojier : Gtk.ApplicationWindow {
) as IBus.EmojiData;
m_emoji_to_data_dict.insert(favorite, new_data);
} else {
- unowned GLib.SList<string> annotations = data.get_annotations();
+ GLib.SList<string> annotations =
+ data.get_annotations().copy_deep(GLib.strdup);
if (annotations.find_custom(annotation, GLib.strcmp) == null) {
annotations.append(annotation);
- data.set_annotations(annotations.copy());
+ data.set_annotations(annotations.copy_deep(GLib.strdup));
}
}
unowned GLib.SList<string> emojis =
m_annotation_to_emojis_dict.lookup(annotation);
if (emojis.find_custom(favorite, GLib.strcmp) == null) {
emojis.append(favorite);
- m_annotation_to_emojis_dict.replace(annotation, emojis.copy());
+ m_annotation_to_emojis_dict.replace(
+ annotation,
+ emojis.copy_deep(GLib.strdup));
}
}
}
@@ -2117,7 +2126,7 @@ public class IBusEmojier : Gtk.ApplicationWindow {
public string get_current_candidate() {
// If category_list mode, do not show the category name on preedit.
// If candidate_panel mode, the first space key does not show the
- // lookup table but the first candidate is avaiable on preedit.
+ // lookup table but the first candidate is available on preedit.
if (!m_candidate_panel_mode)
return "";
uint cursor = m_lookup_table.get_cursor_pos();
@@ -2139,11 +2148,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/emojierapp.vala b/ui/gtk3/emojierapp.vala
index fab99d9..7bc7b42 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);
diff --git a/ui/gtk3/panelbinding.vala b/ui/gtk3/panelbinding.vala
index cfedb2d..861255b 100644
--- a/ui/gtk3/panelbinding.vala
+++ b/ui/gtk3/panelbinding.vala
@@ -3,7 +3,7 @@
* ibus - The Input Bus
*
* Copyright(c) 2018 Peng Huang <shawn.p.huang@gmail.com>
- * Copyright(c) 2018 Takao Fujwiara <takao.fujiwara1@gmail.com>
+ * Copyright(c) 2018-2020 Takao Fujwiara <takao.fujiwara1@gmail.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -190,7 +190,7 @@ class Preedit : Gtk.Window {
public IBus.Text get_commit_text() {
string extension_text = m_extension_preedit_emoji.get_text();
- if (extension_text.length == 0)
+ if (extension_text.length == 0 && m_prefix != "u")
extension_text = m_extension_preedit_text.get_text();
return new IBus.Text.from_string(extension_text);
}
@@ -237,9 +237,14 @@ class PanelBinding : IBus.PanelService {
GLib.Object(connection : bus.get_connection(),
object_path : IBus.PATH_PANEL_EXTENSION_EMOJI);
+#if USE_GDK_WAYLAND
Type instance_type = Gdk.Display.get_default().get_type();
Type wayland_type = typeof(GdkWayland.Display);
m_is_wayland = instance_type.is_a(wayland_type);
+#else
+ m_is_wayland = false;
+ warning("Checking Wayland is disabled");
+#endif
m_bus = bus;
m_application = application;
@@ -551,8 +556,10 @@ class PanelBinding : IBus.PanelService {
private bool key_press_keyval(uint keyval) {
unichar ch = IBus.keyval_to_unicode(keyval);
+ if (m_extension_name == "unicode" && !ch.isxdigit())
+ return false;
if (ch.iscntrl())
- return false;
+ return false;
string str = ch.to_string();
m_preedit.append_text(str);
string annotation = m_preedit.get_text();
--
2.27.0

View File

@ -1,26 +0,0 @@
From 6aab10f2e5a8e10dac9b007eff19b26990461790 Mon Sep 17 00:00:00 2001
From: fujiwarat <takao.fujiwara1@gmail.com>
Date: Thu, 14 Feb 2019 17:37:39 +0900
Subject: [PATCH] ui/gtk3: Fix assert with 16 candidates
BUG=https://github.com/ibus/ibus/issues/2076
---
ui/gtk3/candidatearea.vala | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ui/gtk3/candidatearea.vala b/ui/gtk3/candidatearea.vala
index f590cf3a..781ecd1e 100644
--- a/ui/gtk3/candidatearea.vala
+++ b/ui/gtk3/candidatearea.vala
@@ -109,7 +109,7 @@ class CandidateArea : Gtk.Box {
m_focus_candidate = focus_candidate;
m_show_cursor = show_cursor;
- assert(candidates.length < 16);
+ assert(candidates.length <= 16);
for (int i = 0 ; i < 16 ; i++) {
Gtk.Label label = m_candidates[i];
bool visible = false;
--
2.21.0

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,37 @@
From d63da885f8f4e3764b8b572347b70a0cefadc335 Mon Sep 17 00:00:00 2001
From: fujiwarat <takao.fujiwara1@gmail.com>
Date: Wed, 16 Jun 2021 20:55:20 +0900
Subject: [PATCH] src/tests: Change window manager to mutter for RHEL
---
src/tests/ibus-desktop-testing-runner.in | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/tests/ibus-desktop-testing-runner.in b/src/tests/ibus-desktop-testing-runner.in
index 54b7e0d7..211e0da5 100755
--- a/src/tests/ibus-desktop-testing-runner.in
+++ b/src/tests/ibus-desktop-testing-runner.in
@@ -44,7 +44,7 @@ TEST_LOG="test-suite.log"
TEST_LOG_STDOUT=0
RESULT_LOG=""
HAVE_GRAPHICS=1
-DESKTOP_COMMAND="dbus-launch --exit-with-session gnome-session"
+DESKTOP_COMMAND="dbus-launch --exit-with-session mutter"
PID_XORG=0
PID_GNOME_SESSION=0
TESTING_RUNNER="default"
@@ -80,9 +80,9 @@ usage()
"-b, --builddir=BUILDDIR Set the BUILDDIR\n" \
"-s, --srcdir=SOURCEDIR Set the SOURCEDIR\n" \
"-c, --no-graphics Use Xvfb instead of Xorg\n" \
-"-d, --desktop=DESKTOP Run DESTKTOP. The default is gnome-session.\n" \
+"-d, --desktop=DESKTOP Run DESTKTOP. The default is mutter.\n" \
" Suffix '-with-dbus' can run DESKTOP with dbus session." \
-" E.g. --desktop=mutter-with-dbus" \
+" E.g. --desktop=gnome-session-with-dbus" \
"-t, --tests=\"TESTS...\" Run TESTS programs which is separated by space\n" \
"-r, --runner=RUNNER Run TESTS programs with a test RUNNER.\n" \
" RUNNDER = gnome or default.\n" \
--
2.28.0

View File

@ -1,134 +0,0 @@
From 8375f391e1b9bfc048ff14fd458f689d853064ac Mon Sep 17 00:00:00 2001
From: fujiwarat <takao.fujiwara1@gmail.com>
Date: Thu, 28 Feb 2019 15:26:11 +0900
Subject: [PATCH] ui/gtk3: Do not add emojis in compose category to emoji
variants
Any emojis in compose category have variants and should be shown by default.
---
bindings/vala/IBus-1.0-custom.vala | 4 ++
ui/gtk3/emojier.vala | 74 ++++++++++++++++++++++++++----
2 files changed, 68 insertions(+), 10 deletions(-)
diff --git a/bindings/vala/IBus-1.0-custom.vala b/bindings/vala/IBus-1.0-custom.vala
index 7d34a8bd..ec46fc90 100644
--- a/bindings/vala/IBus-1.0-custom.vala
+++ b/bindings/vala/IBus-1.0-custom.vala
@@ -17,4 +17,8 @@ namespace IBus {
public class PanelService : IBus.Service {
public void panel_extension_register_keys(string first_property_name, ...);
}
+ public class EmojiData : IBus.Serializable {
+ [CCode (cname = "ibus_emoji_data_new", has_construct_function = true)]
+ public EmojiData (string first_property_name, ...);
+ }
}
diff --git a/ui/gtk3/emojier.vala b/ui/gtk3/emojier.vala
index aedeb4cb..fc15cffe 100644
--- a/ui/gtk3/emojier.vala
+++ b/ui/gtk3/emojier.vala
@@ -389,6 +389,14 @@ public class IBusEmojier : Gtk.ApplicationWindow {
}
make_emoji_dict(m_current_lang_id);
}
+ add_variants_to_component();
+
+ GLib.List<unowned string> annotations =
+ m_annotation_to_emojis_dict.get_keys();
+ foreach (unowned string annotation in annotations) {
+ if (m_emoji_max_seq_len < annotation.length)
+ m_emoji_max_seq_len = annotation.length;
+ }
update_favorite_emoji_dict();
}
@@ -430,11 +438,54 @@ public class IBusEmojier : Gtk.ApplicationWindow {
update_annotation_to_emojis_dict(data);
update_category_to_emojis_dict(data, lang);
}
- GLib.List<unowned string> annotations =
- m_annotation_to_emojis_dict.get_keys();
- foreach (unowned string annotation in annotations) {
- if (m_emoji_max_seq_len < annotation.length)
- m_emoji_max_seq_len = annotation.length;
+ }
+
+
+ private static void add_variants_to_component() {
+ string category = "Component";
+ unowned GLib.SList<string> hits =
+ m_category_to_emojis_dict.lookup(category);
+ if (hits == null) {
+ category = "component";
+ hits = m_category_to_emojis_dict.lookup(category);
+ }
+ if (hits == null)
+ return;
+ GLib.SList<IBus.EmojiData> emoji_list =
+ new GLib.SList<IBus.EmojiData>();
+ GLib.SList<string> annotations = new GLib.SList<string>();
+ annotations.append("zero");
+ IBus.EmojiData _data;
+ _data = new IBus.EmojiData("emoji", "\u200d",
+ "annotations", annotations,
+ "description",
+ "ZERO WIDTH JOINER",
+ "category", category);
+ emoji_list.append(_data);
+ annotations = null;
+ annotations.append("text");
+ annotations.append("variation");
+ annotations.append("selector");
+ _data = new IBus.EmojiData("emoji", "\ufe0e",
+ "annotations", annotations,
+ "description",
+ "VARIATION SELECTOR-15",
+ "category", category);
+ emoji_list.append(_data);
+ annotations = null;
+ annotations.append("emoji");
+ annotations.append("variation");
+ annotations.append("selector");
+ _data = new IBus.EmojiData("emoji", "\ufe0f",
+ "annotations", annotations,
+ "description",
+ "VARIATION SELECTOR-16",
+ "category", category);
+ emoji_list.append(_data);
+ foreach (IBus.EmojiData data in emoji_list) {
+ update_emoji_to_data_dict(data, "en");
+ update_annotation_to_emojis_dict(data);
+ update_category_to_emojis_dict(data, "en");
}
}
@@ -583,10 +634,12 @@ public class IBusEmojier : Gtk.ApplicationWindow {
category = EMOJI_CATEGORY_OTHERS;
if (lang == "en") {
bool has_variant = false;
- foreach (unichar ch in EMOJI_VARIANT_LIST) {
- if (emoji.index_of_char(ch) >= 0) {
- has_variant = true;
- break;
+ if (category.ascii_casecmp("component") != 0) {
+ foreach (unichar ch in EMOJI_VARIANT_LIST) {
+ if (emoji.index_of_char(ch) >= 0) {
+ has_variant = true;
+ break;
+ }
}
}
// If emoji includes variants (skin colors and items),
@@ -606,7 +659,8 @@ public class IBusEmojier : Gtk.ApplicationWindow {
if (variants.find_custom(emoji, GLib.strcmp) == null) {
if (variants == null)
variants.append(base_emoji);
- variants.append(emoji);
+ if (base_emoji != emoji)
+ variants.append(emoji);
m_emoji_to_emoji_variants_dict.replace(
base_emoji,
variants.copy_deep(GLib.strdup));
--
2.21.0

View File

@ -1,60 +0,0 @@
From 1cb5032e85d85f496e349236d1b74f17fb8db966 Mon Sep 17 00:00:00 2001
From: fujiwarat <takao.fujiwara1@gmail.com>
Date: Tue, 23 Apr 2019 15:40:45 +0900
Subject: [PATCH] configure: Move ibus-setup from configure.ac to Makefile.am
@localedir@ can be extracted to ${datarootdir}/locale and
it needs datarootdir=/usr/share in case configure.ac is used
and deleting the datarootdir line caused a regression.
All variables can be extracted in Makefile.am with sed.
---
configure.ac | 1 -
setup/Makefile.am | 13 +++++++++++--
2 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/configure.ac b/configure.ac
index 9518e808..7503f3e8 100644
--- a/configure.ac
+++ b/configure.ac
@@ -724,7 +724,6 @@ ibus/interface/Makefile
ui/Makefile
ui/gtk3/Makefile
setup/Makefile
-setup/ibus-setup
bindings/Makefile
bindings/pygobject/Makefile
bindings/vala/Makefile
diff --git a/setup/Makefile.am b/setup/Makefile.am
index cb4dd8d1..34c8f136 100644
--- a/setup/Makefile.am
+++ b/setup/Makefile.am
@@ -3,8 +3,8 @@
# ibus - The Input Bus
#
# Copyright (c) 2007-2014 Peng Huang <shawn.p.huang@gmail.com>
-# Copyright (c) 2015-2017 Takao Fujiwara <takao.fujiwara1@gmail.com>
-# Copyright (c) 2007-2017 Red Hat, Inc.
+# Copyright (c) 2015-2019 Takao Fujiwara <takao.fujiwara1@gmail.com>
+# Copyright (c) 2007-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
@@ -40,6 +40,15 @@ ibussetup_DATA = \
bin_SCRIPTS = ibus-setup
ibussetupdir = $(pkgdatadir)/setup
+ibus-setup: ibus-setup.in
+ $(AM_V_GEN) sed -e "s|\@datarootdir\@|$(datarootdir)|g" \
+ -e "s|\@localedir\@|$(localedir)|g" \
+ -e "s|\@libexecdir\@|$(libexecdir)|g" \
+ -e "s|\@prefix\@|$(prefix)|g" \
+ -e "s|\@PYTHON\@|$(PYTHON)|g" \
+ $< > $@.tmp && \
+ mv $@.tmp $@
+
desktop_in_files = ibus-setup.desktop.in
desktop_DATA = $(desktop_in_files:.desktop.in=.desktop)
desktopdir = $(datadir)/applications
--
2.21.0

View File

@ -1,3 +1,4 @@
# https://fedoraproject.org/wiki/Changes/No_more_automagic_Python_bytecompilation_phase_3
%if (0%{?fedora} > 29 || 0%{?rhel} > 7)
%global with_python2 0
%else
@ -6,62 +7,52 @@
%global with_pkg_config %(pkg-config --version >/dev/null 2>&1 && echo -n "1" || echo -n "0")
%if (0%{?fedora} > 21 || 0%{?rhel} > 7)
%global with_kde5 1
%else
%global with_kde5 0
%endif
%global ibus_api_version 1.0
# for bytecompile in %%{_datadir}/ibus/setup
%global __python %{__python3}
%if (0%{?fedora} > 33 || 0%{?rhel} > 8)
%bcond_without gtk4
%else
%bcond_with gtk4
%endif
%if %with_pkg_config
%{!?gtk2_binary_version: %global gtk2_binary_version %(pkg-config --variable=gtk_binary_version gtk+-2.0)}
%{!?gtk3_binary_version: %global gtk3_binary_version %(pkg-config --variable=gtk_binary_version gtk+-3.0)}
%if %{with gtk4}
%{!?gtk4_binary_version: %global gtk4_binary_version %(pkg-config --variable=gtk_binary_version gtk4)}
%else
%{!?gtk4_binary_version: %global gtk4_binary_version ?.?.?}
%endif
%global glib_ver %([ -a %{_libdir}/pkgconfig/glib-2.0.pc ] && pkg-config --modversion glib-2.0 | cut -d. -f 1,2 || echo -n "999")
%else
%{!?gtk2_binary_version: %global gtk2_binary_version ?.?.?}
%{!?gtk3_binary_version: %global gtk3_binary_version ?.?.?}
%{!?gtk4_binary_version: %global gtk4_binary_version ?.?.?}
%global glib_ver 0
%endif
%global dbus_python_version 0.83.0
Name: ibus
Version: 1.5.19
Release: 14%{?dist}
Version: 1.5.25
Release: 2%{?dist}
Summary: Intelligent Input Bus for Linux OS
License: LGPLv2+
Group: System Environment/Libraries
URL: https://github.com/ibus/%name/wiki
Source0: https://github.com/ibus/%name/releases/download/%{version}/%{name}-%{version}.tar.gz
Source1: %{name}-xinput
Source2: %{name}.conf.5
Source3: https://fujiwara.fedorapeople.org/ibus/po/%{name}-po-1.5.19-20210706.tar.gz
# Patch0: %%{name}-HEAD.patch
# RHEL 8.0 From upstreamed patches
Patch0: %{name}-HEAD.patch
# RHEL 8.2 Fix not to assert with wrong compose files
Patch1: %{name}-1470673-emoji-warn-instead-assert.patch
# RHEL 8.2 Fix not to assert with 16 candidates
Patch2: %{name}-2076-fix-16-candidates.patch
# RHEL 8.2 Show emoji compose in the top category
Patch3: %{name}-xx-emoji-compose.patch
# RHEL 8.2 Extract $(datarootdir) in ibus-setup
Patch4: %{name}-xx-setup-env.patch
# RHEL 8.2 CVE 2019-14822
Patch5: %{name}-1750836-server-auth-observer.patch
# RHEL 8.2 Bug 1682157 - Integrate ibus-desktop-testing and test cases
Patch6: %{name}-1682157-ci.patch
# RHEL 8.2 Bug 1713606 - Fix hangul preedit commit with mouse click
Patch7: %{name}-1713606-hangul-with-mouse.patch
# RHEL 8.5 Bug 1897548 - Enable to lookup Unicode names
Patch8: %{name}-1897548-emoji-unicode.patch
# RHEL 8.0 Under testing #1349148 #1385349 #1350291 #1406699 #1432252 #1601577
Patch100: %{name}-1385349-segv-bus-proxy.patch
# Under testing #1349148 #1385349 #1350291 #1406699 #1432252 #1601577
Patch1: %{name}-1385349-segv-bus-proxy.patch
%if 0%{?fedora:0}%{?rhel:1}
# Use mutter window manager in RHEL CI
Patch2: %{name}-xx-desktop-testing-mutter.patch
%endif
BuildRequires: gettext-devel
BuildRequires: libtool
@ -69,7 +60,11 @@ BuildRequires: libtool
BuildRequires: glib2-doc
BuildRequires: gtk2-devel
BuildRequires: gtk3-devel
%if %{with gtk4}
BuildRequires: gtk4-devel
%endif
BuildRequires: dbus-glib-devel
BuildRequires: dbus-python-devel >= %{dbus_python_version}
BuildRequires: desktop-file-utils
BuildRequires: gtk-doc
BuildRequires: dconf-devel
@ -77,25 +72,18 @@ BuildRequires: dbus-x11
BuildRequires: python3-devel
BuildRequires: python3-gobject
%if %with_python2
# http://pkgs.devel.redhat.com/cgit/rpms/GConf2/commit/?h=rhel-8.3.0&id=82fe51c3
# https://bugzilla.gnome.org/show_bug.cgi?id=759334
# Need python2 for gsettings-schema-convert
BuildRequires: python2-devel
BuildRequires: dbus-python-devel >= %{dbus_python_version}
%endif
BuildRequires: vala
BuildRequires: vala-devel
BuildRequires: vala-tools
# for AM_GCONF_SOURCE_2 in configure.ac
BuildRequires: GConf2-devel
BuildRequires: git
BuildRequires: intltool
%endif
BuildRequires: git
BuildRequires: vala
BuildRequires: iso-codes-devel
BuildRequires: libnotify-devel
BuildRequires: libwayland-client-devel
%if %with_kde5
BuildRequires: qt5-qtbase-devel
%endif
BuildRequires: wayland-devel
BuildRequires: cldr-emoji-annotation
BuildRequires: unicode-emoji
BuildRequires: unicode-ucd
@ -103,7 +91,7 @@ BuildRequires: unicode-ucd
BuildRequires: libXtst-devel
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
Requires: %{name}-gtk2%{?_isa} = %{version}-%{release}
Requires: (%{name}-gtk2%{?_isa} = %{version}-%{release} if gtk2)
Requires: %{name}-gtk3%{?_isa} = %{version}-%{release}
Requires: %{name}-setup = %{version}-%{release}
@ -117,8 +105,7 @@ Requires: python3-gobject
%{?__python3:Requires: %{__python3}}
# Owner of %%{_sysconfdir}/X11/xinit
Requires: xorg-x11-xinit
# for setxkbmap
Requires: xorg-x11-xkb-utils
Requires: setxkbmap
%if (0%{?fedora} > 29 || 0%{?rhel} > 8)
%else
Requires: dbus-x11
@ -142,7 +129,6 @@ IBus means Intelligent Input Bus. It is an input framework for Linux OS.
%package libs
Summary: IBus libraries
Group: System Environment/Libraries
Requires: dbus >= 1.2.4
Requires: glib2 >= %{glib_ver}
@ -158,7 +144,6 @@ This package contains the libraries for IBus
%package gtk2
Summary: IBus IM module for GTK2
Group: System Environment/Libraries
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
Requires: glib2 >= %{glib_ver}
Requires(post): glib2 >= %{glib_ver}
@ -171,7 +156,6 @@ This package contains IBus IM module for GTK2
%package gtk3
Summary: IBus IM module for GTK3
Group: System Environment/Libraries
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
Requires: glib2 >= %{glib_ver}
Requires(post): glib2 >= %{glib_ver}
@ -179,14 +163,25 @@ Requires(post): glib2 >= %{glib_ver}
%description gtk3
This package contains IBus IM module for GTK3
%if %{with gtk4}
%package gtk4
Summary: IBus IM module for GTK4
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
Requires: glib2 >= %{glib_ver}
Requires(post): glib2 >= %{glib_ver}
%description gtk4
This package contains IBus IM module for GTK4
%endif
%package setup
Summary: IBus setup utility
Group: System Environment/Libraries
Requires: %{name} = %{version}-%{release}
%{?__python3:Requires: %{__python3}}
Requires: python3-gobject
BuildRequires: gobject-introspection-devel
BuildRequires: pygobject3-devel
BuildRequires: make
BuildArch: noarch
%description setup
@ -195,7 +190,6 @@ This is a setup utility for IBus.
%if %with_python2
%package pygtk2
Summary: IBus PyGTK2 library
Group: System Environment/Libraries
%if (0%{?fedora} && 0%{?fedora} <= 27) || (0%{?rhel} && 0%{?rhel} <= 7)
Requires: dbus-python >= %{dbus_python_version}
%else
@ -212,7 +206,6 @@ and this package will be deprecated.
%package py2override
Summary: IBus Python2 override library
Group: System Environment/Libraries
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
# Owner of %%python2_sitearch/gi/overrides
%if (0%{?fedora} && 0%{?fedora} <= 27) || (0%{?rhel} && 0%{?rhel} <= 7)
@ -228,7 +221,6 @@ some functions in GObject-Introspection.
%package wayland
Summary: IBus IM module for Wayland
Group: System Environment/Libraries
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
%description wayland
@ -236,14 +228,11 @@ This package contains IBus IM module for Wayland
%package devel
Summary: Development tools for ibus
Group: Development/Libraries
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
Requires: dbus-devel
Requires: glib2-devel
# Owner of %%{_datadir}/gir-1.0
Requires: gobject-introspection-devel
# Owner of %%{_datadir}/vala/vapi
Requires: vala
# for %%{_datadir}/gettext/its
Requires: gettext
%description devel
The ibus-devel package contains the header files and developer
@ -251,7 +240,6 @@ docs for ibus.
%package devel-docs
Summary: Developer documents for IBus
Group: Development/Libraries
BuildArch: noarch
%description devel-docs
@ -259,8 +247,12 @@ The ibus-devel-docs package contains developer documentation for IBus
%package desktop-testing
Summary: Wrapper of InstalledTests Runner for IBus
Group: Development/Libraries
Requires: %{name} = %{version}-%{release}
%if 0%{?fedora:1}%{?rhel:0}
# Use no-overview mode in CI to get input focus
BuildRequires: gnome-shell-extension-no-overview
Requires: gnome-shell-extension-no-overview
%endif
BuildArch: noarch
%description desktop-testing
@ -271,9 +263,7 @@ desktop testing runner internally.
%package tests
Summary: Tests for the %{name} package
Group: Development/Libraries
Requires: %{name}%{?_isa} = %{version}-%{release}
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
Requires: %{name}%{?_isa} = %{version}-%{release}
%description tests
The %{name}-tests package contains tests that can be used to verify
@ -283,17 +273,10 @@ the functionality of the installed %{name} package.
%prep
%autosetup -S git
# cp client/gtk2/ibusimcontext.c client/gtk3/ibusimcontext.c || :
# cp client/gtk2/ibusim.c client/gtk3/ibusim.c || :
# cp client/gtk2/ibusimcontext.c client/gtk4/ibusimcontext.c || :
cp client/gtk2/ibusimcontext.c client/gtk3/ibusimcontext.c || :
zcat %SOURCE3 | tar xfv -
cp /usr/share/unicode/ucd/Blocks.txt .
NL=/usr/share/unicode/ucd/NamesList.txt
sed -e '/^@@.*3300.*CJK Compatibility/i\
@ Japanese era name\
32FF SQUARE ERA NAME REIWA\
# <square> 4EE4 548C' $NL > NamesList.txt
diff $NL NamesList.txt || :
cp client/gtk2/ibusimcontext.c client/gtk4/ibusimcontext.c || :
# prep test
@ -305,6 +288,11 @@ do
abort
fi
done
diff client/gtk2/ibusimcontext.c client/gtk4/ibusimcontext.c
if test $? -ne 0 ; then
echo "Have to copy ibusimcontext.c into client/gtk4"
abort
fi
%build
#autoreconf -f -i -v
@ -315,6 +303,9 @@ autoreconf -f -i -v
--disable-static \
--enable-gtk2 \
--enable-gtk3 \
%if %{with gtk4}
--enable-gtk4 \
%endif
--enable-xim \
--enable-gtk-doc \
--enable-surrounding-text \
@ -325,25 +316,20 @@ autoreconf -f -i -v
--enable-python-library \
%endif
--enable-wayland \
%if ! %with_kde5
--disable-appindicator \
%endif
--enable-introspection \
--enable-install-tests \
--with-ucd-dir=$PWD \
%{nil}
make -C ui/gtk3 maintainer-clean-generic
make %{?_smp_mflags}
env PAGER=: git diff src/ibusemojigen.h
env PAGER=: git diff src/ibusunicodegen.h
%make_build
%install
make install DESTDIR=$RPM_BUILD_ROOT INSTALL='install -p'
rm -f $RPM_BUILD_ROOT%{_libdir}/libibus-*%{ibus_api_version}.la
rm -f $RPM_BUILD_ROOT%{_libdir}/gtk-2.0/%{gtk2_binary_version}/immodules/im-ibus.la
rm -f $RPM_BUILD_ROOT%{_libdir}/gtk-3.0/%{gtk3_binary_version}/immodules/im-ibus.la
%if %{with gtk4}
rm -f $RPM_BUILD_ROOT%{_libdir}/gtk-4.0/%{gtk4_binary_version}/immodules/libim-ibus.la
%endif
# install man page
for S in %{SOURCE2}
@ -358,14 +344,16 @@ done
install -pm 644 -D %{SOURCE1} $RPM_BUILD_ROOT%{_xinputconf}
# install .desktop files
%if %with_python2
echo "NoDisplay=true" >> $RPM_BUILD_ROOT%{_datadir}/applications/ibus-setup.desktop
%else
echo "NoDisplay=true" >> $RPM_BUILD_ROOT%{_datadir}/applications/org.freedesktop.IBus.Setup.desktop
%endif
#echo "X-GNOME-Autostart-enabled=false" >> $RPM_BUILD_ROOT%%{_sysconfdir}/xdg/autostart/ibus.desktop
# Delete unused prefix line in Fedora only
if test `grep '^prefix' $RPM_BUILD_ROOT%{_bindir}/ibus-setup | wc -l` = 1 ; then
sed -i -e '/^prefix/d' $RPM_BUILD_ROOT%{_bindir}/ibus-setup
fi
HAS_PREFIX=$(grep prefix $RPM_BUILD_ROOT%{_bindir}/ibus-setup | wc -l)
[ x"$HAS_PREFIX" == x1 ] && \
sed -i -e '/prefix/d' $RPM_BUILD_ROOT%{_bindir}/ibus-setup
desktop-file-install --delete-original \
--dir $RPM_BUILD_ROOT%{_datadir}/applications \
@ -400,9 +388,16 @@ fi
%posttrans
dconf update || :
%transfiletriggerin -- %{_datadir}/ibus/component
[ -x %{_bindir}/ibus ] && \
%{_bindir}/ibus write-cache --system &>/dev/null || :
%transfiletriggerpostun -- %{_datadir}/ibus/component
[ -x %{_bindir}/ibus ] && \
%{_bindir}/ibus write-cache --system &>/dev/null || :
%ldconfig_scriptlets libs
%files -f %{name}10.lang
@ -447,6 +442,7 @@ dconf update || :
%files libs
%{_libdir}/libibus-*%{ibus_api_version}.so.*
%dir %{_libdir}/girepository-1.0
%{_libdir}/girepository-1.0/IBus*-1.0.typelib
%files gtk2
@ -455,11 +451,20 @@ dconf update || :
%files gtk3
%{_libdir}/gtk-3.0/%{gtk3_binary_version}/immodules/im-ibus.so
%if %{with gtk4}
%files gtk4
%{_libdir}/gtk-4.0/%{gtk4_binary_version}/immodules/libim-ibus.so
%endif
# The setup package won't include icon files so that
# gtk-update-icon-cache is executed in the main package only one time.
%files setup
%{_bindir}/ibus-setup
%if %with_python2
%{_datadir}/applications/ibus-setup.desktop
%else
%{_datadir}/applications/org.freedesktop.IBus.Setup.desktop
%endif
%{_datadir}/ibus/setup
%{_datadir}/man/man1/ibus-setup.1.gz
@ -481,7 +486,11 @@ dconf update || :
%{_libdir}/lib*.so
%{_libdir}/pkgconfig/*
%{_includedir}/*
%{_datadir}/gettext/its/ibus.*
%dir %{_datadir}/gir-1.0
%{_datadir}/gir-1.0/IBus*-1.0.gir
%dir %{_datadir}/vala
%dir %{_datadir}/vala/vapi
%{_datadir}/vala/vapi/ibus-*1.0.vapi
%{_datadir}/vala/vapi/ibus-*1.0.deps
@ -501,56 +510,257 @@ dconf update || :
%{_datadir}/installed-tests/ibus
%changelog
* Mon Oct 18 2021 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.19-14
- Resolves: #2014064 - Fix regression of Emoji typing in Wayland
* Mon Oct 04 2021 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.25-2
- Fix wrong cursor location in gtk3. Related: rhbz#2008359
* Tue Jul 06 2021 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.19-13
- Resolves: #1897548 - Rebuild IBus emoji with unicode-emoji-13.0-4 and cldr-emoji-annotation-39-2
- Rebuild ibusemojigen.h and ibusunicodegen.h
- Add ibus-1897548-emoji-unicode.patch to lookup Unicode names
- Add U+32FF to IBusUnicodeData
- Add ibus-po-1.5.19-20210706.tar.gz
* Fri Aug 20 2021 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.25-1
- Bump to 1.5.25. Related: rhbz#1995528
* Thu Jun 04 2020 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.19-12
- Resolves: #1713606 - Fix hangul preedit commit with mouse click
- Update 1682157-ci.patch
* Mon Aug 09 2021 Mohan Boddu <mboddu@redhat.com> - 1.5.24-8
- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags
Related: rhbz#1991688
* Thu Jan 09 2020 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.19-11
- Resolves: #1750836 - Fix CVE-2019-14822
* Tue Jun 22 2021 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.24-7
- Use transfiletriggerin for ibus write-cache. Related: rhbz#1963071
- Add gating.yaml
* Thu Dec 12 2019 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.19-10
- Resolves: #1750836 - Revert Hangul fix for 8.2 schedule
* Wed May 26 2021 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.24-6
- Fix minor covscan reviews. Related: rhbz#1963071
* Tue Dec 03 2019 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.19-9
- Resolves: #1682157 - Fix RHEL 8.2 covscan #2
* Fri May 21 2021 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.24-5
- Fix covscan reviews. Related: rhbz#1963071
* Sat Nov 30 2019 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.19-8
- Resolves: #1682157 - Fix libibus dependency in ibus-tests with rpmdiff
- Implement ibus_im_context_set_surrounding_with_selection()
* Fri Nov 29 2019 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.19-7
- Resolves: #1682157 - Fix RHEL 8.2 covscan
* Fri Apr 16 2021 Mohan Boddu <mboddu@redhat.com> - 1.5.24-4
- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937
* Fri Nov 29 2019 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.19-6
- Resolves: #1682157 - Add CI
* Sat Mar 20 2021 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.24-3
- Don't output FAIL if the actual failure is 0 for Fedora CI
* Fri Nov 29 2019 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.19-5
- Resolves: #1713606 - Fix hangul preedit commit with mouse click
- Resolves: #1682157 - Integrate ibus-desktop-testing and test cases
* Sat Mar 20 2021 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.24-2
- Change default session to mutter from gnome in desktop-testing
* Tue Nov 06 2018 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.19-4
* Mon Feb 22 2021 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.24-1
- Bump to 1.5.24
* Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 1.5.23-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
* Wed Jan 20 2021 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.23-3
- Enable IM gtk4 module
- Fix to rename xkb:de::ger to sync xkeyboard-config
- Enhance ibus-setup search engine
* Fri Nov 20 2020 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.23-2
- Bug 1898065 - Fix build failure of emoji-*.dict with CLDR 38
- Fix build failure with Vala 0.50
- Add IBUS_INPUT_PURPOSE_TERMINAL
* Tue Sep 29 2020 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.23-1
- Bump to 1.5.23
* Tue Sep 15 2020 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.22-17
- Update po files
* Wed Sep 09 2020 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.22-16
- Bug 1876877 - Fix to pull the correct language with no iso639 variants
- Accept xdigits only for Unicode typing
* Thu Aug 27 2020 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.22-15
- Rename simple.xml to simple.xml.in
* Thu Aug 27 2020 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.22-14
- Update ibusunicodegen.h with latest unicode-ucd
- Update simple.xml with latest xkeyboard-config
- Fix gvfsd-fuse to unbind directory
- Update translations
* Fri Aug 21 2020 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.22-13
- Update simple.xml with layout_variant
* Fri Aug 21 2020 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.22-12
- Generate simple.xml with denylist
- Tell Pango about the engine language in the candidate panel
- Add file list in registry file for Silverblue
* Tue Jul 28 2020 Adam Jackson <ajax@redhat.com> - 1.5.22-11
- Require setxkbmap not xorg-x11-xkb-utils
* Tue Jul 28 2020 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.22-10
- Delete _python_bytecompile_extra
- Update CI from ibus-typing-booster
* Tue Jul 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1.5.22-9
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Tue May 26 2020 Miro Hrončok <mhroncok@redhat.com> - 1.5.22-8
- Rebuilt for Python 3.9
* Fri May 15 2020 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.22-7
- Resolves #1797726 bus_engine_proxy_new_internal() SIGTRAP
* Fri May 15 2020 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.22-6
- Update HEAD.patch to make parallel dict build
- Update 1385349-segv-bus-proxy.patch
- Resolves #1767976 #1601577 #1771238 #1797120
* Wed Apr 22 2020 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.22-5
- Update ibus-desktop-testing-runner for su command
* Wed Mar 11 2020 Adam Williamson <awilliam@redhat.com> - 1.5.22-4
- Update #2195 patch backport (it was revised upstream)
* Wed Mar 11 2020 Adam Williamson <awilliam@redhat.com> - 1.5.22-3
- Backport PR #2195 to fix ibus with GNOME 3.36.0
* Tue Feb 25 2020 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.22-2
- Bug 1805634 - Add a conditional requires ibus-gtk2 with gtk2
* Thu Feb 13 2020 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.22-1
- Bump to 1.5.22
- Delete package depending ibus-gtk2
* Thu Feb 13 2020 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.21-9
- Bug 1785276 - Fix abrt without XDG_CACHE_HOME/ibus
- Bug 1788754 - Fix abrt with NULL output of compose keys
- Bug 1787732 - Fix abrt in exit handlers in ibus-x11
- Bug 1795499 - Fix abrt in bus monitor handlers when ibus-daemon restarts
- Fix greek cases
- Increase sleep 3 to wait for running ibus-config in CI.
* Wed Jan 29 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1.5.21-8
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
* Thu Dec 26 2019 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.21-7
- Revise the previous Hangul patch
* Tue Dec 24 2019 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.21-6
- Fix to connect button-press-event for Hangul
- Delete a previous workaround targeted to firefox only for Hangul
* Wed Dec 11 2019 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.21-5
- Add RHEL code reviews
- Fix Hangul preedit with mouse click
* Mon Nov 18 2019 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.21-4
- Replace push with cd for Posix SH
- Use XDG_CONFIG_HOME for Unix socket directory
- Fix deprecated APIs
- Fix restart crash with inotify read()
- Fix Bug 1658187 exit `ibus emoji` with Escape key
- Add fr(bepo_afnor) keymap
- Add file list in registry file for Silverblue
* Fri Oct 04 2019 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.21-3
- Fix to allocate compose output buffer with more than two chars
* Fri Sep 13 2019 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.21-2
- Fix #1751940 - CVE-2019-14822 GDBusServer peer authorization
* Fri Aug 23 2019 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.21-1
- Bump to 1.5.21
* Mon Aug 19 2019 Miro Hrončok <mhroncok@redhat.com> - 1.5.20-11
- Rebuilt for Python 3.8
* Tue Aug 13 2019 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.20-10
- Update ibus-desktop-testing-runner not to fail CI.
* Tue Aug 06 2019 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.20-9
- ibus-daemon always will exits with parent's death.
* Wed Jul 31 2019 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.20-8
- Fix a wrong result in direct testing instead of GNOME desktop testing
* Mon Jul 29 2019 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.20-7
- Add CI
* Fri Jul 26 2019 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.20-6
- Update ibus-HEAD.patch from upstream
Integrate a new compose feature
Generate ibus-tests and ibus-desktop-testing sub packages
* Thu Jul 25 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1.5.20-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
* Mon May 13 2019 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.20-4
- Keep preedit cursor_pos and visible in clearing preedit text for Hangul
* Tue Apr 23 2019 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.20-3
- Fix i18n ibus-setup
- Provide ibus.its
* Tue Apr 16 2019 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.20-2
- Rebuilt for unicode-ucd- 12.0.0
* Thu Feb 28 2019 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.20-1
- Bumped to 1.5.20
* Thu Feb 28 2019 Pete Walter <pwalter@fedoraproject.org> - 1.5.19-18
- Update wayland deps
* Fri Feb 22 2019 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.19-17
- Delete dconf dependencies and gettext migration for gschema.xml file
- Delete Super-space notification in initial login in non-GNOME desktops
* Tue Feb 05 2019 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.19-16
- Resolves: #1671286 wrong mutex
* Mon Feb 04 2019 Kalev Lember <klember@redhat.com> - 1.5.19-15
- Update BRs for vala packaging changes
- Co-own vala and gir directories
* Fri Feb 01 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1.5.19-14
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
* Tue Jan 29 2019 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.19-13
- Resolves: #1470673 Replace assert with warning for .XCompose
- Update APIs for Hangul preedit in Flatpak
- Fix Atom and Slack for Flatpak
- Resolves: #1663528 Check if the mutex is not unlocked before the clear
* Thu Dec 20 2018 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.19-12
- Use ISO 639-3 names instead of 639
- Connect to button-press-event only with IBUS_ENGINE_PREEDIT_COMMIT
* Wed Dec 12 2018 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.19-11
- Fix SEGV on mouse clicks when ibus-daemon not running
* Mon Dec 10 2018 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.19-10
- Always reset and clear preedit on mouse click
- Show compose preedit with custom compose file
- Clear preedit in IBusEngineSimple with focus changes
- Obsolete ibus-xkbc since Fedora 30
* Thu Nov 15 2018 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.19-9
- Detect mouse click to commit Hangul preedit
- Do not delete IBUS_CAP_SURROUNDING_TEXT
* Tue Nov 06 2018 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.19-8
- Reverted noarch for devel-docs by mistake
* Wed Oct 31 2018 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.19-7
- RHEL code reviews
* Fri Oct 26 2018 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.19-6
- dbus-x11 is not required in Fedora 30
- Add Conflicts for Fedora 28
* Tue Oct 23 2018 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.19-5
- Use __python3 instead of python3
- Delete Requires ibus in ibus-gtk* for Flatpak
- Update upstreamed patches
* Wed Oct 10 2018 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.19-3
* Fri Sep 14 2018 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.19-4
- Fix Bug SEGV Choose an emoji by mouse from the emoji category list
* Thu Aug 30 2018 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.19-3
- Fix Bug 1618682 - SEGV with ASCII on emojier in Wayland
- Support Shift-Space on emojier preedit
- Do not move Emojier popup with the active candidate in Xorg
- Do not clear Unicode data when emoji annotation lang is changed
* Thu Sep 20 2018 Tomas Orsava <torsava@redhat.com> - 1.5.19-2
- Require the Python interpreter directly instead of using the package name
- Related: rhbz#1619153
* Wed Aug 22 2018 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.19-2
- Do not clear Unicode data when emoji annotation lang is changed
* Wed Aug 08 2018 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.19-1
- Bumped to 1.5.19