Resolves: #2093313 Stop many warnings of surrounding text

Also fix other surrounding text issues
This commit is contained in:
Takao Fujiwara 2022-09-16 18:24:38 +09:00
parent 4958d37f2c
commit 966b2fc35c
2 changed files with 303 additions and 1 deletions

View File

@ -0,0 +1,295 @@
From babad7839ba6d72609c717d647bb2928724b4cc3 Mon Sep 17 00:00:00 2001
From: Izumi Tsutsui <tsutsui@ceres.dti.ne.jp>
Date: Tue, 6 Sep 2022 17:08:43 +0900
Subject: [PATCH] tools: Check libdl for dlclose() properly in configure
BUG=https://github.com/ibus/ibus/pull/2442
---
configure.ac | 4 ++++
tools/Makefile.am | 2 +-
2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/configure.ac b/configure.ac
index 0868d6c9..2344523a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -147,6 +147,10 @@ AC_CHECK_HEADERS([sys/prctl.h])
# Check functions.
AC_CHECK_FUNCS(daemon)
+# Check dlclose() in libc.so.
+AC_CHECK_LIB(c, dlclose, LIBDL="", [AC_CHECK_LIB(dl, dlclose, LIBDL="-ldl")])
+AC_SUBST(LIBDL)
+
# Check packages.
# Check glib2.
AM_PATH_GLIB_2_0
diff --git a/tools/Makefile.am b/tools/Makefile.am
index b82395da..e300f9f3 100644
--- a/tools/Makefile.am
+++ b/tools/Makefile.am
@@ -63,7 +63,7 @@ AM_LDADD = \
@GTHREAD2_LIBS@ \
$(libibus) \
$(libibusimmodule) \
- -ldl \
+ $(LIBDL) \
$(NULL)
AM_VALAFLAGS = \
--
2.37.3
From 39b69073ad34ab89a3e5aa012ff740c84f69eb8f Mon Sep 17 00:00:00 2001
From: fujiwarat <takao.fujiwara1@gmail.com>
Date: Fri, 16 Sep 2022 14:30:35 +0900
Subject: [PATCH] client/gtk2: Stop many warnings of surrounding text
Surrounding text is requested by ibus_im_context_filter_keypress()
and the no supported warning could be output many times.
Now the warning is output one time by input context but
brower applicaations do not use GtkWidget for the input context
so the warning is output by instance but not input context.
BUG=https://github.com/ibus/ibus/issues/2418
---
client/gtk2/ibusimcontext.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/client/gtk2/ibusimcontext.c b/client/gtk2/ibusimcontext.c
index bc14df00..3fc9c0f2 100644
--- a/client/gtk2/ibusimcontext.c
+++ b/client/gtk2/ibusimcontext.c
@@ -567,6 +567,7 @@ _process_key_event (IBusInputContext *context,
static void
_request_surrounding_text (IBusIMContext *context)
{
+ static gboolean warned = FALSE;
if (context &&
(context->caps & IBUS_CAP_SURROUNDING_TEXT) != 0 &&
context->ibuscontext != NULL &&
@@ -580,8 +581,11 @@ _request_surrounding_text (IBusIMContext *context)
* fail with the first typing on firefox but it succeeds with
* the second typing.
*/
- g_warning ("%s has no capability of surrounding-text feature",
- g_get_prgname ());
+ if (!warned) {
+ g_warning ("%s has no capability of surrounding-text feature",
+ g_get_prgname ());
+ warned = TRUE;
+ }
}
}
}
--
2.37.3
From 50f8d8b79bc8eac1bae80116fe669d7314a44663 Mon Sep 17 00:00:00 2001
From: fujiwarat <takao.fujiwara1@gmail.com>
Date: Fri, 16 Sep 2022 14:34:54 +0900
Subject: [PATCH] client/gtk2: Update capabilities if "retrieve-surrounding" is
failed
Some engine developers wish to update the capabilities if emitting
"retrieve-surrounding" signal is failed so that engines disable the
surrounding text feature but I had deleted the logic with #2054 since
the second typing could be succeeded.
Asking all applications the second typing would not be a good condition
and the special issue should be fixed in firefox.
Fixes: https://github.com/ibus/ibus/commit/7b3b8c8b0c
BUG=https://github.com/ibus/ibus/issues/2054
BUG=https://github.com/ibus/ibus/issues/2354
---
client/gtk2/ibusimcontext.c | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/client/gtk2/ibusimcontext.c b/client/gtk2/ibusimcontext.c
index 3fc9c0f2..eaf7eb90 100644
--- a/client/gtk2/ibusimcontext.c
+++ b/client/gtk2/ibusimcontext.c
@@ -577,10 +577,14 @@ _request_surrounding_text (IBusIMContext *context)
g_signal_emit (context, _signal_retrieve_surrounding_id, 0,
&return_value);
if (!return_value) {
- /* #2054 firefox::IMContextWrapper::GetCurrentParagraph() could
- * fail with the first typing on firefox but it succeeds with
- * the second typing.
+ /* Engines can disable the surrounding text feature with
+ * the updated capabilities.
*/
+ if (context->caps & IBUS_CAP_SURROUNDING_TEXT) {
+ context->caps &= ~IBUS_CAP_SURROUNDING_TEXT;
+ ibus_input_context_set_capabilities (context->ibuscontext,
+ context->caps);
+ }
if (!warned) {
g_warning ("%s has no capability of surrounding-text feature",
g_get_prgname ());
--
2.37.3
From 483abb429fed4c51e214fa6c1efbb54ca73d5b28 Mon Sep 17 00:00:00 2001
From: fujiwarat <takao.fujiwara1@gmail.com>
Date: Fri, 16 Sep 2022 14:50:53 +0900
Subject: [PATCH] client/gtk2: Update surrounding text properties by focus in
ibus_input_context_set_surrounding_text() should be succeeded
if input contexts are different so that ibus engines can
update surrounding text properties with focus in event.
When an input context is created newly, RequireSurroundingText D-Bus
signal could not be received yet and set_surrounding_text() is failed.
Now "require-surrounding-text" signal is added to IBusInputContext
and clients can call set_surrounding_text() later.
BUG=https://github.com/ibus/ibus/issues/2423
---
client/gtk2/ibusimcontext.c | 25 +++++++++++++++++++++++++
src/ibusinputcontext.c | 24 ++++++++++++++++++++++--
2 files changed, 47 insertions(+), 2 deletions(-)
diff --git a/client/gtk2/ibusimcontext.c b/client/gtk2/ibusimcontext.c
index eaf7eb90..6e338157 100644
--- a/client/gtk2/ibusimcontext.c
+++ b/client/gtk2/ibusimcontext.c
@@ -70,6 +70,7 @@ struct _IBusIMContext {
#endif
IBusInputContext *ibuscontext;
+ IBusInputContext *ibuscontext_needs_surrounding;
/* preedit status */
gchar *preedit_string;
@@ -985,6 +986,7 @@ ibus_im_context_init (GObject *obj)
ibusimcontext->cursor_area.height = 0;
ibusimcontext->ibuscontext = NULL;
+ ibusimcontext->ibuscontext_needs_surrounding = NULL;
ibusimcontext->has_focus = FALSE;
ibusimcontext->time = GDK_CURRENT_TIME;
#ifdef ENABLE_SURROUNDING
@@ -2183,6 +2185,18 @@ _ibus_context_hide_preedit_text_cb (IBusInputContext *ibuscontext,
g_signal_emit (ibusimcontext, _signal_preedit_end_id, 0);
}
+static void
+_ibus_context_require_surrounding_text_cb (IBusInputContext *ibuscontext,
+ IBusIMContext *ibusimcontext)
+{
+ IDEBUG ("%s", __FUNCTION__);
+ g_assert (ibusimcontext->ibuscontext == ibuscontext);
+ if (ibusimcontext->ibuscontext_needs_surrounding == ibuscontext) {
+ _request_surrounding_text (ibusimcontext);
+ ibusimcontext->ibuscontext_needs_surrounding = NULL;
+ }
+}
+
static void
_ibus_context_destroy_cb (IBusInputContext *ibuscontext,
IBusIMContext *ibusimcontext)
@@ -2249,6 +2263,11 @@ _create_input_context_done (IBusBus *bus,
"hide-preedit-text",
G_CALLBACK (_ibus_context_hide_preedit_text_cb),
ibusimcontext);
+ g_signal_connect (
+ ibusimcontext->ibuscontext,
+ "require-surrounding-text",
+ G_CALLBACK (_ibus_context_require_surrounding_text_cb),
+ ibusimcontext);
g_signal_connect (ibusimcontext->ibuscontext, "destroy",
G_CALLBACK (_ibus_context_destroy_cb),
ibusimcontext);
@@ -2265,6 +2284,12 @@ _create_input_context_done (IBusBus *bus,
ibus_input_context_focus_in (ibusimcontext->ibuscontext);
_set_cursor_location_internal (ibusimcontext);
+ if (ibus_input_context_needs_surrounding_text (
+ ibusimcontext->ibuscontext)) {
+ _request_surrounding_text (ibusimcontext);
+ } else {
+ ibusimcontext->ibuscontext_needs_surrounding = ibusimcontext->ibuscontext;
+ }
}
if (!g_queue_is_empty (ibusimcontext->events_queue)) {
diff --git a/src/ibusinputcontext.c b/src/ibusinputcontext.c
index 7981de38..ed887dde 100644
--- a/src/ibusinputcontext.c
+++ b/src/ibusinputcontext.c
@@ -2,7 +2,7 @@
/* vim:set et sts=4: */
/* ibus - The Input Bus
* Copyright (C) 2008-2013 Peng Huang <shawn.p.huang@gmail.com>
- * Copyright (C) 2018-2019 Takao Fujiwara <takao.fujiwara1@gmail.com>
+ * Copyright (C) 2018-2022 Takao Fujiwara <takao.fujiwara1@gmail.com>
* Copyright (C) 2008-2019 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
@@ -55,6 +55,7 @@ enum {
CURSOR_DOWN_LOOKUP_TABLE,
REGISTER_PROPERTIES,
UPDATE_PROPERTY,
+ REQUIRE_SURROUNDING_TEXT,
LAST_SIGNAL,
};
@@ -488,6 +489,21 @@ ibus_input_context_class_init (IBusInputContextClass *class)
1,
IBUS_TYPE_PROPERTY);
+ /**
+ * IBusInputContext::require-surrounding-text:
+ * @context: An IBusInputContext.
+ *
+ * Emitted to receive the RequireSurroundingText signal from the daemon.
+ */
+ context_signals[REQUIRE_SURROUNDING_TEXT] =
+ g_signal_new (I_("require-surrounding-text"),
+ G_TYPE_FROM_CLASS (class),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL,
+ _ibus_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
text_empty = ibus_text_new_from_static_string ("");
g_object_ref_sink (text_empty);
}
@@ -735,6 +751,7 @@ ibus_input_context_g_signal (GDBusProxy *proxy,
if (g_strcmp0 (signal_name, "RequireSurroundingText") == 0) {
priv->needs_surrounding_text = TRUE;
+ g_signal_emit (context, context_signals[REQUIRE_SURROUNDING_TEXT], 0);
return;
}
@@ -1109,6 +1126,7 @@ ibus_input_context_set_surrounding_text (IBusInputContext *context,
guint32 cursor_pos,
guint32 anchor_pos)
{
+ static IBusInputContext *prev_context = NULL;
IBusInputContextPrivate *priv;
g_assert (IBUS_IS_INPUT_CONTEXT (context));
@@ -1119,12 +1137,14 @@ ibus_input_context_set_surrounding_text (IBusInputContext *context,
if (cursor_pos != priv->surrounding_cursor_pos ||
anchor_pos != priv->selection_anchor_pos ||
priv->surrounding_text == NULL ||
- g_strcmp0 (text->text, priv->surrounding_text->text) != 0) {
+ g_strcmp0 (text->text, priv->surrounding_text->text) != 0 ||
+ context != prev_context) {
if (priv->surrounding_text)
g_object_unref (priv->surrounding_text);
priv->surrounding_text = (IBusText *) g_object_ref_sink (text);
priv->surrounding_cursor_pos = cursor_pos;
priv->selection_anchor_pos = anchor_pos;
+ prev_context = context;
if (priv->needs_surrounding_text) {
GVariant *variant = ibus_serializable_serialize ((IBusSerializable *)text);
--
2.37.3

View File

@ -39,7 +39,7 @@
Name: ibus
Version: 1.5.27
Release: 1%{?dist}
Release: 2%{?dist}
Summary: Intelligent Input Bus for Linux OS
License: LGPLv2+
URL: https://github.com/ibus/%name/wiki
@ -47,6 +47,7 @@ Source0: https://github.com/ibus/%name/releases/download/%{version}/%{nam
Source1: %{name}-xinput
Source2: %{name}.conf.5
# Patch0: %%{name}-HEAD.patch
Patch0: %{name}-HEAD.patch
# Under testing #1349148 #1385349 #1350291 #1406699 #1432252 #1601577
Patch1: %{name}-1385349-segv-bus-proxy.patch
%if 0%{?fedora:0}%{?rhel:1}
@ -277,6 +278,8 @@ the functionality of the installed %{name} package.
# 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 || :
cp client/gtk2/ibusimcontext.c client/gtk4/ibusimcontext.c || :
# prep test
@ -518,6 +521,10 @@ dconf update || :
%{_datadir}/installed-tests/ibus
%changelog
* Fri Sep 16 2022 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.27-2
- Resolves: #2093313 Stop many warnings of surrounding text
- Fix other surrounding text issues
* Tue Aug 23 2022 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.27-1
- Bump to 1.5.27