Merge branch 'gtk3-a11y-leak' into 'gtk-3-24'
a11y: Fix ref counting in tree views See merge request GNOME/gtk!3660
This commit is contained in:
		@ -30,12 +30,19 @@ struct _GtkContainerCellAccessiblePrivate
 | 
			
		||||
G_DEFINE_TYPE_WITH_PRIVATE (GtkContainerCellAccessible, gtk_container_cell_accessible, GTK_TYPE_CELL_ACCESSIBLE)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
unset_child (gpointer child)
 | 
			
		||||
{
 | 
			
		||||
  atk_object_set_parent (ATK_OBJECT (child), NULL);
 | 
			
		||||
  g_object_unref (child);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
gtk_container_cell_accessible_finalize (GObject *obj)
 | 
			
		||||
{
 | 
			
		||||
  GtkContainerCellAccessible *container = GTK_CONTAINER_CELL_ACCESSIBLE (obj);
 | 
			
		||||
 | 
			
		||||
  g_list_free_full (container->priv->children, g_object_unref);
 | 
			
		||||
  g_list_free_full (container->priv->children, unset_child);
 | 
			
		||||
 | 
			
		||||
  G_OBJECT_CLASS (gtk_container_cell_accessible_parent_class)->finalize (obj);
 | 
			
		||||
}
 | 
			
		||||
@ -157,6 +164,7 @@ gtk_container_cell_accessible_remove_child (GtkContainerCellAccessible *containe
 | 
			
		||||
  g_return_if_fail (GTK_IS_CELL_ACCESSIBLE (child));
 | 
			
		||||
  g_return_if_fail (container->priv->n_children > 0);
 | 
			
		||||
 | 
			
		||||
  atk_object_set_parent (ATK_OBJECT (child), NULL);
 | 
			
		||||
  container->priv->children = g_list_remove (container->priv->children, child);
 | 
			
		||||
  container->priv->n_children--;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -104,6 +104,17 @@ static void
 | 
			
		||||
cell_info_free (GtkTreeViewAccessibleCellInfo *cell_info)
 | 
			
		||||
{
 | 
			
		||||
  gtk_accessible_set_widget (GTK_ACCESSIBLE (cell_info->cell), NULL);
 | 
			
		||||
  if (GTK_IS_CONTAINER_CELL_ACCESSIBLE (cell_info->cell))
 | 
			
		||||
    {
 | 
			
		||||
      GList *children;
 | 
			
		||||
 | 
			
		||||
      while ((children = gtk_container_cell_accessible_get_children (GTK_CONTAINER_CELL_ACCESSIBLE (cell_info->cell))) != NULL)
 | 
			
		||||
        {
 | 
			
		||||
          GtkCellAccessible *child = children->data;
 | 
			
		||||
          gtk_container_cell_accessible_remove_child (GTK_CONTAINER_CELL_ACCESSIBLE (cell_info->cell), child);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  g_object_unref (cell_info->cell);
 | 
			
		||||
 | 
			
		||||
  g_free (cell_info);
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user