From 9fc19b5a26e34568c46b90f7cb7357a2898e78b0 Mon Sep 17 00:00:00 2001 From: Alexander Larsson Date: Mon, 15 Jun 2015 16:32:50 +0200 Subject: [PATCH] gtkoverlay: Fix issues with remove The iteration now progresses past a delete, so make sure we iterate safely. Also, don't chain up if we removed a child. --- gtk/gtkoverlay.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/gtk/gtkoverlay.c b/gtk/gtkoverlay.c index f5962a10bc..eb6ac04177 100644 --- a/gtk/gtkoverlay.c +++ b/gtk/gtkoverlay.c @@ -497,13 +497,14 @@ gtk_overlay_remove (GtkContainer *container, { GtkOverlayPrivate *priv = GTK_OVERLAY (container)->priv; GtkOverlayChild *child; - GSList *children; + GSList *children, *next; gboolean removed; removed = FALSE; - for (children = priv->children; children; children = children->next) + for (children = priv->children; children; children = next) { child = children->data; + next = children->next; if (child->widget == widget) { @@ -524,7 +525,8 @@ gtk_overlay_remove (GtkContainer *container, gtk_widget_child_notify (child->widget, "index"); } - GTK_CONTAINER_CLASS (gtk_overlay_parent_class)->remove (container, widget); + if (!removed) + GTK_CONTAINER_CLASS (gtk_overlay_parent_class)->remove (container, widget); } /**