[gtk+] gtkoverlay: Fix issues with remove



commit 9fc19b5a26e34568c46b90f7cb7357a2898e78b0
Author: Alexander Larsson <alexl redhat com>
Date:   Mon Jun 15 16:32:50 2015 +0200

    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 files changed, 5 insertions(+), 3 deletions(-)
---
diff --git a/gtk/gtkoverlay.c b/gtk/gtkoverlay.c
index f5962a1..eb6ac04 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);
 }
 
 /**


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]