ibus: update to 1.5.27.
This commit is contained in:
parent
942411193c
commit
25eb511e38
|
@ -1,267 +0,0 @@
|
|||
From 17648f0522910480b6c5dd4f5356ca1f6c160bf5 Mon Sep 17 00:00:00 2001
|
||||
From: Carlos Garnacho <carlosg@gnome.org>
|
||||
Date: Tue, 29 Mar 2022 22:48:19 +0200
|
||||
Subject: [PATCH] src: Fix refcounting issues
|
||||
|
||||
Commit 5a455b1ead attempted to fix both GLib warnings around
|
||||
floating references and other presumed refcounting issues. However
|
||||
it missed 2 kinds of bugs:
|
||||
|
||||
- The places that take an IBusText created from a static string
|
||||
were made to avoid freeing it afterwards, but the staticness refers
|
||||
to the string content, not the object itself.
|
||||
- The places that are documented to emit signals on floating object
|
||||
references used to do the following after signal emission:
|
||||
|
||||
if (g_object_is_floating (object))
|
||||
g_object_unref (object)
|
||||
|
||||
And did possibly trigger GLib warnings were changed to:
|
||||
|
||||
if (g_object_is_floating (object))
|
||||
g_object_sink_ref (object);
|
||||
g_object_unref (object);
|
||||
|
||||
Which fixes the GLib warning for floating references, but do
|
||||
unintendedly steal one reference away for non floating references.
|
||||
|
||||
This commit is essentially a revert of commit 5a455b1ead, but
|
||||
addressing both things differently:
|
||||
|
||||
- All label/tooltip/symbol IBusText properties in IBusProperty do
|
||||
now always sink the reference of the stored object.
|
||||
|
||||
- All places documented as maybe using objects with a floating reference
|
||||
on signals changed to doing:
|
||||
|
||||
if (g_object_is_floating (object)) {
|
||||
g_object_ref_sink (object);
|
||||
g_object_unref (object);
|
||||
}
|
||||
|
||||
So the floating reference is owned and unreferenced without warnings,
|
||||
but already owned references are left unchanged.
|
||||
|
||||
This addresses the possible GLib warnings, fixes the possible double
|
||||
unrefs happening on IBusText used in signals, and fixes the missing
|
||||
unrefs on IBusText objects created from static strings.
|
||||
|
||||
BUG=https://github.com/ibus/ibus/issues/2393
|
||||
BUG=https://github.com/ibus/ibus/issues/2387
|
||||
---
|
||||
src/ibusinputcontext.c | 35 +++++++++++++++++++++--------------
|
||||
src/ibusproperty.c | 32 +++++++++++++++++---------------
|
||||
2 files changed, 38 insertions(+), 29 deletions(-)
|
||||
|
||||
diff --git a/src/ibusinputcontext.c b/src/ibusinputcontext.c
|
||||
index 4b27551bd..7981de381 100644
|
||||
--- a/src/ibusinputcontext.c
|
||||
+++ b/src/ibusinputcontext.c
|
||||
@@ -549,9 +549,10 @@ ibus_input_context_g_signal (GDBusProxy *proxy,
|
||||
g_variant_unref (variant);
|
||||
g_signal_emit (context, context_signals[COMMIT_TEXT], 0, text);
|
||||
|
||||
- if (g_object_is_floating (text))
|
||||
+ if (g_object_is_floating (text)) {
|
||||
g_object_ref_sink (text);
|
||||
- g_object_unref (text);
|
||||
+ g_object_unref (text);
|
||||
+ }
|
||||
return;
|
||||
}
|
||||
if (g_strcmp0 (signal_name, "UpdatePreeditText") == 0) {
|
||||
@@ -569,9 +570,10 @@ ibus_input_context_g_signal (GDBusProxy *proxy,
|
||||
cursor_pos,
|
||||
visible);
|
||||
|
||||
- if (g_object_is_floating (text))
|
||||
+ if (g_object_is_floating (text)) {
|
||||
g_object_ref_sink (text);
|
||||
- g_object_unref (text);
|
||||
+ g_object_unref (text);
|
||||
+ }
|
||||
return;
|
||||
}
|
||||
if (g_strcmp0 (signal_name, "UpdatePreeditTextWithMode") == 0) {
|
||||
@@ -592,9 +594,10 @@ ibus_input_context_g_signal (GDBusProxy *proxy,
|
||||
visible,
|
||||
mode);
|
||||
|
||||
- if (g_object_is_floating (text))
|
||||
+ if (g_object_is_floating (text)) {
|
||||
g_object_ref_sink (text);
|
||||
- g_object_unref (text);
|
||||
+ g_object_unref (text);
|
||||
+ }
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -621,9 +624,10 @@ ibus_input_context_g_signal (GDBusProxy *proxy,
|
||||
0,
|
||||
text,
|
||||
visible);
|
||||
- if (g_object_is_floating (text))
|
||||
+ if (g_object_is_floating (text)) {
|
||||
g_object_ref_sink (text);
|
||||
- g_object_unref (text);
|
||||
+ g_object_unref (text);
|
||||
+ }
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -640,9 +644,10 @@ ibus_input_context_g_signal (GDBusProxy *proxy,
|
||||
0,
|
||||
table,
|
||||
visible);
|
||||
- if (g_object_is_floating (table))
|
||||
+ if (g_object_is_floating (table)) {
|
||||
g_object_ref_sink (table);
|
||||
- g_object_unref (table);
|
||||
+ g_object_unref (table);
|
||||
+ }
|
||||
return;
|
||||
|
||||
}
|
||||
@@ -659,9 +664,10 @@ ibus_input_context_g_signal (GDBusProxy *proxy,
|
||||
0,
|
||||
prop_list);
|
||||
|
||||
- if (g_object_is_floating (prop_list))
|
||||
+ if (g_object_is_floating (prop_list)) {
|
||||
g_object_ref_sink (prop_list);
|
||||
- g_object_unref (prop_list);
|
||||
+ g_object_unref (prop_list);
|
||||
+ }
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -673,9 +679,10 @@ ibus_input_context_g_signal (GDBusProxy *proxy,
|
||||
|
||||
g_signal_emit (context, context_signals[UPDATE_PROPERTY], 0, prop);
|
||||
|
||||
- if (g_object_is_floating (prop))
|
||||
+ if (g_object_is_floating (prop)) {
|
||||
g_object_ref_sink (prop);
|
||||
- g_object_unref (prop);
|
||||
+ g_object_unref (prop);
|
||||
+ }
|
||||
return;
|
||||
}
|
||||
|
||||
diff --git a/src/ibusproperty.c b/src/ibusproperty.c
|
||||
index 6d4ed088e..cd8a0e2a6 100644
|
||||
--- a/src/ibusproperty.c
|
||||
+++ b/src/ibusproperty.c
|
||||
@@ -336,20 +336,17 @@ ibus_property_destroy (IBusProperty *prop)
|
||||
prop->priv->icon = NULL;
|
||||
|
||||
if (prop->priv->label) {
|
||||
- if (!ibus_text_get_is_static (prop->priv->label))
|
||||
- g_object_unref (prop->priv->label);
|
||||
+ g_object_unref (prop->priv->label);
|
||||
prop->priv->label = NULL;
|
||||
}
|
||||
|
||||
if (prop->priv->symbol) {
|
||||
- if (!ibus_text_get_is_static (prop->priv->symbol))
|
||||
- g_object_unref (prop->priv->symbol);
|
||||
+ g_object_unref (prop->priv->symbol);
|
||||
prop->priv->symbol = NULL;
|
||||
}
|
||||
|
||||
if (prop->priv->tooltip) {
|
||||
- if (!ibus_text_get_is_static (prop->priv->tooltip))
|
||||
- g_object_unref (prop->priv->tooltip);
|
||||
+ g_object_unref (prop->priv->tooltip);
|
||||
prop->priv->tooltip = NULL;
|
||||
}
|
||||
|
||||
@@ -404,7 +401,7 @@ ibus_property_deserialize (IBusProperty *prop,
|
||||
g_variant_get_child (variant, retval++, "u", &prop->priv->type);
|
||||
|
||||
GVariant *subvar = g_variant_get_child_value (variant, retval++);
|
||||
- if (prop->priv->label && !ibus_text_get_is_static (prop->priv->label)) {
|
||||
+ if (prop->priv->label) {
|
||||
g_object_unref (prop->priv->label);
|
||||
}
|
||||
prop->priv->label = IBUS_TEXT (ibus_serializable_deserialize (subvar));
|
||||
@@ -414,7 +411,7 @@ ibus_property_deserialize (IBusProperty *prop,
|
||||
ibus_g_variant_get_child_string (variant, retval++, &prop->priv->icon);
|
||||
|
||||
subvar = g_variant_get_child_value (variant, retval++);
|
||||
- if (prop->priv->tooltip && !ibus_text_get_is_static (prop->priv->tooltip)) {
|
||||
+ if (prop->priv->tooltip) {
|
||||
g_object_unref (prop->priv->tooltip);
|
||||
}
|
||||
prop->priv->tooltip = IBUS_TEXT (ibus_serializable_deserialize (subvar));
|
||||
@@ -435,7 +432,7 @@ ibus_property_deserialize (IBusProperty *prop,
|
||||
|
||||
/* Keep the serialized order for the compatibility when add new members. */
|
||||
subvar = g_variant_get_child_value (variant, retval++);
|
||||
- if (prop->priv->symbol && !ibus_text_get_is_static (prop->priv->symbol)) {
|
||||
+ if (prop->priv->symbol) {
|
||||
g_object_unref (prop->priv->symbol);
|
||||
}
|
||||
prop->priv->symbol = IBUS_TEXT (ibus_serializable_deserialize (subvar));
|
||||
@@ -567,7 +564,7 @@ ibus_property_set_label (IBusProperty *prop,
|
||||
g_assert (IBUS_IS_PROPERTY (prop));
|
||||
g_return_if_fail (label == NULL || IBUS_IS_TEXT (label));
|
||||
|
||||
- if (prop->priv->label && !ibus_text_get_is_static (prop->priv->label)) {
|
||||
+ if (prop->priv->label) {
|
||||
g_object_unref (prop->priv->label);
|
||||
}
|
||||
|
||||
@@ -575,8 +572,10 @@ ibus_property_set_label (IBusProperty *prop,
|
||||
prop->priv->label = ibus_text_new_from_static_string ("");
|
||||
}
|
||||
else {
|
||||
- prop->priv->label = g_object_ref_sink (label);
|
||||
+ prop->priv->label = label;
|
||||
}
|
||||
+
|
||||
+ g_object_ref_sink (prop->priv->label);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -586,7 +585,7 @@ ibus_property_set_symbol (IBusProperty *prop,
|
||||
g_assert (IBUS_IS_PROPERTY (prop));
|
||||
g_return_if_fail (symbol == NULL || IBUS_IS_TEXT (symbol));
|
||||
|
||||
- if (prop->priv->symbol && !ibus_text_get_is_static (prop->priv->symbol)) {
|
||||
+ if (prop->priv->symbol) {
|
||||
g_object_unref (prop->priv->symbol);
|
||||
}
|
||||
|
||||
@@ -594,8 +593,10 @@ ibus_property_set_symbol (IBusProperty *prop,
|
||||
prop->priv->symbol = ibus_text_new_from_static_string ("");
|
||||
}
|
||||
else {
|
||||
- prop->priv->symbol = g_object_ref_sink (symbol);
|
||||
+ prop->priv->symbol = symbol;
|
||||
}
|
||||
+
|
||||
+ g_object_ref_sink (prop->priv->symbol);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -615,7 +616,7 @@ ibus_property_set_tooltip (IBusProperty *prop,
|
||||
g_assert (IBUS_IS_PROPERTY (prop));
|
||||
g_assert (tooltip == NULL || IBUS_IS_TEXT (tooltip));
|
||||
|
||||
- if (prop->priv->tooltip && !ibus_text_get_is_static (prop->priv->tooltip)) {
|
||||
+ if (prop->priv->tooltip) {
|
||||
g_object_unref (prop->priv->tooltip);
|
||||
}
|
||||
|
||||
@@ -624,8 +625,9 @@ ibus_property_set_tooltip (IBusProperty *prop,
|
||||
}
|
||||
else {
|
||||
prop->priv->tooltip = tooltip;
|
||||
- g_object_ref_sink (prop->priv->tooltip);
|
||||
}
|
||||
+
|
||||
+ g_object_ref_sink (prop->priv->tooltip);
|
||||
}
|
||||
|
||||
void
|
|
@ -1,29 +1,29 @@
|
|||
# Template file for 'ibus'
|
||||
pkgname=ibus
|
||||
version=1.5.26
|
||||
revision=2
|
||||
version=1.5.27
|
||||
revision=1
|
||||
build_style=gnu-configure
|
||||
build_helper="gir"
|
||||
configure_args="--enable-ui --enable-gtk3 --enable-gtk4
|
||||
--enable-memconf --enable-dconf --enable-wayland --enable-xim
|
||||
--disable-tests --disable-schemas-compile --disable-systemd-services
|
||||
--enable-memconf --enable-dconf --enable-wayland
|
||||
--with-python=/usr/bin/python3
|
||||
--with-python=/usr/bin/python3 --disable-python2
|
||||
$(vopt_enable dicts emoji-dict) $(vopt_enable dicts unicode-dict)
|
||||
--enable-introspection --enable-vala $(vopt_enable ibus_setup setup)"
|
||||
hostmakedepends="automake gettext-devel libtool pkg-config intltool dconf
|
||||
hostmakedepends="pkg-config libtool gettext-devel intltool dconf
|
||||
python3 glib-devel vala
|
||||
$(vopt_if dicts 'cldr-emoji-annotation unicode-character-database unicode-emoji')"
|
||||
makedepends="dconf-devel gtk+-devel gtk4-devel hicolor-icon-theme
|
||||
makedepends="dconf-devel gtk+-devel gtk+3-devel gtk4-devel hicolor-icon-theme
|
||||
iso-codes json-glib-devel libnotify-devel librsvg-devel python3-xdg
|
||||
vala libXtst-devel"
|
||||
depends="hicolor-icon-theme iso-codes dbus-x11 python3-xdg
|
||||
$(vopt_if ibus_setup 'python3-gobject>=3.12.1_3')"
|
||||
depends="hicolor-icon-theme iso-codes setxkbmap dconf python3-xdg
|
||||
dbus-x11 $(vopt_if ibus_setup 'python3-gobject>=3.12.1_3')"
|
||||
short_desc="Intelligent Input Bus"
|
||||
maintainer="Orphaned <orphan@voidlinux.org>"
|
||||
maintainer="oreo639 <oreo6391@gmail.com>"
|
||||
license="LGPL-2.1-or-later"
|
||||
homepage="https://github.com/ibus/ibus"
|
||||
distfiles="https://github.com/ibus/ibus/releases/download/${version}/ibus-${version}.tar.gz"
|
||||
checksum=5c2fd118e7bfd4e9a42c3a20e6175a263426c90b6256f94989ed3d0384f4c9fc
|
||||
checksum=6efbda5adb96f607cf7108d1e270962c0729a59c9ea6d58eea2dde0e3cbb97df
|
||||
|
||||
build_options="ibus_setup dicts"
|
||||
desc_option_ibus_setup="Enable support for building the ibus setup UI"
|
||||
|
@ -33,10 +33,6 @@ if [ -z "$CROSS_BUILD" ]; then
|
|||
build_options_default+=" dicts"
|
||||
fi
|
||||
|
||||
pre_install() {
|
||||
vmkdir etc/dconf/db
|
||||
}
|
||||
|
||||
post_install() {
|
||||
vinstall bindings/pygobject/gi/overrides/IBus.py 644 ${py3_sitelib}/gi/overrides
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue