Compare commits
No commits in common. "c8" and "c9-beta" have entirely different histories.
3
.gitignore
vendored
3
.gitignore
vendored
@ -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
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
--
|
||||
2.17.1
|
||||
+#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.24.1
|
||||
|
||||
|
@ -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
|
||||
|
3286
SOURCES/ibus-1616-gtk4-sync.patch
Normal file
3286
SOURCES/ibus-1616-gtk4-sync.patch
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
37
SOURCES/ibus-xx-desktop-testing-mutter.patch
Normal file
37
SOURCES/ibus-xx-desktop-testing-mutter.patch
Normal 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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
459
SPECS/ibus.spec
459
SPECS/ibus.spec
@ -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,54 @@
|
||||
|
||||
%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: 6%{?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
|
||||
# RHEL-1616
|
||||
Patch1: %{name}-1616-gtk4-sync.patch
|
||||
# Under testing #1349148 #1385349 #1350291 #1406699 #1432252 #1601577
|
||||
Patch2: %{name}-1385349-segv-bus-proxy.patch
|
||||
%if 0%{?fedora:0}%{?rhel:1}
|
||||
# Use mutter window manager in RHEL CI
|
||||
Patch3: %{name}-xx-desktop-testing-mutter.patch
|
||||
%endif
|
||||
|
||||
BuildRequires: gettext-devel
|
||||
BuildRequires: libtool
|
||||
@ -69,7 +62,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 +74,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 +93,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 +107,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 +131,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 +146,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 +158,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 +165,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 +192,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 +208,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 +223,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 +230,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 +242,6 @@ docs for ibus.
|
||||
|
||||
%package devel-docs
|
||||
Summary: Developer documents for IBus
|
||||
Group: Development/Libraries
|
||||
BuildArch: noarch
|
||||
|
||||
%description devel-docs
|
||||
@ -259,8 +249,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,8 +265,7 @@ desktop testing runner internally.
|
||||
|
||||
%package tests
|
||||
Summary: Tests for the %{name} package
|
||||
Group: Development/Libraries
|
||||
Requires: %{name}%{?_isa} = %{version}-%{release}
|
||||
Requires: %{name}%{?_isa} = %{version}-%{release}
|
||||
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
|
||||
|
||||
%description tests
|
||||
@ -283,17 +276,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 +291,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 +306,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 +319,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 +347,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 +391,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 +445,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 +454,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 +489,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 +513,269 @@ 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
|
||||
* Tue Jul 30 2024 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.25-6
|
||||
- Resolves: RHEL-39398 ship ibus-gtk4 in RHEL 9 CRB
|
||||
|
||||
* 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
|
||||
* Wed Nov 15 2023 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.25-5
|
||||
- Resolves: RHEL-1616 Fix RESOURCE_LEAK in OpenScanHub
|
||||
|
||||
* 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 Oct 30 2023 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.25-4
|
||||
- Resolves: RHEL-1616 Make ibus-tests to depend on ibus-libs
|
||||
|
||||
* Thu Jan 09 2020 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.19-11
|
||||
- Resolves: #1750836 - Fix CVE-2019-14822
|
||||
* Tue Oct 24 2023 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.25-3
|
||||
- Resolves: RHEL-1616 Space, back-spc, enter key not working on gtk4
|
||||
|
||||
* Thu Dec 12 2019 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.19-10
|
||||
- Resolves: #1750836 - Revert Hangul fix for 8.2 schedule
|
||||
* Mon Oct 04 2021 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.25-2
|
||||
- Fix wrong cursor location in gtk3. Related: rhbz#2008359
|
||||
|
||||
* Tue Dec 03 2019 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.19-9
|
||||
- Resolves: #1682157 - Fix RHEL 8.2 covscan #2
|
||||
* Fri Aug 20 2021 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.25-1
|
||||
- Bump to 1.5.25. Related: rhbz#1995528
|
||||
|
||||
* Sat Nov 30 2019 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.19-8
|
||||
- Resolves: #1682157 - Fix libibus dependency in ibus-tests with rpmdiff
|
||||
* 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
|
||||
|
||||
* Fri Nov 29 2019 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.19-7
|
||||
- Resolves: #1682157 - Fix RHEL 8.2 covscan
|
||||
* 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
|
||||
|
||||
* Fri Nov 29 2019 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.19-6
|
||||
- Resolves: #1682157 - Add CI
|
||||
* Wed May 26 2021 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.24-6
|
||||
- Fix minor covscan reviews. Related: rhbz#1963071
|
||||
|
||||
* 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
|
||||
* Fri May 21 2021 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.24-5
|
||||
- Fix covscan reviews. Related: rhbz#1963071
|
||||
|
||||
* Tue Nov 06 2018 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.19-4
|
||||
- Implement ibus_im_context_set_surrounding_with_selection()
|
||||
|
||||
* 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
|
||||
|
||||
* 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
|
||||
|
||||
* Sat Mar 20 2021 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.24-2
|
||||
- Change default session to mutter from gnome in desktop-testing
|
||||
|
||||
* 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
|
||||
|
Loading…
Reference in New Issue
Block a user