Compare commits

...

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

25 changed files with 4427 additions and 6112 deletions

64
.gitignore vendored
View File

@ -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

View File

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

View File

@ -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

View File

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

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,179 +0,0 @@
From 3d442dbf936d197aa11ca0a71663c2bc61696151 Mon Sep 17 00:00:00 2001
From: fujiwarat <takao.fujiwara1@gmail.com>
Date: Fri, 13 Sep 2019 15:59:03 +0900
Subject: [PATCH] bus: Implement GDBusAuthObserver callback
ibus uses a GDBusServer with G_DBUS_SERVER_FLAGS_AUTHENTICATION_ALLOW_ANONYMOUS,
and doesn't set a GDBusAuthObserver, which allows anyone who can connect
to its AF_UNIX socket to authenticate and be authorized to send method calls.
It also seems to use an abstract AF_UNIX socket, which does not have
filesystem permissions, so the practical effect might be that a local
attacker can connect to another user's ibus service and make arbitrary
method calls.
BUGS=rhbz#1717958
---
bus/server.c | 89 ++++++++++++++++++++++++++++++++++++++++++----------
1 file changed, 73 insertions(+), 16 deletions(-)
diff --git a/bus/server.c b/bus/server.c
index 3a626230..2439de14 100644
--- a/bus/server.c
+++ b/bus/server.c
@@ -2,7 +2,8 @@
/* vim:set et sts=4: */
/* bus - The Input Bus
* Copyright (C) 2008-2010 Peng Huang <shawn.p.huang@gmail.com>
- * Copyright (C) 2008-2010 Red Hat, Inc.
+ * Copyright (C) 2011-2019 Takao Fujiwara <takao.fujiwara1@gmail.com>
+ * Copyright (C) 2008-2019 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -70,16 +71,63 @@ _restart_server (void)
}
/**
+ * bus_allow_mechanism_cb:
+ * @observer: A #GDBusAuthObserver.
+ * @mechanism: The name of the mechanism.
+ * @user_data: always %NULL.
+ *
+ * Check if @mechanism can be used to authenticate the other peer.
+ * Returns: %TRUE if the peer's mechanism is allowed.
+ */
+static gboolean
+bus_allow_mechanism_cb (GDBusAuthObserver *observer,
+ const gchar *mechanism,
+ G_GNUC_UNUSED gpointer user_data)
+{
+ if (g_strcmp0 (mechanism, "EXTERNAL") == 0)
+ return TRUE;
+ return FALSE;
+}
+
+/**
+ * bus_authorize_authenticated_peer_cb:
+ * @observer: A #GDBusAuthObserver.
+ * @stream: A #GIOStream.
+ * @credentials: A #GCredentials.
+ * @user_data: always %NULL.
+ *
+ * Check if a peer who has already authenticated should be authorized.
+ * Returns: %TRUE if the peer's credential is authorized.
+ */
+static gboolean
+bus_authorize_authenticated_peer_cb (GDBusAuthObserver *observer,
+ GIOStream *stream,
+ GCredentials *credentials,
+ G_GNUC_UNUSED gpointer user_data)
+{
+ gboolean authorized = FALSE;
+ if (credentials) {
+ GCredentials *own_credentials = g_credentials_new ();
+ if (g_credentials_is_same_user (credentials, own_credentials, NULL))
+ authorized = TRUE;
+ g_object_unref (own_credentials);
+ }
+ return authorized;
+}
+
+/**
* bus_new_connection_cb:
- * @user_data: always NULL.
- * @returns: TRUE when the function can handle the connection.
+ * @observer: A #GDBusAuthObserver.
+ * @dbus_connection: A #GDBusconnection.
+ * @user_data: always %NULL.
*
* Handle incoming connections.
+ * Returns: %TRUE when the function can handle the connection.
*/
static gboolean
-bus_new_connection_cb (GDBusServer *server,
- GDBusConnection *dbus_connection,
- gpointer user_data)
+bus_new_connection_cb (GDBusServer *server,
+ GDBusConnection *dbus_connection,
+ G_GNUC_UNUSED gpointer user_data)
{
BusConnection *connection = bus_connection_new (dbus_connection);
bus_dbus_impl_new_connection (dbus, connection);
@@ -94,9 +142,9 @@ bus_new_connection_cb (GDBusServer *
}
static void
-_server_connect_start_portal_cb (GObject *source_object,
- GAsyncResult *res,
- gpointer user_data)
+_server_connect_start_portal_cb (GObject *source_object,
+ GAsyncResult *res,
+ G_GNUC_UNUSED gpointer user_data)
{
GVariant *result;
GError *error = NULL;
@@ -113,9 +161,9 @@ _server_connect_start_portal_cb (GObject
}
static void
-bus_acquired_handler (GDBusConnection *connection,
- const gchar *name,
- gpointer user_data)
+bus_acquired_handler (GDBusConnection *connection,
+ const gchar *name,
+ G_GNUC_UNUSED gpointer user_data)
{
g_dbus_connection_call (connection,
IBUS_SERVICE_PORTAL,
@@ -136,22 +184,27 @@ void
bus_server_init (void)
{
GError *error = NULL;
+ GDBusServerFlags flags = G_DBUS_SERVER_FLAGS_NONE;
+ gchar *guid;
+ GDBusAuthObserver *observer;
dbus = bus_dbus_impl_get_default ();
ibus = bus_ibus_impl_get_default ();
bus_dbus_impl_register_object (dbus, (IBusService *)ibus);
/* init server */
- GDBusServerFlags flags = G_DBUS_SERVER_FLAGS_AUTHENTICATION_ALLOW_ANONYMOUS;
- gchar *guid = g_dbus_generate_guid ();
- if (!g_str_has_prefix (g_address, "unix:tmpdir=")) {
- g_error ("Your socket address does not have the format unix:tmpdir=$DIR; %s",
- g_address);
+ guid = g_dbus_generate_guid ();
+ observer = g_dbus_auth_observer_new ();
+ if (!g_str_has_prefix (g_address, "unix:tmpdir=") &&
+ !g_str_has_prefix (g_address, "unix:path=")) {
+ g_error ("Your socket address does not have the format unix:tmpdir=$DIR "
+ "or unix:path=$FILE; %s", g_address);
+
}
server = g_dbus_server_new_sync (
g_address, /* the place where the socket file lives, e.g. /tmp, abstract namespace, etc. */
flags, guid,
- NULL /* observer */,
+ observer,
NULL /* cancellable */,
&error);
if (server == NULL) {
@@ -161,7 +214,13 @@ bus_server_init (void)
}
g_free (guid);
- g_signal_connect (server, "new-connection", G_CALLBACK (bus_new_connection_cb), NULL);
+ g_signal_connect (observer, "allow-mechanism",
+ G_CALLBACK (bus_allow_mechanism_cb), NULL);
+ g_signal_connect (observer, "authorize-authenticated-peer",
+ G_CALLBACK (bus_authorize_authenticated_peer_cb), NULL);
+ g_object_unref (observer);
+ g_signal_connect (server, "new-connection",
+ G_CALLBACK (bus_new_connection_cb), NULL);
g_dbus_server_start (server);
--
2.21.0

View File

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

View File

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

View File

@ -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

View File

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

View File

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

7
gating.yaml Normal file
View 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}

View 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

File diff suppressed because it is too large Load Diff

154
ibus-HEAD.patch Normal file
View 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

View File

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

View File

@ -1,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: 5%{?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,266 @@ 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
* Wed Nov 15 2023 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.25-5
- Resolves: RHEL-1616 Fix RESOURCE_LEAK in OpenScanHub
* 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
* 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 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
* Tue Oct 24 2023 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.25-3
- Resolves: RHEL-1616 Space, back-spc, enter key not working on gtk4
* Thu Jan 09 2020 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.19-11
- Resolves: #1750836 - Fix CVE-2019-14822
* Mon Oct 04 2021 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.25-2
- Fix wrong cursor location in gtk3. Related: rhbz#2008359
* Thu Dec 12 2019 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.19-10
- Resolves: #1750836 - Revert Hangul fix for 8.2 schedule
* Fri Aug 20 2021 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.25-1
- Bump to 1.5.25. Related: rhbz#1995528
* Tue Dec 03 2019 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.19-9
- Resolves: #1682157 - Fix RHEL 8.2 covscan #2
* 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
* Sat Nov 30 2019 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.19-8
- Resolves: #1682157 - Fix libibus dependency in ibus-tests with rpmdiff
* 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-7
- Resolves: #1682157 - Fix RHEL 8.2 covscan
* Wed May 26 2021 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.24-6
- Fix minor covscan reviews. Related: rhbz#1963071
* Fri Nov 29 2019 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.19-6
- Resolves: #1682157 - Add CI
* Fri May 21 2021 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.24-5
- Fix covscan reviews. Related: rhbz#1963071
* Fri Nov 29 2019 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.19-5
- Resolves: #1713606 - Fix hangul preedit commit with mouse click
- Resolves: #1682157 - Integrate ibus-desktop-testing and test cases
- Implement ibus_im_context_set_surrounding_with_selection()
* Tue Nov 06 2018 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.19-4
* 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
View File

@ -0,0 +1 @@
SHA512 (ibus-1.5.25.tar.gz) = 4b8955a20a1e5a0daf61213817a9697874439866e235e6a7905f5994b145cd5a143e6cfc41f17204a828756baeb8edab70698596731ecebf7f1eea7cc5f36aa6

View File

@ -0,0 +1,3 @@
role_pkgs_req:
- rsync
- xorg-x11-server-Xvfb

View File

@ -0,0 +1,4 @@
---
dependencies:
- role: str-common-init

View 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.gnome.org/GNOME/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
View File

@ -0,0 +1,8 @@
- hosts: localhost
roles:
- role: ibus-desktop-testing-role
installed_test_name: ibus
tags:
- classic
- gating