summaryrefslogtreecommitdiff
path: root/gtk/gtkemojichooser.c
diff options
context:
space:
mode:
authorCarlos Garcia Campos <cgarcia@igalia.com>2020-06-02 16:35:13 +0200
committerCarlos Garcia Campos <carlosgc@gnome.org>2020-06-02 16:47:56 +0200
commit2bf9b37e597b2abe977b79d1d9941e09313272f7 (patch)
tree5a706ca75628bde0b2d1a2054b0b8a28f844930a /gtk/gtkemojichooser.c
parentd2e0ada794417e90e6ea611b98ceb5b39df87632 (diff)
downloadgtk+-2bf9b37e597b2abe977b79d1d9941e09313272f7.tar.gz
emojichooser: Unparent the variations popup on dispose and before adding a new one
This was causing warnings when destroying the emoji chooser because it had children left.
Diffstat (limited to 'gtk/gtkemojichooser.c')
-rw-r--r--gtk/gtkemojichooser.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/gtk/gtkemojichooser.c b/gtk/gtkemojichooser.c
index 9f704c87f6..1830667195 100644
--- a/gtk/gtkemojichooser.c
+++ b/gtk/gtkemojichooser.c
@@ -93,6 +93,16 @@ gtk_emoji_chooser_child_init (GtkEmojiChooserChild *child)
}
static void
+gtk_emoji_chooser_child_dispose (GObject *object)
+{
+ GtkEmojiChooserChild *child = (GtkEmojiChooserChild *)object;
+
+ g_clear_pointer (&child->variations, gtk_widget_unparent);
+
+ G_OBJECT_CLASS (gtk_emoji_chooser_child_parent_class)->dispose (object);
+}
+
+static void
gtk_emoji_chooser_child_size_allocate (GtkWidget *widget,
int width,
int height,
@@ -148,7 +158,10 @@ gtk_emoji_chooser_child_popup_menu (GtkWidget *widget,
static void
gtk_emoji_chooser_child_class_init (GtkEmojiChooserChildClass *class)
{
+ GObjectClass *object_class = G_OBJECT_CLASS (class);
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class);
+
+ object_class->dispose = gtk_emoji_chooser_child_dispose;
widget_class->size_allocate = gtk_emoji_chooser_child_size_allocate;
widget_class->focus = gtk_emoji_chooser_child_focus;
widget_class->grab_focus = gtk_emoji_chooser_child_grab_focus;
@@ -436,6 +449,7 @@ show_variations (GtkEmojiChooser *chooser,
return;
parent_popover = gtk_widget_get_ancestor (child, GTK_TYPE_POPOVER);
+ g_clear_pointer (&ch->variations, gtk_widget_unparent);
popover = ch->variations = gtk_popover_new ();
gtk_popover_set_autohide (GTK_POPOVER (popover), TRUE);
gtk_widget_set_parent (popover, child);