Compare commits
No commits in common. "c8" and "c9s-ci" have entirely different histories.
64
.gitignore
vendored
64
.gitignore
vendored
@ -1,2 +1,62 @@
|
||||
SOURCES/ibus-1.5.19.tar.gz
|
||||
SOURCES/ibus-po-1.5.19-20210706.tar.gz
|
||||
/cldr-emoji-annotation-30.0.3_2.tar.gz
|
||||
/ibus-gjs-3.0.2.20110823.tar.gz
|
||||
/ibus-gjs-3.1.4.20110823.tar.gz
|
||||
/ibus-gjs-3.0.2.20110908.tar.gz
|
||||
/ibus-gjs-3.1.91.20110908.tar.gz
|
||||
/ibus-gjs-3.1.91.20110913.tar.gz
|
||||
/ibus-gjs-3.0.2.20110928.tar.gz
|
||||
/ibus-gjs-3.2.0.20110928.tar.gz
|
||||
/ibus-gjs-3.0.2.20111018.tar.gz
|
||||
/ibus-gjs-3.2.0.20111018.tar.gz
|
||||
/ibus-gjs-3.2.1.20111021.tar.gz
|
||||
/ibus-gjs-3.0.2.20111028.tar.gz
|
||||
/ibus-gjs-3.2.1.20111028.tar.gz
|
||||
/ibus-gjs-3.0.2.20111104.tar.gz
|
||||
/ibus-gjs-3.2.1.20111104.tar.gz
|
||||
/ibus-gjs-3.0.2.20111118.tar.gz
|
||||
/ibus-gjs-3.2.1.20111118.tar.gz
|
||||
/ibus-gjs-3.2.1.20111128.tar.gz
|
||||
/ibus-gjs-3.2.1.20111230.tar.gz
|
||||
/ibus-gjs-3.3.3.20120203.tar.gz
|
||||
/ibus-gjs-3.3.90.20120308.tar.gz
|
||||
/ibus-gjs-3.3.90.20120317.tar.gz
|
||||
/ibus-gjs-3.3.92.20120327.tar.gz
|
||||
/ibus-gjs-3.4.1.20120428.tar.gz
|
||||
/ibus-gjs-3.4.1.20120518.tar.gz
|
||||
/ibus-gjs-3.4.1.20120815.tar.gz
|
||||
/ibus-gjs-3.4.1.20130115.tar.gz
|
||||
/ibus-xkb-1.5.0.tar.gz
|
||||
/ibus-xkb-1.5.0.20140114.tar.gz
|
||||
/ibus-po-1.5.22-20200914.tar.gz
|
||||
/ibus-simple-1.5.22.20200909.xml.gz
|
||||
ibus-1.3.6.tar.gz
|
||||
/ibus-1.3.7.tar.gz
|
||||
/ibus-1.3.8.tar.gz
|
||||
/ibus-1.3.9.tar.gz
|
||||
/ibus-1.4.0.tar.gz
|
||||
/ibus-1.4.1.tar.gz
|
||||
/ibus-1.5.1.tar.gz
|
||||
/ibus-1.5.2.tar.gz
|
||||
/ibus-1.5.3.tar.gz
|
||||
/ibus-1.5.4.tar.gz
|
||||
/ibus-1.5.5.tar.gz
|
||||
/ibus-1.5.6.tar.gz
|
||||
/ibus-1.5.7.tar.gz
|
||||
/ibus-1.5.8.tar.gz
|
||||
/ibus-1.5.9.tar.gz
|
||||
/ibus-1.5.10.tar.gz
|
||||
/ibus-1.5.11.tar.gz
|
||||
/ibus-1.5.12.tar.gz
|
||||
/ibus-1.5.13.tar.gz
|
||||
/ibus-1.5.14.tar.gz
|
||||
/ibus-1.5.15.tar.gz
|
||||
/ibus-1.5.16.tar.gz
|
||||
/ibus-1.5.17.tar.gz
|
||||
/ibus-1.5.18.tar.gz
|
||||
/ibus-1.5.19.tar.gz
|
||||
/ibus-1.5.20.tar.gz
|
||||
/ibus-1.5.21.tar.gz
|
||||
/ibus-1.5.22.tar.gz
|
||||
/ibus-1.5.23.tar.gz
|
||||
/ibus-1.5.24.tar.gz
|
||||
/ibus-1.5.25.tar.gz
|
||||
|
@ -1,2 +0,0 @@
|
||||
fdda025d81247e40ad7acf953c2a0a606d18e965 SOURCES/ibus-1.5.19.tar.gz
|
||||
236f5dc3c072d0587e107ae75084454c791bbf73 SOURCES/ibus-po-1.5.19-20210706.tar.gz
|
@ -1,214 +0,0 @@
|
||||
From 865b204f1c06b782cf7b4a479b358e76f4b3dfee 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()
|
||||
|
||||
BUG=rhbz#1349148
|
||||
BUG=rhbz#1385349
|
||||
BUG=rhbz#1350291
|
||||
BUG=rhbz#1406699
|
||||
BUG=rhbz#1432252
|
||||
BUG=rhbz#1601577
|
||||
---
|
||||
bus/dbusimpl.c | 38 ++++++++++++++++++++++++++++++++------
|
||||
bus/engineproxy.c | 5 ++++-
|
||||
bus/ibusimpl.c | 21 ++++++++++++++++++---
|
||||
3 files changed, 54 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/bus/dbusimpl.c b/bus/dbusimpl.c
|
||||
index b54ef817..e4dd8683 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)
|
||||
{
|
||||
+ gboolean has_old_owner = FALSE;
|
||||
+
|
||||
g_assert (service != NULL);
|
||||
g_assert (owner != NULL);
|
||||
g_assert (dbus != NULL);
|
||||
@@ -351,6 +354,13 @@ bus_name_service_set_primary_owner (BusNameService *service,
|
||||
BusConnectionOwner *old = service->owners != NULL ?
|
||||
(BusConnectionOwner *)service->owners->data : NULL;
|
||||
|
||||
+ /* rhbz#1432252 If bus_connection_get_unique_name() == NULL,
|
||||
+ * "Hello" method is not received yet.
|
||||
+ */
|
||||
+ if (old != NULL && bus_connection_get_unique_name (old->conn) != NULL) {
|
||||
+ has_old_owner = TRUE;
|
||||
+ }
|
||||
+
|
||||
if (old != NULL) {
|
||||
g_signal_emit (dbus,
|
||||
dbus_signals[NAME_LOST],
|
||||
@@ -370,7 +380,8 @@ bus_name_service_set_primary_owner (BusNameService *service,
|
||||
0,
|
||||
owner->conn,
|
||||
service->name,
|
||||
- old != NULL ? bus_connection_get_unique_name (old->conn) : "",
|
||||
+ has_old_owner ? bus_connection_get_unique_name (old->conn) :
|
||||
+ "",
|
||||
bus_connection_get_unique_name (owner->conn));
|
||||
|
||||
if (old != NULL && old->do_not_queue != 0) {
|
||||
@@ -427,6 +438,7 @@ bus_name_service_remove_owner (BusNameService *service,
|
||||
BusDBusImpl *dbus)
|
||||
{
|
||||
GSList *owners;
|
||||
+ gboolean has_new_owner = FALSE;
|
||||
|
||||
g_assert (service != NULL);
|
||||
g_assert (owner != NULL);
|
||||
@@ -439,6 +451,13 @@ bus_name_service_remove_owner (BusNameService *service,
|
||||
BusConnectionOwner *_new = NULL;
|
||||
if (owners->next != NULL) {
|
||||
_new = (BusConnectionOwner *)owners->next->data;
|
||||
+ /* rhbz#1406699 If bus_connection_get_unique_name() == NULL,
|
||||
+ * "Hello" method is not received yet.
|
||||
+ */
|
||||
+ if (_new != NULL &&
|
||||
+ bus_connection_get_unique_name (_new->conn) != NULL) {
|
||||
+ has_new_owner = TRUE;
|
||||
+ }
|
||||
}
|
||||
|
||||
if (dbus != NULL) {
|
||||
@@ -447,7 +466,7 @@ bus_name_service_remove_owner (BusNameService *service,
|
||||
0,
|
||||
owner->conn,
|
||||
service->name);
|
||||
- if (_new != NULL) {
|
||||
+ if (has_new_owner) {
|
||||
g_signal_emit (dbus,
|
||||
dbus_signals[NAME_ACQUIRED],
|
||||
0,
|
||||
@@ -460,7 +479,7 @@ bus_name_service_remove_owner (BusNameService *service,
|
||||
_new != NULL ? _new->conn : NULL,
|
||||
service->name,
|
||||
bus_connection_get_unique_name (owner->conn),
|
||||
- _new != NULL ? bus_connection_get_unique_name (_new->conn) : "");
|
||||
+ has_new_owner ? bus_connection_get_unique_name (_new->conn) : "");
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1464,13 +1483,20 @@ bus_dbus_impl_connection_filter_cb (GDBusConnection *dbus_connection,
|
||||
gboolean incoming,
|
||||
gpointer user_data)
|
||||
{
|
||||
+ BusDBusImpl *dbus;
|
||||
+ BusConnection *connection;
|
||||
+
|
||||
g_assert (G_IS_DBUS_CONNECTION (dbus_connection));
|
||||
g_assert (G_IS_DBUS_MESSAGE (message));
|
||||
g_assert (BUS_IS_DBUS_IMPL (user_data));
|
||||
|
||||
- BusDBusImpl *dbus = (BusDBusImpl *) user_data;
|
||||
- BusConnection *connection = bus_connection_lookup (dbus_connection);
|
||||
+ if (g_dbus_connection_is_closed (dbus_connection))
|
||||
+ return NULL;
|
||||
+
|
||||
+ dbus = (BusDBusImpl *) user_data;
|
||||
+ connection = bus_connection_lookup (dbus_connection);
|
||||
g_assert (connection != NULL);
|
||||
+ g_assert (BUS_IS_CONNECTION (connection));
|
||||
|
||||
if (incoming) {
|
||||
/* is incoming message */
|
||||
diff --git a/bus/engineproxy.c b/bus/engineproxy.c
|
||||
index 2d98995c..d661673a 100644
|
||||
--- a/bus/engineproxy.c
|
||||
+++ b/bus/engineproxy.c
|
||||
@@ -665,6 +665,7 @@ bus_engine_proxy_new_internal (const gchar *path,
|
||||
IBusEngineDesc *desc,
|
||||
GDBusConnection *connection)
|
||||
{
|
||||
+ GError *error = NULL;
|
||||
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 =
|
||||
(BusEngineProxy *) g_initable_new (BUS_TYPE_ENGINE_PROXY,
|
||||
NULL,
|
||||
- NULL,
|
||||
+ &error,
|
||||
"desc", desc,
|
||||
"g-connection", connection,
|
||||
"g-interface-name", IBUS_INTERFACE_ENGINE,
|
||||
@@ -681,6 +682,8 @@ 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);
|
||||
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);
|
||||
}
|
||||
--
|
||||
2.17.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
|
||||
|
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
|
||||
|
@ -1,920 +0,0 @@
|
||||
From 7edaefdc1d80aefdbbc2dc52526c20715759da83 Mon Sep 17 00:00:00 2001
|
||||
From: fujiwarat <takao.fujiwara1@gmail.com>
|
||||
Date: Wed, 22 Aug 2018 17:20:53 +0900
|
||||
Subject: [PATCH] ui/gtk3: Do not clear unicode data when emoji annotation lang
|
||||
is changed
|
||||
|
||||
---
|
||||
ui/gtk3/emojier.vala | 8 ++++++--
|
||||
1 file changed, 6 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/ui/gtk3/emojier.vala b/ui/gtk3/emojier.vala
|
||||
index 85dcdceb..637ae049 100644
|
||||
--- a/ui/gtk3/emojier.vala
|
||||
+++ b/ui/gtk3/emojier.vala
|
||||
@@ -440,13 +440,17 @@ public class IBusEmojier : Gtk.ApplicationWindow {
|
||||
m_emoji_to_emoji_variants_dict =
|
||||
new GLib.HashTable<string, GLib.SList<string>>(GLib.str_hash,
|
||||
GLib.str_equal);
|
||||
- m_unicode_to_data_dict =
|
||||
+ if (m_unicode_to_data_dict == null) {
|
||||
+ m_unicode_to_data_dict =
|
||||
new GLib.HashTable<unichar, IBus.UnicodeData>(
|
||||
GLib.direct_hash,
|
||||
GLib.direct_equal);
|
||||
- m_name_to_unicodes_dict =
|
||||
+ }
|
||||
+ if (m_name_to_unicodes_dict == null) {
|
||||
+ m_name_to_unicodes_dict =
|
||||
new GLib.HashTable<string, GLib.SList<unichar>>(GLib.str_hash,
|
||||
GLib.str_equal);
|
||||
+ }
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
2.17.1
|
||||
|
||||
From 28d22176aee6be97d88dd6c60fa5395c79563ec0 Mon Sep 17 00:00:00 2001
|
||||
From: fujiwarat <takao.fujiwara1@gmail.com>
|
||||
Date: Thu, 30 Aug 2018 12:57:33 +0900
|
||||
Subject: [PATCH] ui/gtk3: Fix SEGV when type ASCII on emojier
|
||||
|
||||
Emojier still included Gtk.Entry, accepted key events in Wayland,
|
||||
reset the lookup table and it caused SEGV because IBus.Text
|
||||
is NULL in the lookup table in Emojier.get_current_candidate().
|
||||
Now Gtk.Entry is deleted completely.
|
||||
|
||||
BUG=rhbz#1618682
|
||||
---
|
||||
ui/gtk3/emojier.vala | 139 +------------------------------------------
|
||||
1 file changed, 1 insertion(+), 138 deletions(-)
|
||||
|
||||
diff --git a/ui/gtk3/emojier.vala b/ui/gtk3/emojier.vala
|
||||
index 637ae049..0f455800 100644
|
||||
--- a/ui/gtk3/emojier.vala
|
||||
+++ b/ui/gtk3/emojier.vala
|
||||
@@ -283,7 +283,6 @@ public class IBusEmojier : Gtk.ApplicationWindow {
|
||||
|
||||
private ThemedRGBA m_rgba;
|
||||
private Gtk.Box m_vbox;
|
||||
- private EEntry m_entry;
|
||||
/* If emojier is emoji category list or Unicode category list,
|
||||
* m_annotation is "" and preedit is also "".
|
||||
* If emojier is candidate mode, m_annotation is an annotation and
|
||||
@@ -367,23 +366,6 @@ public class IBusEmojier : Gtk.ApplicationWindow {
|
||||
m_vbox = new Gtk.Box(Gtk.Orientation.VERTICAL, 0);
|
||||
add(m_vbox);
|
||||
|
||||
- m_entry = new EEntry();
|
||||
- m_entry.set_placeholder_text(_("Type annotation or choose emoji"));
|
||||
- //m_vbox.add(m_entry);
|
||||
- m_entry.changed.connect(() => {
|
||||
- update_candidate_window();
|
||||
- });
|
||||
- m_entry.icon_release.connect((icon_pos, event) => {
|
||||
- hide_candidate_panel();
|
||||
- });
|
||||
-
|
||||
- /* Set the accessible role of the label to a status bar so it
|
||||
- * will emit name changed events that can be used by screen
|
||||
- * readers.
|
||||
- */
|
||||
- Atk.Object obj = m_entry.get_accessible();
|
||||
- obj.set_role (Atk.Role.STATUSBAR);
|
||||
-
|
||||
// The constructor of IBus.LookupTable does not support more than
|
||||
// 16 pages.
|
||||
m_lookup_table = new IBus.LookupTable(1, 0, true, true);
|
||||
@@ -1806,18 +1788,6 @@ public class IBusEmojier : Gtk.ApplicationWindow {
|
||||
m_lookup_table.cursor_up();
|
||||
else if (keyval == Gdk.Key.Right)
|
||||
m_lookup_table.cursor_down();
|
||||
- } else if (m_entry.get_text().length > 0) {
|
||||
- int step = 0;
|
||||
- if (keyval == Gdk.Key.Left)
|
||||
- step = -1;
|
||||
- else if (keyval == Gdk.Key.Right)
|
||||
- step = 1;
|
||||
- GLib.Signal.emit_by_name(
|
||||
- m_entry, "move-cursor",
|
||||
- Gtk.MovementStep.VISUAL_POSITIONS,
|
||||
- step,
|
||||
- (modifiers & Gdk.ModifierType.SHIFT_MASK) != 0
|
||||
- ? true : false);
|
||||
} else {
|
||||
// For Gdk.Key.f and Gdk.Key.b
|
||||
if (keyval == Gdk.Key.Left)
|
||||
@@ -1880,20 +1850,6 @@ public class IBusEmojier : Gtk.ApplicationWindow {
|
||||
}
|
||||
return true;
|
||||
}
|
||||
- if (m_entry.get_text().length > 0) {
|
||||
- int step = 0;
|
||||
- if (keyval == Gdk.Key.Home)
|
||||
- step = -1;
|
||||
- else if (keyval == Gdk.Key.End)
|
||||
- step = 1;
|
||||
- GLib.Signal.emit_by_name(
|
||||
- m_entry, "move-cursor",
|
||||
- Gtk.MovementStep.DISPLAY_LINE_ENDS,
|
||||
- step,
|
||||
- (modifiers & Gdk.ModifierType.SHIFT_MASK) != 0
|
||||
- ? true : false);
|
||||
- return true;
|
||||
- }
|
||||
return category_list_cursor_move(keyval);
|
||||
}
|
||||
|
||||
@@ -1941,28 +1897,6 @@ public class IBusEmojier : Gtk.ApplicationWindow {
|
||||
}
|
||||
|
||||
|
||||
- private void entry_enter_keyval(uint keyval) {
|
||||
- unichar ch = IBus.keyval_to_unicode(keyval);
|
||||
- if (ch.iscntrl())
|
||||
- return;
|
||||
- string str = ch.to_string();
|
||||
-
|
||||
- // what gtk_entry_commit_cb() do
|
||||
- if (m_entry.get_selection_bounds(null, null)) {
|
||||
- m_entry.delete_selection();
|
||||
- } else {
|
||||
- if (m_entry.get_overwrite_mode()) {
|
||||
- uint text_length = m_entry.get_buffer().get_length();
|
||||
- if (m_entry.cursor_position < text_length)
|
||||
- m_entry.delete_from_cursor(Gtk.DeleteType.CHARS, 1);
|
||||
- }
|
||||
- }
|
||||
- int pos = m_entry.get_position();
|
||||
- m_entry.insert_text(str, -1, ref pos);
|
||||
- m_entry.set_position(pos);
|
||||
- }
|
||||
-
|
||||
-
|
||||
private Gdk.Rectangle get_monitor_geometry() {
|
||||
Gdk.Rectangle monitor_area = { 0, };
|
||||
|
||||
@@ -2245,10 +2179,7 @@ public class IBusEmojier : Gtk.ApplicationWindow {
|
||||
/* Let gtk recalculate the window size. */
|
||||
resize(1, 1);
|
||||
|
||||
- m_entry.set_text("");
|
||||
-
|
||||
show_category_list();
|
||||
- m_entry.set_activates_default(true);
|
||||
show_all();
|
||||
|
||||
/* Some window managers, e.g. MATE, GNOME, Plasma desktops,
|
||||
@@ -2289,13 +2220,6 @@ public class IBusEmojier : Gtk.ApplicationWindow {
|
||||
m_loop.run();
|
||||
m_loop = null;
|
||||
|
||||
- // Need focus-out on Gtk.Entry to send the emoji to applications.
|
||||
- Gdk.Event fevent = new Gdk.Event(Gdk.EventType.FOCUS_CHANGE);
|
||||
- fevent.focus_change.in = 0;
|
||||
- fevent.focus_change.window = get_window();
|
||||
- m_entry.send_focus_change(fevent);
|
||||
- fevent.focus_change.window = null;
|
||||
-
|
||||
hide();
|
||||
// Make sure the switcher is hidden before returning from this function.
|
||||
while (Gtk.events_pending())
|
||||
@@ -2357,36 +2281,9 @@ public class IBusEmojier : Gtk.ApplicationWindow {
|
||||
hide();
|
||||
}
|
||||
return true;
|
||||
- case Gdk.Key.BackSpace:
|
||||
- if (m_entry.get_text().length > 0) {
|
||||
- if ((modifiers & Gdk.ModifierType.CONTROL_MASK) != 0) {
|
||||
- GLib.Signal.emit_by_name(m_entry, "delete-from-cursor",
|
||||
- Gtk.DeleteType.WORD_ENDS, -1);
|
||||
- } else {
|
||||
- GLib.Signal.emit_by_name(m_entry, "backspace");
|
||||
- }
|
||||
- return true;
|
||||
- }
|
||||
- break;
|
||||
- case Gdk.Key.Delete:
|
||||
- case Gdk.Key.KP_Delete:
|
||||
- if (m_entry.get_text().length > 0) {
|
||||
- if ((modifiers & Gdk.ModifierType.CONTROL_MASK) != 0) {
|
||||
- GLib.Signal.emit_by_name(m_entry, "delete-from-cursor",
|
||||
- Gtk.DeleteType.WORD_ENDS, 1);
|
||||
- } else {
|
||||
- GLib.Signal.emit_by_name(m_entry, "delete-from-cursor",
|
||||
- Gtk.DeleteType.CHARS, 1);
|
||||
- }
|
||||
- return true;
|
||||
- }
|
||||
- break;
|
||||
case Gdk.Key.space:
|
||||
case Gdk.Key.KP_Space:
|
||||
- if ((modifiers & Gdk.ModifierType.SHIFT_MASK) != 0) {
|
||||
- if (m_entry.get_text().length > 0)
|
||||
- entry_enter_keyval(keyval);
|
||||
- } else if (m_candidate_panel_is_visible) {
|
||||
+ if (m_candidate_panel_is_visible) {
|
||||
enter_notify_disable_with_timer();
|
||||
m_lookup_table.cursor_down();
|
||||
show_candidate_panel();
|
||||
@@ -2436,10 +2333,6 @@ public class IBusEmojier : Gtk.ApplicationWindow {
|
||||
key_press_cursor_home_end(Gdk.Key.End, modifiers);
|
||||
show_all();
|
||||
return true;
|
||||
- case Gdk.Key.Insert:
|
||||
- case Gdk.Key.KP_Insert:
|
||||
- GLib.Signal.emit_by_name(m_entry, "toggle-overwrite");
|
||||
- return true;
|
||||
}
|
||||
|
||||
if ((modifiers & Gdk.ModifierType.CONTROL_MASK) != 0) {
|
||||
@@ -2470,27 +2363,6 @@ public class IBusEmojier : Gtk.ApplicationWindow {
|
||||
key_press_cursor_home_end(Gdk.Key.End, modifiers);
|
||||
show_all();
|
||||
return true;
|
||||
- case Gdk.Key.u:
|
||||
- if (m_entry.get_text().length > 0) {
|
||||
- GLib.Signal.emit_by_name(m_entry,
|
||||
- "delete-from-cursor",
|
||||
- Gtk.DeleteType.PARAGRAPH_ENDS,
|
||||
- -1);
|
||||
- return true;
|
||||
- }
|
||||
- break;
|
||||
- case Gdk.Key.a:
|
||||
- if (m_entry.get_text().length > 0) {
|
||||
- m_entry.select_region(0, -1);
|
||||
- return true;
|
||||
- }
|
||||
- break;
|
||||
- case Gdk.Key.x:
|
||||
- if (m_entry.get_text().length > 0) {
|
||||
- GLib.Signal.emit_by_name(m_entry, "cut-clipboard");
|
||||
- return true;
|
||||
- }
|
||||
- break;
|
||||
case Gdk.Key.C:
|
||||
case Gdk.Key.c:
|
||||
if ((modifiers & Gdk.ModifierType.SHIFT_MASK) != 0) {
|
||||
@@ -2503,19 +2375,11 @@ public class IBusEmojier : Gtk.ApplicationWindow {
|
||||
clipboard.store();
|
||||
return true;
|
||||
}
|
||||
- } else if (m_entry.get_text().length > 0) {
|
||||
- GLib.Signal.emit_by_name(m_entry, "copy-clipboard");
|
||||
- return true;
|
||||
}
|
||||
break;
|
||||
- case Gdk.Key.v:
|
||||
- GLib.Signal.emit_by_name(m_entry, "paste-clipboard");
|
||||
- return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
-
|
||||
- entry_enter_keyval(keyval);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -2595,7 +2459,6 @@ public class IBusEmojier : Gtk.ApplicationWindow {
|
||||
|
||||
uint32 timestamp = event.get_time();
|
||||
present_with_time(timestamp);
|
||||
- m_entry.set_activates_default(true);
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
2.17.1
|
||||
|
||||
From e6badb494e0a31b7aca3a5078a5dc5b27b83390d Mon Sep 17 00:00:00 2001
|
||||
From: fujiwarat <takao.fujiwara1@gmail.com>
|
||||
Date: Thu, 30 Aug 2018 12:57:46 +0900
|
||||
Subject: [PATCH] ui/gtk3: Support Shift-Space to insert a Space on Emojier
|
||||
preedit
|
||||
|
||||
Implemented Shift-Space on preedit since Shift-Space had worked on
|
||||
Emojier's GtkEntry in the previous release.
|
||||
---
|
||||
ui/gtk3/panelbinding.vala | 27 ++++++++++++++++++++-------
|
||||
1 file changed, 20 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/ui/gtk3/panelbinding.vala b/ui/gtk3/panelbinding.vala
|
||||
index 981b5509..4ebff8da 100644
|
||||
--- a/ui/gtk3/panelbinding.vala
|
||||
+++ b/ui/gtk3/panelbinding.vala
|
||||
@@ -548,6 +548,19 @@ class PanelBinding : IBus.PanelService {
|
||||
}
|
||||
|
||||
|
||||
+ private bool key_press_keyval(uint keyval) {
|
||||
+ unichar ch = IBus.keyval_to_unicode(keyval);
|
||||
+ if (ch.iscntrl())
|
||||
+ return false;
|
||||
+ string str = ch.to_string();
|
||||
+ m_preedit.append_text(str);
|
||||
+ string annotation = m_preedit.get_text();
|
||||
+ m_emojier.set_annotation(annotation);
|
||||
+ m_preedit.set_emoji("");
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+
|
||||
private bool key_press_enter() {
|
||||
if (m_extension_name != "unicode" && is_emoji_lookup_table()) {
|
||||
// Check if variats exist
|
||||
@@ -899,6 +912,12 @@ class PanelBinding : IBus.PanelService {
|
||||
break;
|
||||
case Gdk.Key.space:
|
||||
case Gdk.Key.KP_Space:
|
||||
+ if ((modifiers & Gdk.ModifierType.SHIFT_MASK) != 0) {
|
||||
+ if (!key_press_keyval(keyval))
|
||||
+ return true;
|
||||
+ show_candidate = is_emoji_lookup_table();
|
||||
+ break;
|
||||
+ }
|
||||
show_candidate = key_press_space();
|
||||
if (m_extension_name == "unicode") {
|
||||
key_press_enter();
|
||||
@@ -979,14 +998,8 @@ class PanelBinding : IBus.PanelService {
|
||||
show_candidate = key_press_control_keyval(keyval, modifiers);
|
||||
break;
|
||||
}
|
||||
- unichar ch = IBus.keyval_to_unicode(keyval);
|
||||
- if (ch.iscntrl())
|
||||
+ if (!key_press_keyval(keyval))
|
||||
return true;
|
||||
- string str = ch.to_string();
|
||||
- m_preedit.append_text(str);
|
||||
- string annotation = m_preedit.get_text();
|
||||
- m_emojier.set_annotation(annotation);
|
||||
- m_preedit.set_emoji("");
|
||||
show_candidate = is_emoji_lookup_table();
|
||||
break;
|
||||
}
|
||||
--
|
||||
2.17.1
|
||||
|
||||
From 809d880337e75b7cee429292a238bf53899bef6a Mon Sep 17 00:00:00 2001
|
||||
From: fujiwarat <takao.fujiwara1@gmail.com>
|
||||
Date: Thu, 30 Aug 2018 12:58:57 +0900
|
||||
Subject: [PATCH] ui/gtk3: Do not move Emojier popup with the active
|
||||
candidate in Xorg
|
||||
|
||||
Probably I think it's not useful to change the popup position frequently.
|
||||
The popup size is always slightly changed with the emoji annotation length.
|
||||
---
|
||||
ui/gtk3/emojier.vala | 10 +++++++++-
|
||||
1 file changed, 9 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/ui/gtk3/emojier.vala b/ui/gtk3/emojier.vala
|
||||
index 0f455800..9811fde5 100644
|
||||
--- a/ui/gtk3/emojier.vala
|
||||
+++ b/ui/gtk3/emojier.vala
|
||||
@@ -1944,7 +1944,15 @@ public class IBusEmojier : Gtk.ApplicationWindow {
|
||||
x = 0;
|
||||
|
||||
bool changed = false;
|
||||
- if (window_right_bottom.y > monitor_bottom) {
|
||||
+ // Do not up side down frequently.
|
||||
+ // The first pos does not show the lookup table yet but the
|
||||
+ // preedit only and the second pos shows the lookup table.
|
||||
+ if (m_lookup_table.get_cursor_pos() != 1) {
|
||||
+ if (m_is_up_side_down)
|
||||
+ y = m_cursor_location.y - allocation.height;
|
||||
+ else
|
||||
+ y = cursor_right_bottom.y;
|
||||
+ } else if (window_right_bottom.y > monitor_bottom) {
|
||||
y = m_cursor_location.y - allocation.height;
|
||||
// Do not up side down in Wayland
|
||||
if (m_input_context_path == "") {
|
||||
--
|
||||
2.17.1
|
||||
|
||||
From 1c6565e205528a45e88a84ba2a328f9035875c8d Mon Sep 17 00:00:00 2001
|
||||
From: fujiwarat <takao.fujiwara1@gmail.com>
|
||||
Date: Fri, 14 Sep 2018 16:15:41 +0900
|
||||
Subject: [PATCH] ui/gtk3: Fix SEGV when commit an emoji on Emojier in Wayland
|
||||
|
||||
Just pressing Space key without emoji annotations can launch Emojier
|
||||
popup and the popup takes a focus in Wayland and the chosen emoji is
|
||||
output when the original text application gets the focus after Emojier
|
||||
popup release the focus. Emojier disabled Ctrl-Shift-e after got the focus.
|
||||
But currently GNOME Wayland has a bug not to send focus-in until a
|
||||
key press or mouse click happens [1] and Emojier causes a SEGV.
|
||||
Now Emojier disables Ctrl-Shift-e immediately when an emoji is chosen
|
||||
whether focus-in comes or not and fixes the SEGV.
|
||||
|
||||
[1] https://gitlab.gnome.org/GNOME/gnome-shell/issues/573
|
||||
|
||||
BUG=rhbz#1625187
|
||||
---
|
||||
ui/gtk3/emojier.vala | 63 +++++++-------------------------------
|
||||
ui/gtk3/emojierapp.vala | 2 +-
|
||||
ui/gtk3/panelbinding.vala | 64 ++++++++++++++++++++++++++-------------
|
||||
3 files changed, 55 insertions(+), 74 deletions(-)
|
||||
|
||||
diff --git a/ui/gtk3/emojier.vala b/ui/gtk3/emojier.vala
|
||||
index 9811fde5..e23ef889 100644
|
||||
--- a/ui/gtk3/emojier.vala
|
||||
+++ b/ui/gtk3/emojier.vala
|
||||
@@ -21,17 +21,6 @@
|
||||
*/
|
||||
|
||||
public class IBusEmojier : Gtk.ApplicationWindow {
|
||||
- private class EEntry : Gtk.SearchEntry {
|
||||
- public EEntry() {
|
||||
- GLib.Object(
|
||||
- name : "IBusEmojierEntry",
|
||||
- margin_start : 6,
|
||||
- margin_end : 6,
|
||||
- margin_top : 6,
|
||||
- margin_bottom : 6
|
||||
- );
|
||||
- }
|
||||
- }
|
||||
private class EListBox : Gtk.ListBox {
|
||||
public EListBox() {
|
||||
GLib.Object(
|
||||
@@ -330,6 +319,7 @@ public class IBusEmojier : Gtk.ApplicationWindow {
|
||||
private uint m_redraw_window_id;
|
||||
|
||||
public signal void candidate_clicked(uint index, uint button, uint state);
|
||||
+ public signal void commit_text(string text);
|
||||
|
||||
public IBusEmojier() {
|
||||
GLib.Object(
|
||||
@@ -380,12 +370,6 @@ public class IBusEmojier : Gtk.ApplicationWindow {
|
||||
adjust_window_position();
|
||||
});
|
||||
|
||||
- candidate_clicked.connect((i, b, s) => {
|
||||
- if (m_input_context_path != "")
|
||||
- candidate_panel_select_index(i, b);
|
||||
- });
|
||||
-
|
||||
-
|
||||
if (m_annotation_to_emojis_dict == null) {
|
||||
reload_emoji_dict();
|
||||
}
|
||||
@@ -1641,34 +1625,6 @@ public class IBusEmojier : Gtk.ApplicationWindow {
|
||||
}
|
||||
|
||||
|
||||
- private void candidate_panel_select_index(uint index,
|
||||
- uint button) {
|
||||
- if (button == BUTTON_CLOSE_BUTTON) {
|
||||
- hide();
|
||||
- if (m_candidate_panel_mode &&
|
||||
- m_lookup_table.get_number_of_candidates() > 0) {
|
||||
- // Call remove_all_children() instead of show_category_list()
|
||||
- // so that show_category_list do not remove children with
|
||||
- // PageUp/PageDown.
|
||||
- remove_all_children();
|
||||
- }
|
||||
- m_result = "";
|
||||
- return;
|
||||
- }
|
||||
- string text = m_lookup_table.get_candidate(index).text;
|
||||
- unowned GLib.SList<string>? emojis =
|
||||
- m_emoji_to_emoji_variants_dict.lookup(text);
|
||||
- if (m_show_emoji_variant && emojis != null &&
|
||||
- m_backward_index < 0) {
|
||||
- show_emoji_variants(emojis);
|
||||
- show_all();
|
||||
- } else {
|
||||
- m_result = text;
|
||||
- hide();
|
||||
- }
|
||||
- }
|
||||
-
|
||||
-
|
||||
private void candidate_panel_cursor_down() {
|
||||
enter_notify_disable_with_timer();
|
||||
uint ncandidates = m_lookup_table.get_number_of_candidates();
|
||||
@@ -1762,7 +1718,8 @@ public class IBusEmojier : Gtk.ApplicationWindow {
|
||||
}
|
||||
|
||||
|
||||
- public bool has_variants(uint index) {
|
||||
+ public bool has_variants(uint index,
|
||||
+ bool need_commit_signal) {
|
||||
if (index >= m_lookup_table.get_number_of_candidates())
|
||||
return false;
|
||||
string text = m_lookup_table.get_candidate(index).text;
|
||||
@@ -1773,6 +1730,10 @@ public class IBusEmojier : Gtk.ApplicationWindow {
|
||||
show_emoji_variants(emojis);
|
||||
return true;
|
||||
}
|
||||
+ if (m_input_context_path != "")
|
||||
+ m_result = text;
|
||||
+ if (need_commit_signal)
|
||||
+ commit_text(text);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1881,10 +1842,10 @@ public class IBusEmojier : Gtk.ApplicationWindow {
|
||||
}
|
||||
|
||||
|
||||
- public bool key_press_enter() {
|
||||
+ public bool key_press_enter(bool need_commit_signal) {
|
||||
if (m_candidate_panel_is_visible) {
|
||||
uint index = m_lookup_table.get_cursor_pos();
|
||||
- return has_variants(index);
|
||||
+ return has_variants(index, need_commit_signal);
|
||||
} else if (m_category_active_index >= 0) {
|
||||
Gtk.ListBoxRow gtkrow = m_list_box.get_selected_row();
|
||||
EBoxRow row = gtkrow as EBoxRow;
|
||||
@@ -2282,12 +2243,10 @@ public class IBusEmojier : Gtk.ApplicationWindow {
|
||||
return true;
|
||||
case Gdk.Key.Return:
|
||||
case Gdk.Key.KP_Enter:
|
||||
- if (key_press_enter()) {
|
||||
+ if (key_press_enter(true))
|
||||
show_all();
|
||||
- } else {
|
||||
- m_result = get_current_candidate();
|
||||
+ else
|
||||
hide();
|
||||
- }
|
||||
return true;
|
||||
case Gdk.Key.space:
|
||||
case Gdk.Key.KP_Space:
|
||||
diff --git a/ui/gtk3/emojierapp.vala b/ui/gtk3/emojierapp.vala
|
||||
index 787d448f..fab99d9e 100644
|
||||
--- a/ui/gtk3/emojierapp.vala
|
||||
+++ b/ui/gtk3/emojierapp.vala
|
||||
@@ -65,7 +65,7 @@ public class EmojiApplication : Gtk.Application {
|
||||
uint ncandidates = m_emojier.get_number_of_candidates();
|
||||
if (ncandidates > 0 && ncandidates >= index) {
|
||||
m_emojier.set_cursor_pos(index);
|
||||
- show_candidate = m_emojier.has_variants(index);
|
||||
+ show_candidate = m_emojier.has_variants(index, false);
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
diff --git a/ui/gtk3/panelbinding.vala b/ui/gtk3/panelbinding.vala
|
||||
index 4ebff8da..01c43b0d 100644
|
||||
--- a/ui/gtk3/panelbinding.vala
|
||||
+++ b/ui/gtk3/panelbinding.vala
|
||||
@@ -447,13 +447,19 @@ class PanelBinding : IBus.PanelService {
|
||||
}
|
||||
|
||||
|
||||
- private void commit_text_update_favorites(IBus.Text text) {
|
||||
+ private void commit_text_update_favorites(IBus.Text text,
|
||||
+ bool disable_extension) {
|
||||
commit_text(text);
|
||||
- IBus.ExtensionEvent event = new IBus.ExtensionEvent(
|
||||
+
|
||||
+ // If disable_extension is false, the extension event is already
|
||||
+ // sent before the focus-in is received.
|
||||
+ if (disable_extension) {
|
||||
+ IBus.ExtensionEvent event = new IBus.ExtensionEvent(
|
||||
"name", m_extension_name,
|
||||
"is-enabled", false,
|
||||
"is-extension", true);
|
||||
- panel_extension(event);
|
||||
+ panel_extension(event);
|
||||
+ }
|
||||
string committed_string = text.text;
|
||||
string preedit_string = m_preedit.get_text();
|
||||
m_preedit.hide();
|
||||
@@ -482,7 +488,7 @@ class PanelBinding : IBus.PanelService {
|
||||
prev_context_path != "" &&
|
||||
prev_context_path == m_current_context_path) {
|
||||
IBus.Text text = new IBus.Text.from_string(selected_string);
|
||||
- commit_text_update_favorites(text);
|
||||
+ commit_text_update_favorites(text, false);
|
||||
m_emojier.reset();
|
||||
return true;
|
||||
}
|
||||
@@ -564,13 +570,13 @@ class PanelBinding : IBus.PanelService {
|
||||
private bool key_press_enter() {
|
||||
if (m_extension_name != "unicode" && is_emoji_lookup_table()) {
|
||||
// Check if variats exist
|
||||
- if (m_emojier.key_press_enter()) {
|
||||
+ if (m_emojier.key_press_enter(false)) {
|
||||
convert_preedit_text();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
IBus.Text text = m_preedit.get_commit_text();
|
||||
- commit_text_update_favorites(text);
|
||||
+ commit_text_update_favorites(text, true);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -712,15 +718,10 @@ class PanelBinding : IBus.PanelService {
|
||||
}
|
||||
|
||||
|
||||
- private bool is_visible_wayland_lookup_table() {
|
||||
- return m_wayland_lookup_table_is_visible;
|
||||
- }
|
||||
-
|
||||
-
|
||||
private void hide_emoji_lookup_table() {
|
||||
if (m_emojier == null)
|
||||
return;
|
||||
- if (m_is_wayland)
|
||||
+ if (m_wayland_lookup_table_is_visible)
|
||||
hide_wayland_lookup_table();
|
||||
else
|
||||
m_emojier.hide();
|
||||
@@ -747,7 +748,7 @@ class PanelBinding : IBus.PanelService {
|
||||
|
||||
private bool is_emoji_lookup_table() {
|
||||
if (m_is_wayland)
|
||||
- return is_visible_wayland_lookup_table();
|
||||
+ return m_wayland_lookup_table_is_visible;
|
||||
else
|
||||
return m_emojier.get_visible();
|
||||
}
|
||||
@@ -788,7 +789,8 @@ class PanelBinding : IBus.PanelService {
|
||||
*/
|
||||
if (!input_context_path.has_suffix("InputContext_1")) {
|
||||
m_real_current_context_path = m_current_context_path;
|
||||
- this.emojier_focus_commit();
|
||||
+ if (m_is_wayland)
|
||||
+ this.emojier_focus_commit();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -822,8 +824,18 @@ class PanelBinding : IBus.PanelService {
|
||||
// For title handling in gnome-shell
|
||||
m_application.add_window(m_emojier);
|
||||
m_emojier.candidate_clicked.connect((i, b, s) => {
|
||||
+ candidate_clicked_lookup_table_real(i, b, s, true);
|
||||
+ });
|
||||
+ m_emojier.commit_text.connect((s) => {
|
||||
if (!m_is_wayland)
|
||||
- candidate_clicked_lookup_table(i, b, s);
|
||||
+ return;
|
||||
+ // Currently emojier has a focus but the text input focus
|
||||
+ // does not and commit the text later.
|
||||
+ IBus.ExtensionEvent close_event = new IBus.ExtensionEvent(
|
||||
+ "name", m_extension_name,
|
||||
+ "is-enabled", false,
|
||||
+ "is-extension", true);
|
||||
+ panel_extension(close_event);
|
||||
});
|
||||
}
|
||||
m_emojier.reset();
|
||||
@@ -1041,9 +1053,10 @@ class PanelBinding : IBus.PanelService {
|
||||
show_preedit_and_candidate(show_candidate);
|
||||
}
|
||||
|
||||
- public override void candidate_clicked_lookup_table(uint index,
|
||||
- uint button,
|
||||
- uint state) {
|
||||
+ private void candidate_clicked_lookup_table_real(uint index,
|
||||
+ uint button,
|
||||
+ uint state,
|
||||
+ bool is_emojier) {
|
||||
if (button == IBusEmojier.BUTTON_CLOSE_BUTTON) {
|
||||
m_enable_extension = false;
|
||||
hide_emoji_lookup_table();
|
||||
@@ -1061,17 +1074,26 @@ class PanelBinding : IBus.PanelService {
|
||||
uint ncandidates = m_emojier.get_number_of_candidates();
|
||||
if (ncandidates > 0 && ncandidates >= index) {
|
||||
m_emojier.set_cursor_pos(index);
|
||||
- show_candidate = m_emojier.has_variants(index);
|
||||
- m_preedit.set_emoji(m_emojier.get_current_candidate());
|
||||
+ bool need_commit_signal = m_is_wayland && is_emojier;
|
||||
+ show_candidate = m_emojier.has_variants(index, need_commit_signal);
|
||||
+ if (!m_is_wayland)
|
||||
+ m_preedit.set_emoji(m_emojier.get_current_candidate());
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
if (!show_candidate) {
|
||||
IBus.Text text = m_preedit.get_commit_text();
|
||||
- commit_text_update_favorites(text);
|
||||
hide_emoji_lookup_table();
|
||||
+ if (!is_emojier || !m_is_wayland)
|
||||
+ commit_text_update_favorites(text, true);
|
||||
return;
|
||||
}
|
||||
show_preedit_and_candidate(show_candidate);
|
||||
}
|
||||
+
|
||||
+ public override void candidate_clicked_lookup_table(uint index,
|
||||
+ uint button,
|
||||
+ uint state) {
|
||||
+ candidate_clicked_lookup_table_real(index, button, state, false);
|
||||
+ }
|
||||
}
|
||||
--
|
||||
2.17.1
|
||||
|
||||
From c1b55431c076dfa3fc26a3a998bfcf729e9ba602 Mon Sep 17 00:00:00 2001
|
||||
From: fujiwarat <takao.fujiwara1@gmail.com>
|
||||
Date: Fri, 26 Oct 2018 18:44:35 +0900
|
||||
Subject: [PATCH] src/tests: Fix make check in Fedora 29
|
||||
|
||||
ibus-bus and ibus-compose failed in Fedora 29.
|
||||
|
||||
1. In ibus-bus with runtest, ibus-daemon failed to restart in
|
||||
start_exit_async() because it seems to have conflicting IO with runtest
|
||||
and ibus-daemon failed to close a file descriptor in _restart_server().
|
||||
The solution is to add a sleep in start_exit_async().
|
||||
Also added ibus_get_address() in test_async_apis_finish() to check
|
||||
if ibus-daemon finished to restart.
|
||||
|
||||
2. In ibus-compose, the GTK application could not get the ibus module.
|
||||
The solution is to export GTK_IM_MODULE=ibus.
|
||||
|
||||
3. Added DISABLE_DAEMONIZE_IN_TESTS to get error messages in ibus-daemon.
|
||||
% make DISABLE_DAEMONIZE_IN_TESTS=1 check
|
||||
---
|
||||
bus/Makefile.am | 1 +
|
||||
src/tests/Makefile.am | 1 +
|
||||
src/tests/ibus-bus.c | 15 ++++++++++++++-
|
||||
src/tests/runtest | 24 +++++++++++++++++-------
|
||||
4 files changed, 33 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/bus/Makefile.am b/bus/Makefile.am
|
||||
index bdae5c92..4383a874 100644
|
||||
--- a/bus/Makefile.am
|
||||
+++ b/bus/Makefile.am
|
||||
@@ -124,6 +124,7 @@ TESTS_ENVIRONMENT = \
|
||||
srcdir=$(srcdir) \
|
||||
LD_LIBRARY_PATH="$(top_builddir)/src/.libs:$(top_builddir)/src" \
|
||||
DISABLE_GUI_TESTS="$(DISABLE_GUI_TESTS)" \
|
||||
+ DISABLE_DAEMONIZE_IN_TESTS="$(DISABLE_DAEMONIZE_IN_TESTS)" \
|
||||
$(NULL)
|
||||
|
||||
LOG_COMPILER = $(top_srcdir)/src/tests/runtest
|
||||
diff --git a/src/tests/Makefile.am b/src/tests/Makefile.am
|
||||
index c5fef3c8..e337a59b 100644
|
||||
--- a/src/tests/Makefile.am
|
||||
+++ b/src/tests/Makefile.am
|
||||
@@ -73,6 +73,7 @@ TESTS_ENVIRONMENT = \
|
||||
srcdir=$(srcdir) \
|
||||
LD_LIBRARY_PATH="$(top_builddir)/src/.libs:$(top_builddir)/src" \
|
||||
DISABLE_GUI_TESTS="$(DISABLE_GUI_TESTS)" \
|
||||
+ DISABLE_DAEMONIZE_IN_TESTS="$(DISABLE_DAEMONIZE_IN_TESTS)" \
|
||||
$(NULL)
|
||||
|
||||
LOG_COMPILER = $(srcdir)/runtest
|
||||
diff --git a/src/tests/ibus-bus.c b/src/tests/ibus-bus.c
|
||||
index 7fa1bc4a..0bf9e612 100644
|
||||
--- a/src/tests/ibus-bus.c
|
||||
+++ b/src/tests/ibus-bus.c
|
||||
@@ -820,6 +820,14 @@ finish_exit_async (GObject *source_object,
|
||||
static void
|
||||
start_exit_async (void)
|
||||
{
|
||||
+ /* When `./runtest ibus-bus` runs, ibus-daemon sometimes failed to
|
||||
+ * restart because closing a file descriptor was failed in
|
||||
+ * bus/server.c:_restart_server() with a following error:
|
||||
+ * "inotify read(): Bad file descriptor"
|
||||
+ * Now g_usleep() is added here to write down the buffer and not to
|
||||
+ * fail to restart ibus-daemon.
|
||||
+ */
|
||||
+ g_usleep (G_USEC_PER_SEC);
|
||||
ibus_bus_exit_async (bus,
|
||||
TRUE, /* restart */
|
||||
-1, /* timeout */
|
||||
@@ -831,6 +839,9 @@ start_exit_async (void)
|
||||
static gboolean
|
||||
test_async_apis_finish (gpointer user_data)
|
||||
{
|
||||
+ /* INFO: g_warning() causes SEGV with runtest script */
|
||||
+ if (ibus_get_address () == NULL)
|
||||
+ g_warning ("ibus-daemon does not restart yet from start_exit_async().");
|
||||
ibus_quit ();
|
||||
return FALSE;
|
||||
}
|
||||
@@ -906,7 +917,9 @@ call_next_async_function (void)
|
||||
};
|
||||
static guint index = 0;
|
||||
|
||||
- // Use g_timeout_add to make sure test_async_apis finishes even if async_functions is empty.
|
||||
+ /* Use g_timeout_add to make sure test_async_apis finishes even if
|
||||
+ * async_functions is empty.
|
||||
+ */
|
||||
if (index >= G_N_ELEMENTS (async_functions))
|
||||
g_timeout_add (1, test_async_apis_finish, NULL);
|
||||
else
|
||||
diff --git a/src/tests/runtest b/src/tests/runtest
|
||||
index d7f96ea3..ab39e9f2 100755
|
||||
--- a/src/tests/runtest
|
||||
+++ b/src/tests/runtest
|
||||
@@ -22,6 +22,7 @@
|
||||
: ${builddir:=.}
|
||||
: ${srcdir:=.}
|
||||
: ${DISABLE_GUI_TESTS:=''}
|
||||
+: ${DISABLE_DAEMONIZE_IN_TESTS:=''}
|
||||
|
||||
BUS_REQUIRED_TESTS="
|
||||
ibus-bus
|
||||
@@ -162,16 +163,25 @@ run_test_case()
|
||||
export GSETTINGS_SCHEMA_DIR=$PWD
|
||||
|
||||
# Start ibus-daemon.
|
||||
- ../$top_builddir/bus/ibus-daemon \
|
||||
- --daemonize \
|
||||
- --cache=none \
|
||||
- --panel=disable \
|
||||
- --emoji-extension=disable \
|
||||
- --config=default \
|
||||
- --verbose;
|
||||
+ DAEMON_ARGS='
|
||||
+ --cache=none
|
||||
+ --panel=disable
|
||||
+ --emoji-extension=disable
|
||||
+ --config=default
|
||||
+ --verbose
|
||||
+ '
|
||||
+ if test x"$DISABLE_DAEMONIZE_IN_TESTS" = x ; then
|
||||
+ ../$top_builddir/bus/ibus-daemon \
|
||||
+ $DAEMON_ARGS --daemonize;
|
||||
+ else
|
||||
+ ../$top_builddir/bus/ibus-daemon \
|
||||
+ $DAEMON_ARGS &
|
||||
+ fi
|
||||
|
||||
# Wait until all necessary components are up.
|
||||
sleep 1
|
||||
+
|
||||
+ export GTK_IM_MODULE=ibus
|
||||
fi
|
||||
|
||||
"../$tst" ${1+"$@"}
|
||||
--
|
||||
2.17.1
|
||||
|
||||
From 3172c3b23faefe76b3b7adfc75f9be34a0fb2e02 Mon Sep 17 00:00:00 2001
|
||||
From: fujiwarat <takao.fujiwara1@gmail.com>
|
||||
Date: Wed, 31 Oct 2018 17:42:38 +0900
|
||||
Subject: [PATCH] RHEL code reviews
|
||||
|
||||
---
|
||||
src/ibuskeymap.c | 2 +-
|
||||
src/ibuspanelservice.c | 6 +++++-
|
||||
src/tests/ibus-keypress.c | 2 +-
|
||||
util/IMdkit/FrameMgr.c | 1 +
|
||||
4 files changed, 8 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/ibuskeymap.c b/src/ibuskeymap.c
|
||||
index 27a56754..5abfb99a 100644
|
||||
--- a/src/ibuskeymap.c
|
||||
+++ b/src/ibuskeymap.c
|
||||
@@ -143,7 +143,7 @@ ibus_keymap_parse_line (gchar *str,
|
||||
/* Do not assign *p1 to g_ascii_isalpha() directly for the syntax check */
|
||||
if (i == 0 &&
|
||||
strncmp (p2, "addupper", sizeof ("addupper") - 1) == 0 &&
|
||||
- (ch = *p1) && g_ascii_isalpha (ch)) {
|
||||
+ (ch = *p1) && (ch >= 0) && g_ascii_isalpha (ch)) {
|
||||
gchar buf[] = "a";
|
||||
buf[0] = g_ascii_toupper(ch);
|
||||
keymap[keycode][0] = keymap[keycode][3] = keysym;
|
||||
diff --git a/src/ibuspanelservice.c b/src/ibuspanelservice.c
|
||||
index 9d87e19b..984cc890 100644
|
||||
--- a/src/ibuspanelservice.c
|
||||
+++ b/src/ibuspanelservice.c
|
||||
@@ -1615,7 +1615,11 @@ ibus_panel_service_panel_extension_register_keys (IBusPanelService *panel,
|
||||
va_start (var_args, first_property_name);
|
||||
do {
|
||||
keys = va_arg (var_args, IBusProcessKeyEventData *);
|
||||
- g_return_if_fail (keys != NULL);
|
||||
+ if (keys == NULL) {
|
||||
+ va_end (var_args);
|
||||
+ g_warning ("Failed to va_arg for IBusProcessKeyEventData");
|
||||
+ return;
|
||||
+ }
|
||||
g_variant_builder_init (&child, G_VARIANT_TYPE ("av"));
|
||||
for (; keys; keys++) {
|
||||
if (keys->keyval == 0 && keys->keycode == 0 && keys->state == 0)
|
||||
diff --git a/src/tests/ibus-keypress.c b/src/tests/ibus-keypress.c
|
||||
index 3486523b..17920226 100644
|
||||
--- a/src/tests/ibus-keypress.c
|
||||
+++ b/src/tests/ibus-keypress.c
|
||||
@@ -173,7 +173,7 @@ set_engine_cb (GObject *object,
|
||||
IBusBus *bus = IBUS_BUS (object);
|
||||
GtkWidget *entry = GTK_WIDGET (data);
|
||||
GdkDisplay *display;
|
||||
- Display *xdisplay;
|
||||
+ Display *xdisplay = NULL;
|
||||
GError *error = NULL;
|
||||
int i, j;
|
||||
|
||||
diff --git a/util/IMdkit/FrameMgr.c b/util/IMdkit/FrameMgr.c
|
||||
index 084b8810..0e91b78e 100644
|
||||
--- a/util/IMdkit/FrameMgr.c
|
||||
+++ b/util/IMdkit/FrameMgr.c
|
||||
@@ -1414,6 +1414,7 @@ static int FrameInstGetSize (FrameInst fi)
|
||||
break;
|
||||
}
|
||||
/*endswitch*/
|
||||
+ assert (i >= 0);
|
||||
i = _FrameInstIncrement (fi->template, i);
|
||||
}
|
||||
/*endwhile*/
|
||||
--
|
||||
2.17.1
|
||||
|
@ -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
|
||||
|
7
gating.yaml
Normal file
7
gating.yaml
Normal file
@ -0,0 +1,7 @@
|
||||
--- !Policy
|
||||
product_versions:
|
||||
- rhel-9
|
||||
decision_context: osci_compose_gate
|
||||
rules:
|
||||
# this is the testcase identifier, which OSCI pipeline uses
|
||||
- !PassingTestCaseRule {test_case_name: osci.brew-build.tier0.functional}
|
403
ibus-1385349-segv-bus-proxy.patch
Normal file
403
ibus-1385349-segv-bus-proxy.patch
Normal file
@ -0,0 +1,403 @@
|
||||
From 41c325dfb32269c9aadfeedb4df44656aac4d883 Mon Sep 17 00:00:00 2001
|
||||
From: fujiwarat <takao.fujiwara1@gmail.com>
|
||||
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#1350291
|
||||
BUG=rhbz#1601577
|
||||
BUG=rhbz#1663528
|
||||
BUG=rhbz#1767691
|
||||
BUG=rhbz#1795499
|
||||
BUG=rhbz#1771238
|
||||
BUG=rhbz#1767976
|
||||
BUG=rhbz#1797120
|
||||
---
|
||||
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 59787a80..af2fbde2 100644
|
||||
--- a/bus/dbusimpl.c
|
||||
+++ b/bus/dbusimpl.c
|
||||
@@ -610,6 +610,7 @@ static void
|
||||
bus_dbus_impl_destroy (BusDBusImpl *dbus)
|
||||
{
|
||||
GList *p;
|
||||
+ int i;
|
||||
|
||||
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)); \
|
||||
+}
|
||||
+
|
||||
+ BUS_DBUS_MUTEX_SAFE_CLEAR (&dbus->dispatch_lock);
|
||||
+ BUS_DBUS_MUTEX_SAFE_CLEAR (&dbus->forward_lock);
|
||||
+
|
||||
+#undef BUS_DBUS_MUTEX_SAFE_CLEAR
|
||||
|
||||
/* 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)
|
||||
{
|
||||
+ BusDBusImpl *dbus;
|
||||
+ BusConnection *connection;
|
||||
+
|
||||
g_assert (G_IS_DBUS_CONNECTION (dbus_connection));
|
||||
g_assert (G_IS_DBUS_MESSAGE (message));
|
||||
g_assert (BUS_IS_DBUS_IMPL (user_data));
|
||||
|
||||
- BusDBusImpl *dbus = (BusDBusImpl *) user_data;
|
||||
- BusConnection *connection = bus_connection_lookup (dbus_connection);
|
||||
+ if (g_dbus_connection_is_closed (dbus_connection))
|
||||
+ return NULL;
|
||||
+
|
||||
+ dbus = (BusDBusImpl *) user_data;
|
||||
+ connection = bus_connection_lookup (dbus_connection);
|
||||
g_assert (connection != NULL);
|
||||
+ g_assert (BUS_IS_CONNECTION (connection));
|
||||
|
||||
if (incoming) {
|
||||
/* is incoming message */
|
||||
diff --git a/bus/engineproxy.c b/bus/engineproxy.c
|
||||
index 2d98995c..bbbe5532 100644
|
||||
--- a/bus/engineproxy.c
|
||||
+++ b/bus/engineproxy.c
|
||||
@@ -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,
|
||||
+ GError **error)
|
||||
{
|
||||
+ GDBusProxyFlags flags;
|
||||
+ BusEngineProxy *engine;
|
||||
+
|
||||
g_assert (path);
|
||||
g_assert (IBUS_IS_ENGINE_DESC (desc));
|
||||
g_assert (G_IS_DBUS_CONNECTION (connection));
|
||||
+ 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,
|
||||
"desc", desc,
|
||||
"g-connection", connection,
|
||||
"g-interface-name", IBUS_INTERFACE_ENGINE,
|
||||
@@ -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 */
|
||||
+ 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);
|
||||
}
|
||||
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.24.1
|
||||
|
3286
ibus-1616-gtk4-sync.patch
Normal file
3286
ibus-1616-gtk4-sync.patch
Normal file
File diff suppressed because it is too large
Load Diff
154
ibus-HEAD.patch
Normal file
154
ibus-HEAD.patch
Normal file
@ -0,0 +1,154 @@
|
||||
From 571e3b6e4f386abf12d3db70b9468e092c8d72bd Mon Sep 17 00:00:00 2001
|
||||
From: Alynx Zhou <alynx.zhou@gmail.com>
|
||||
Date: Tue, 24 Aug 2021 10:12:52 +0800
|
||||
Subject: [PATCH] client/gtk2/ibusimcontext: Fix wrong cursor location in gtk3
|
||||
apps
|
||||
|
||||
If you apply this patch in your tarball, please also apply this to
|
||||
client/gtk3/ibusimcontext.c besides client/gtk2/ibusimcontext.c .
|
||||
|
||||
BUG=https://github.com/ibus/ibus/issues/2337
|
||||
---
|
||||
client/gtk2/ibusimcontext.c | 5 ++++-
|
||||
1 file changed, 4 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/client/gtk2/ibusimcontext.c b/client/gtk2/ibusimcontext.c
|
||||
index da9a402f..b1ccede9 100644
|
||||
--- a/client/gtk2/ibusimcontext.c
|
||||
+++ b/client/gtk2/ibusimcontext.c
|
||||
@@ -1497,7 +1497,10 @@ _set_cursor_location_internal (IBusIMContext *ibusimcontext)
|
||||
|
||||
#if GTK_CHECK_VERSION (3, 98, 4)
|
||||
#elif GTK_CHECK_VERSION (2, 91, 0)
|
||||
- area.y += gdk_window_get_height (ibusimcontext->client_window);
|
||||
+ if (area.x == -1 && area.y == -1 && area.width == 0 && area.height == 0) {
|
||||
+ area.x = 0;
|
||||
+ area.y += gdk_window_get_height (ibusimcontext->client_window);
|
||||
+ }
|
||||
#else
|
||||
if (area.x == -1 && area.y == -1 && area.width == 0 && area.height == 0) {
|
||||
gint w, h;
|
||||
--
|
||||
2.31.1
|
||||
|
||||
From 5487a6baa4b22605ba8197ca1a0fa43c91d57786 Mon Sep 17 00:00:00 2001
|
||||
From: fujiwarat <takao.fujiwara1@gmail.com>
|
||||
Date: Mon, 6 Sep 2021 20:23:59 +0900
|
||||
Subject: [PATCH] client/gtk2/ibusimcontext: Implement clear preedit for GTK4
|
||||
|
||||
IBus IM module uses synchornized key processes for GTK4 and the timing
|
||||
of the GTK reset siginal may work with focus-in/out between windows.
|
||||
(I don't test GTK4 firefox and terminal yet and the verification is not
|
||||
completed.)
|
||||
So ibus_im_context_clear_preedit_text() is now called with the GTK4 reset
|
||||
siginal.
|
||||
ibus_im_context_clear_preedit_text() works with ibus-setup-anthy ->
|
||||
"Conversion" tab -> "Behavior on Focus Out" pull down menu.
|
||||
|
||||
BUG=https://github.com/ibus/ibus/issues/2334
|
||||
---
|
||||
client/gtk2/ibusimcontext.c | 9 ++++++---
|
||||
1 file changed, 6 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/client/gtk2/ibusimcontext.c b/client/gtk2/ibusimcontext.c
|
||||
index b1ccede9..e12be45d 100644
|
||||
--- a/client/gtk2/ibusimcontext.c
|
||||
+++ b/client/gtk2/ibusimcontext.c
|
||||
@@ -1270,6 +1270,8 @@ ibus_im_context_reset (GtkIMContext *context)
|
||||
* IBus uses button-press-event instead until GTK is fixed.
|
||||
* https://gitlab.gnome.org/GNOME/gtk/issues/1534
|
||||
*/
|
||||
+ if (_use_sync_mode)
|
||||
+ ibus_im_context_clear_preedit_text (ibusimcontext);
|
||||
ibus_input_context_reset (ibusimcontext->ibuscontext);
|
||||
}
|
||||
gtk_im_context_reset (ibusimcontext->slave);
|
||||
@@ -1383,7 +1385,7 @@ ibus_im_context_set_client_window (GtkIMContext *context,
|
||||
|
||||
if (ibusimcontext->client_window) {
|
||||
#if !GTK_CHECK_VERSION (3, 98, 4)
|
||||
- if (ibusimcontext->use_button_press_event)
|
||||
+ if (ibusimcontext->use_button_press_event && !_use_sync_mode)
|
||||
_connect_button_press_event (ibusimcontext, FALSE);
|
||||
#endif
|
||||
g_object_unref (ibusimcontext->client_window);
|
||||
@@ -1393,7 +1395,7 @@ ibus_im_context_set_client_window (GtkIMContext *context,
|
||||
if (client != NULL) {
|
||||
ibusimcontext->client_window = g_object_ref (client);
|
||||
#if !GTK_CHECK_VERSION (3, 98, 4)
|
||||
- if (!ibusimcontext->use_button_press_event)
|
||||
+ if (!ibusimcontext->use_button_press_event && !_use_sync_mode)
|
||||
_connect_button_press_event (ibusimcontext, TRUE);
|
||||
#endif
|
||||
}
|
||||
@@ -1994,7 +1996,8 @@ _ibus_context_update_preedit_text_cb (IBusInputContext *ibuscontext,
|
||||
|
||||
#if !GTK_CHECK_VERSION (3, 98, 4)
|
||||
if (!ibusimcontext->use_button_press_event &&
|
||||
- mode == IBUS_ENGINE_PREEDIT_COMMIT) {
|
||||
+ mode == IBUS_ENGINE_PREEDIT_COMMIT &&
|
||||
+ !_use_sync_mode) {
|
||||
if (ibusimcontext->client_window) {
|
||||
_connect_button_press_event (ibusimcontext, TRUE);
|
||||
}
|
||||
--
|
||||
2.28.0
|
||||
|
||||
From 4957d1468db4fc5ed30c3ae1f2afac9e51b329d6 Mon Sep 17 00:00:00 2001
|
||||
From: fujiwarat <takao.fujiwara1@gmail.com>
|
||||
Date: Mon, 6 Sep 2021 20:25:52 +0900
|
||||
Subject: [PATCH] client/gtk2/ibusimcontext: Calculate keycode from keysym in
|
||||
GTK3 forward-key-event
|
||||
|
||||
IBus GTK3 mode also calculates keycode from keysym if keycode == 0
|
||||
with forward-key-event signal to follow GTK4.
|
||||
---
|
||||
client/gtk2/ibusimcontext.c | 22 ++++++++++++++++++----
|
||||
1 file changed, 18 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/client/gtk2/ibusimcontext.c b/client/gtk2/ibusimcontext.c
|
||||
index e12be45d..b1424e87 100644
|
||||
--- a/client/gtk2/ibusimcontext.c
|
||||
+++ b/client/gtk2/ibusimcontext.c
|
||||
@@ -1939,13 +1939,16 @@ _ibus_context_forward_key_event_cb (IBusInputContext *ibuscontext,
|
||||
int group = 0;
|
||||
g_return_if_fail (GTK_IS_IM_CONTEXT (ibusimcontext));
|
||||
if (keycode == 0 && ibusimcontext->client_window) {
|
||||
- GdkDisplay *display = gtk_widget_get_display (ibusimcontext->client_window);
|
||||
+ GdkDisplay *display =
|
||||
+ gtk_widget_get_display (ibusimcontext->client_window);
|
||||
GdkKeymapKey *keys = NULL;
|
||||
gint n_keys = 0;
|
||||
- if (!gdk_display_map_keyval (display, keyval, &keys, &n_keys))
|
||||
+ if (gdk_display_map_keyval (display, keyval, &keys, &n_keys)) {
|
||||
+ keycode = keys->keycode;
|
||||
+ group = keys->group;
|
||||
+ } else {
|
||||
g_warning ("Failed to parse keycode from keyval %x", keyval);
|
||||
- keycode = keys->keycode;
|
||||
- group = keys->group;
|
||||
+ }
|
||||
}
|
||||
gtk_im_context_filter_key (
|
||||
GTK_IM_CONTEXT (ibusimcontext),
|
||||
@@ -1957,6 +1960,17 @@ _ibus_context_forward_key_event_cb (IBusInputContext *ibuscontext,
|
||||
(GdkModifierType)state,
|
||||
group);
|
||||
#else
|
||||
+ if (keycode == 0 && ibusimcontext->client_window) {
|
||||
+ GdkDisplay *display =
|
||||
+ gdk_window_get_display (ibusimcontext->client_window);
|
||||
+ GdkKeymap *keymap = gdk_keymap_get_for_display (display);
|
||||
+ GdkKeymapKey *keys = NULL;
|
||||
+ gint n_keys = 0;
|
||||
+ if (gdk_keymap_get_entries_for_keyval (keymap, keyval, &keys, &n_keys))
|
||||
+ keycode = keys->keycode;
|
||||
+ else
|
||||
+ g_warning ("Failed to parse keycode from keyval %x", keyval);
|
||||
+ }
|
||||
GdkEventKey *event = _create_gdk_event (ibusimcontext, keyval, keycode, state);
|
||||
gdk_event_put ((GdkEvent *)event);
|
||||
gdk_event_free ((GdkEvent *)event);
|
||||
--
|
||||
2.28.0
|
||||
|
37
ibus-xx-desktop-testing-mutter.patch
Normal file
37
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,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: 7%{?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,272 @@ 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
|
||||
* Sat Apr 19 2025 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.25-7
|
||||
- Resolves: RHEL-39398 Replace gitlab.gnome.org with gitlab.com/redhat
|
||||
|
||||
* 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
|
||||
* Tue Jul 30 2024 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.25-6
|
||||
- Resolves: RHEL-39398 ship ibus-gtk4 in RHEL 9 CRB
|
||||
|
||||
* 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
|
||||
* Wed Nov 15 2023 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.25-5
|
||||
- Resolves: RHEL-1616 Fix RESOURCE_LEAK in OpenScanHub
|
||||
|
||||
* Thu Jan 09 2020 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.19-11
|
||||
- Resolves: #1750836 - Fix CVE-2019-14822
|
||||
* 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 Dec 12 2019 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.19-10
|
||||
- Resolves: #1750836 - Revert Hangul fix for 8.2 schedule
|
||||
* 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
|
||||
|
||||
* Tue Dec 03 2019 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.19-9
|
||||
- Resolves: #1682157 - Fix RHEL 8.2 covscan #2
|
||||
* Mon Oct 04 2021 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.25-2
|
||||
- Fix wrong cursor location in gtk3. Related: rhbz#2008359
|
||||
|
||||
* Sat Nov 30 2019 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.19-8
|
||||
- Resolves: #1682157 - Fix libibus dependency in ibus-tests with rpmdiff
|
||||
* Fri Aug 20 2021 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.25-1
|
||||
- Bump to 1.5.25. Related: rhbz#1995528
|
||||
|
||||
* Fri Nov 29 2019 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.19-7
|
||||
- Resolves: #1682157 - Fix RHEL 8.2 covscan
|
||||
* 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-6
|
||||
- Resolves: #1682157 - Add CI
|
||||
* 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-5
|
||||
- Resolves: #1713606 - Fix hangul preedit commit with mouse click
|
||||
- Resolves: #1682157 - Integrate ibus-desktop-testing and test cases
|
||||
* Wed May 26 2021 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.24-6
|
||||
- Fix minor covscan reviews. Related: rhbz#1963071
|
||||
|
||||
* Tue Nov 06 2018 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.19-4
|
||||
* Fri May 21 2021 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.24-5
|
||||
- Fix covscan reviews. Related: rhbz#1963071
|
||||
|
||||
- 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
|
1
sources
Normal file
1
sources
Normal file
@ -0,0 +1 @@
|
||||
SHA512 (ibus-1.5.25.tar.gz) = 4b8955a20a1e5a0daf61213817a9697874439866e235e6a7905f5994b145cd5a143e6cfc41f17204a828756baeb8edab70698596731ecebf7f1eea7cc5f36aa6
|
3
tests/roles/ibus-desktop-testing-role/defaults/main.yml
Normal file
3
tests/roles/ibus-desktop-testing-role/defaults/main.yml
Normal file
@ -0,0 +1,3 @@
|
||||
role_pkgs_req:
|
||||
- rsync
|
||||
- xorg-x11-server-Xvfb
|
4
tests/roles/ibus-desktop-testing-role/meta/main.yml
Normal file
4
tests/roles/ibus-desktop-testing-role/meta/main.yml
Normal file
@ -0,0 +1,4 @@
|
||||
---
|
||||
|
||||
dependencies:
|
||||
- role: str-common-init
|
122
tests/roles/ibus-desktop-testing-role/tasks/main.yml
Normal file
122
tests/roles/ibus-desktop-testing-role/tasks/main.yml
Normal file
@ -0,0 +1,122 @@
|
||||
---
|
||||
- name: Check if GNOME installed-tests testing harness is installed
|
||||
register: gnome_desktop_testing_runner
|
||||
find:
|
||||
paths: "{{ ansible_env.PATH.split(':') }}"
|
||||
pattern: gnome-desktop-testing-runner
|
||||
|
||||
- name: Build and install GNOME installed-tests testing harness
|
||||
when: gnome_desktop_testing_runner.matched == 0
|
||||
block:
|
||||
- name: Installing build dependencies for IBus and GNOME installed-tests testing harness
|
||||
package:
|
||||
name:
|
||||
- git
|
||||
- make
|
||||
- gcc
|
||||
- diffutils
|
||||
- autoconf
|
||||
- automake
|
||||
- libtool
|
||||
- glib2-devel
|
||||
- systemd-devel
|
||||
- gnome-session
|
||||
- gnome-shell
|
||||
- dbus-x11
|
||||
- xorg-x11-server-Xvfb
|
||||
- ibus
|
||||
- ibus-desktop-testing
|
||||
- ibus-tests
|
||||
# ibus-compose test needs locales
|
||||
- glibc-langpack-el
|
||||
- glibc-langpack-fi
|
||||
- glibc-langpack-pt
|
||||
|
||||
- name: Fetching GNOME installed-tests testing harness source from remote repository
|
||||
git:
|
||||
repo: 'https://gitlab.com/redhat/centos-stream/tests/gnome-desktop-testing.git'
|
||||
dest: gnome-desktop-testing
|
||||
force: yes
|
||||
|
||||
- name: Checkout v2021.1 tag in GNOME installed-tests testing harness
|
||||
command: git checkout -b v2021.1 refs/tags/v2021.1
|
||||
args:
|
||||
chdir: gnome-desktop-testing
|
||||
|
||||
- name: Configure GNOME installed-tests testing harness build
|
||||
command: ./autogen.sh --prefix=/usr --sysconfdir=/etc --localstatedir=/var
|
||||
args:
|
||||
chdir: gnome-desktop-testing
|
||||
|
||||
- name: Build GNOME installed-tests testing harness
|
||||
command: make
|
||||
args:
|
||||
chdir: gnome-desktop-testing
|
||||
|
||||
- name: Install GNOME installed-tests testing harness
|
||||
command: make install
|
||||
args:
|
||||
chdir: gnome-desktop-testing
|
||||
|
||||
- name: Start IBus installed-tests testing harness
|
||||
environment:
|
||||
ANSIBLE: 1
|
||||
TMPDIR: '{{ remote_artifacts }}'
|
||||
G_MESSAGES_DEBUG: 'all'
|
||||
LANG: 'C.UTF-8'
|
||||
block:
|
||||
- name: Execute IBus tests
|
||||
shell: |
|
||||
set -e
|
||||
# Delete LC_CTYPE=C.UTF-8
|
||||
export -n LC_CTYPE
|
||||
status="FAIL: frame"
|
||||
ibus-desktop-testing-runner \
|
||||
--no-graphics \
|
||||
--runner=gnome \
|
||||
--tests='{{ installed_test_name }}' \
|
||||
--output='{{ remote_artifacts }}/{{ installed_test_name }}.log' \
|
||||
--result='{{ remote_artifacts }}/test.log' \
|
||||
null
|
||||
if [ $? -eq 0 ]; then
|
||||
status="PASS: frame"
|
||||
fi
|
||||
echo "${status}" >> {{ remote_artifacts }}/test.log
|
||||
echo "#### {{ remote_artifacts }}/{{ installed_test_name }}.log"
|
||||
if [ -f {{ remote_artifacts }}/{{ installed_test_name }}.log ] ; then
|
||||
cat {{ remote_artifacts }}/{{ installed_test_name }}.log
|
||||
fi
|
||||
echo "#"
|
||||
echo "#### {{ remote_artifacts }}/test.log"
|
||||
if [ -f {{ remote_artifacts }}/test.log ] ; then
|
||||
cat {{ remote_artifacts }}/test.log
|
||||
fi
|
||||
echo "#"
|
||||
|
||||
- name: Check the results
|
||||
shell: |
|
||||
IS_RAWHIDE=`grep -i rawhide /etc/fedora-release`
|
||||
if [ x"$IS_RAWHIDE" != x ] ; then
|
||||
exit 0
|
||||
fi
|
||||
log="{{ remote_artifacts }}/test.log"
|
||||
if [ ! -f $log ] ; then
|
||||
echo ERROR
|
||||
else
|
||||
FAIL=`grep "^FAIL: " $log | grep -v 'FAIL: 0$'`
|
||||
if [ x"$FAIL" != x ] ; then
|
||||
echo ERROR
|
||||
fi
|
||||
fi
|
||||
register: test_fails
|
||||
failed_when: False
|
||||
|
||||
- name: Set role result
|
||||
set_fact:
|
||||
role_result: "{{ test_fails.stdout }}"
|
||||
role_result_failed: "{{ (test_fails.stdout|d|length > 0) or (test_fails.stderr|d|length > 0) }}"
|
||||
role_result_msg: "{{ test_fails.stdout|d('tests failed.') }}"
|
||||
|
||||
- include_role:
|
||||
name: str-common-final
|
||||
|
8
tests/tests.yml
Normal file
8
tests/tests.yml
Normal file
@ -0,0 +1,8 @@
|
||||
- hosts: localhost
|
||||
roles:
|
||||
- role: ibus-desktop-testing-role
|
||||
installed_test_name: ibus
|
||||
tags:
|
||||
- classic
|
||||
- gating
|
||||
|
Loading…
Reference in New Issue
Block a user