forked from AuroraMiddleware/gtk
Fix two memory handling problems in GtkTreeView: (#322350, Søren
2005-11-27 Matthias Clasen <mclasen@redhat.com> Fix two memory handling problems in GtkTreeView: (#322350, Søren Sandmann) * gtk/gtktreeview.c (gtk_tree_view_destroy) (gtk_tree_view_set_model): Remove all references to nodes in the old model. (gtk_tree_view_real_collapse_row): Unmark expanded_collapsed_node before removing the children.
This commit is contained in:
parent
6662729301
commit
7014ef0032
@ -1,5 +1,14 @@
|
||||
2005-11-27 Matthias Clasen <mclasen@redhat.com>
|
||||
|
||||
Fix two memory handling problems in GtkTreeView: (#322350,
|
||||
Søren Sandmann)
|
||||
|
||||
* gtk/gtktreeview.c (gtk_tree_view_destroy)
|
||||
(gtk_tree_view_set_model): Remove all references to nodes in
|
||||
the old model.
|
||||
(gtk_tree_view_real_collapse_row): Unmark expanded_collapsed_node
|
||||
before removing the children.
|
||||
|
||||
* gtk/gtkcolorbutton.c (gtk_color_button_init): Don't leak a
|
||||
PangoLayout here. (#322505, Paolo Borelli)
|
||||
|
||||
|
@ -1,5 +1,14 @@
|
||||
2005-11-27 Matthias Clasen <mclasen@redhat.com>
|
||||
|
||||
Fix two memory handling problems in GtkTreeView: (#322350,
|
||||
Søren Sandmann)
|
||||
|
||||
* gtk/gtktreeview.c (gtk_tree_view_destroy)
|
||||
(gtk_tree_view_set_model): Remove all references to nodes in
|
||||
the old model.
|
||||
(gtk_tree_view_real_collapse_row): Unmark expanded_collapsed_node
|
||||
before removing the children.
|
||||
|
||||
* gtk/gtkcolorbutton.c (gtk_color_button_init): Don't leak a
|
||||
PangoLayout here. (#322505, Paolo Borelli)
|
||||
|
||||
|
@ -1313,6 +1313,20 @@ gtk_tree_view_finalize (GObject *object)
|
||||
/* GtkObject Methods
|
||||
*/
|
||||
|
||||
static void
|
||||
gtk_tree_view_free_rbtree (GtkTreeView *tree_view)
|
||||
{
|
||||
_gtk_rbtree_free (tree_view->priv->tree);
|
||||
|
||||
tree_view->priv->tree = NULL;
|
||||
tree_view->priv->button_pressed_node = NULL;
|
||||
tree_view->priv->button_pressed_tree = NULL;
|
||||
tree_view->priv->prelight_tree = NULL;
|
||||
tree_view->priv->prelight_node = NULL;
|
||||
tree_view->priv->expanded_collapsed_node = NULL;
|
||||
tree_view->priv->expanded_collapsed_tree = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_tree_view_destroy (GtkObject *object)
|
||||
{
|
||||
@ -1337,8 +1351,8 @@ gtk_tree_view_destroy (GtkObject *object)
|
||||
if (tree_view->priv->tree != NULL)
|
||||
{
|
||||
gtk_tree_view_unref_and_check_selection_tree (tree_view, tree_view->priv->tree);
|
||||
_gtk_rbtree_free (tree_view->priv->tree);
|
||||
tree_view->priv->tree = NULL;
|
||||
|
||||
gtk_tree_view_free_rbtree (tree_view);
|
||||
}
|
||||
|
||||
if (tree_view->priv->selection != NULL)
|
||||
@ -9464,15 +9478,7 @@ gtk_tree_view_set_model (GtkTreeView *tree_view,
|
||||
tree_view->priv->model);
|
||||
|
||||
if (tree_view->priv->tree)
|
||||
{
|
||||
_gtk_rbtree_free (tree_view->priv->tree);
|
||||
tree_view->priv->tree = NULL;
|
||||
}
|
||||
|
||||
tree_view->priv->prelight_node = NULL;
|
||||
tree_view->priv->prelight_tree = NULL;
|
||||
tree_view->priv->button_pressed_node = NULL;
|
||||
tree_view->priv->button_pressed_tree = NULL;
|
||||
gtk_tree_view_free_rbtree (tree_view);
|
||||
|
||||
gtk_tree_row_reference_free (tree_view->priv->drag_dest_row);
|
||||
tree_view->priv->drag_dest_row = NULL;
|
||||
@ -10966,6 +10972,14 @@ gtk_tree_view_real_collapse_row (GtkTreeView *tree_view,
|
||||
gtk_tree_path_free (lsc);
|
||||
}
|
||||
|
||||
if (tree_view->priv->expanded_collapsed_node != NULL)
|
||||
{
|
||||
GTK_RBNODE_UNSET_FLAG (tree_view->priv->expanded_collapsed_node, GTK_RBNODE_IS_SEMI_EXPANDED);
|
||||
GTK_RBNODE_UNSET_FLAG (tree_view->priv->expanded_collapsed_node, GTK_RBNODE_IS_SEMI_COLLAPSED);
|
||||
|
||||
tree_view->priv->expanded_collapsed_node = NULL;
|
||||
}
|
||||
|
||||
if (gtk_tree_view_unref_and_check_selection_tree (tree_view, node->children))
|
||||
{
|
||||
_gtk_rbtree_remove (node->children);
|
||||
@ -10980,14 +10994,6 @@ gtk_tree_view_real_collapse_row (GtkTreeView *tree_view,
|
||||
tree_view->priv->expand_collapse_timeout = 0;
|
||||
}
|
||||
|
||||
if (tree_view->priv->expanded_collapsed_node != NULL)
|
||||
{
|
||||
GTK_RBNODE_UNSET_FLAG (tree_view->priv->expanded_collapsed_node, GTK_RBNODE_IS_SEMI_EXPANDED);
|
||||
GTK_RBNODE_UNSET_FLAG (tree_view->priv->expanded_collapsed_node, GTK_RBNODE_IS_SEMI_COLLAPSED);
|
||||
|
||||
tree_view->priv->expanded_collapsed_node = NULL;
|
||||
}
|
||||
|
||||
if (animate)
|
||||
{
|
||||
tree_view->priv->expand_collapse_timeout = g_timeout_add (50, expand_collapse_timeout, tree_view);
|
||||
|
Loading…
Reference in New Issue
Block a user