[gtk/matthiasc/for-master-2: 6/16] entry: Avoid criticals in dispose
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/matthiasc/for-master-2: 6/16] entry: Avoid criticals in dispose
- Date: Wed, 5 Feb 2020 06:04:10 +0000 (UTC)
commit 005ea7a09d719894ec38f98ec622f0291571a93f
Author: Matthias Clasen <mclasen redhat com>
Date: Tue Feb 4 22:15:32 2020 +0100
entry: Avoid criticals in dispose
The accessible gets properties of the entry, and
resetting the entry icons triggers accessible change
notification, so do that before we dismantle the entry
too far to respond to a g_object_get () call.
gtk/gtkentry.c | 19 ++++++++++---------
1 file changed, 10 insertions(+), 9 deletions(-)
---
diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c
index 921a96951b..77d2dd3bbc 100644
--- a/gtk/gtkentry.c
+++ b/gtk/gtkentry.c
@@ -1288,6 +1288,11 @@ gtk_entry_dispose (GObject *object)
GtkEntry *entry = GTK_ENTRY (object);
GtkEntryPrivate *priv = gtk_entry_get_instance_private (entry);
+ gtk_entry_set_icon_from_paintable (entry, GTK_ENTRY_ICON_PRIMARY, NULL);
+ gtk_entry_set_icon_tooltip_markup (entry, GTK_ENTRY_ICON_PRIMARY, NULL);
+ gtk_entry_set_icon_from_paintable (entry, GTK_ENTRY_ICON_SECONDARY, NULL);
+ gtk_entry_set_icon_tooltip_markup (entry, GTK_ENTRY_ICON_SECONDARY, NULL);
+
gtk_entry_set_completion (entry, NULL);
if (priv->text)
@@ -1299,11 +1304,6 @@ gtk_entry_dispose (GObject *object)
g_clear_pointer (&priv->emoji_chooser, gtk_widget_unparent);
- gtk_entry_set_icon_from_paintable (entry, GTK_ENTRY_ICON_PRIMARY, NULL);
- gtk_entry_set_icon_tooltip_markup (entry, GTK_ENTRY_ICON_PRIMARY, NULL);
- gtk_entry_set_icon_from_paintable (entry, GTK_ENTRY_ICON_SECONDARY, NULL);
- gtk_entry_set_icon_tooltip_markup (entry, GTK_ENTRY_ICON_SECONDARY, NULL);
-
G_OBJECT_CLASS (gtk_entry_parent_class)->dispose (object);
}
@@ -2299,18 +2299,19 @@ gtk_entry_set_icon_from_paintable (GtkEntry *entry,
GdkPaintable *paintable)
{
GtkEntryPrivate *priv = gtk_entry_get_instance_private (entry);
- EntryIconInfo *icon_info;
g_return_if_fail (GTK_IS_ENTRY (entry));
g_return_if_fail (IS_VALID_ICON_POSITION (icon_pos));
- if ((icon_info = priv->icons[icon_pos]) == NULL)
- icon_info = construct_icon_info (GTK_WIDGET (entry), icon_pos);
-
g_object_freeze_notify (G_OBJECT (entry));
if (paintable)
{
+ EntryIconInfo *icon_info;
+
+ if ((icon_info = priv->icons[icon_pos]) == NULL)
+ icon_info = construct_icon_info (GTK_WIDGET (entry), icon_pos);
+
g_object_ref (paintable);
gtk_image_set_from_paintable (GTK_IMAGE (icon_info->widget), paintable);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]