diff options
author | Matthias Clasen <mclasen@redhat.com> | 2019-03-21 22:12:22 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2019-03-26 19:18:39 -0400 |
commit | 25ea3fba8f9119b7819e80f3f48c8981c37d0bdb (patch) | |
tree | d46e6f628ad54aa6d0b1e511506e5b2b98420bbd | |
parent | 84585940e8d0113cbd2bd4989d8d6ff77af9a360 (diff) | |
download | gtk+-25ea3fba8f9119b7819e80f3f48c8981c37d0bdb.tar.gz |
entry: Adapt to new popover lifecycle
We need to unparent popovers in dispose.
-rw-r--r-- | gtk/gtkentry.c | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c index eafc963790..b8d2547bc2 100644 --- a/gtk/gtkentry.c +++ b/gtk/gtkentry.c @@ -163,6 +163,7 @@ struct _GtkEntryPrivate GtkWidget *text; GtkWidget *progress_widget; + GtkWidget *emoji_chooser; guint show_emoji_icon : 1; guint editing_canceled : 1; /* Only used by GtkCellRendererText */ @@ -1293,6 +1294,8 @@ gtk_entry_dispose (GObject *object) } g_clear_pointer (&priv->text, gtk_widget_unparent); + 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); @@ -3453,28 +3456,27 @@ static void gtk_entry_insert_emoji (GtkEntry *entry) { GtkEntryPrivate *priv = gtk_entry_get_instance_private (entry); - GtkWidget *chooser; - GdkRectangle rect; if (gtk_widget_get_ancestor (GTK_WIDGET (entry), GTK_TYPE_EMOJI_CHOOSER) != NULL) return; - chooser = GTK_WIDGET (g_object_get_data (G_OBJECT (entry), "gtk-emoji-chooser")); - if (!chooser) + if (!priv->emoji_chooser) { - chooser = gtk_emoji_chooser_new (); - g_object_set_data (G_OBJECT (entry), "gtk-emoji-chooser", chooser); + GdkRectangle rect; + + priv->emoji_chooser = gtk_emoji_chooser_new (); - gtk_popover_set_relative_to (GTK_POPOVER (chooser), GTK_WIDGET (entry)); + gtk_popover_set_relative_to (GTK_POPOVER (priv->emoji_chooser), GTK_WIDGET (entry)); if (priv->show_emoji_icon) { gtk_entry_get_icon_area (entry, GTK_ENTRY_ICON_SECONDARY, &rect); - gtk_popover_set_pointing_to (GTK_POPOVER (chooser), &rect); + gtk_popover_set_pointing_to (GTK_POPOVER (priv->emoji_chooser), &rect); } - g_signal_connect_swapped (chooser, "emoji-picked", G_CALLBACK (gtk_entry_enter_text), entry); + g_signal_connect_swapped (priv->emoji_chooser, "emoji-picked", + G_CALLBACK (gtk_entry_enter_text), entry); } - gtk_popover_popup (GTK_POPOVER (chooser)); + gtk_popover_popup (GTK_POPOVER (priv->emoji_chooser)); } static void |