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>
|
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
|
* gtk/gtkcolorbutton.c (gtk_color_button_init): Don't leak a
|
||||||
PangoLayout here. (#322505, Paolo Borelli)
|
PangoLayout here. (#322505, Paolo Borelli)
|
||||||
|
|
||||||
|
@ -1,5 +1,14 @@
|
|||||||
2005-11-27 Matthias Clasen <mclasen@redhat.com>
|
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
|
* gtk/gtkcolorbutton.c (gtk_color_button_init): Don't leak a
|
||||||
PangoLayout here. (#322505, Paolo Borelli)
|
PangoLayout here. (#322505, Paolo Borelli)
|
||||||
|
|
||||||
|
@ -1313,6 +1313,20 @@ gtk_tree_view_finalize (GObject *object)
|
|||||||
/* GtkObject Methods
|
/* 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
|
static void
|
||||||
gtk_tree_view_destroy (GtkObject *object)
|
gtk_tree_view_destroy (GtkObject *object)
|
||||||
{
|
{
|
||||||
@ -1337,8 +1351,8 @@ gtk_tree_view_destroy (GtkObject *object)
|
|||||||
if (tree_view->priv->tree != NULL)
|
if (tree_view->priv->tree != NULL)
|
||||||
{
|
{
|
||||||
gtk_tree_view_unref_and_check_selection_tree (tree_view, tree_view->priv->tree);
|
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)
|
if (tree_view->priv->selection != NULL)
|
||||||
@ -9464,15 +9478,7 @@ gtk_tree_view_set_model (GtkTreeView *tree_view,
|
|||||||
tree_view->priv->model);
|
tree_view->priv->model);
|
||||||
|
|
||||||
if (tree_view->priv->tree)
|
if (tree_view->priv->tree)
|
||||||
{
|
gtk_tree_view_free_rbtree (tree_view);
|
||||||
_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_row_reference_free (tree_view->priv->drag_dest_row);
|
gtk_tree_row_reference_free (tree_view->priv->drag_dest_row);
|
||||||
tree_view->priv->drag_dest_row = NULL;
|
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);
|
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))
|
if (gtk_tree_view_unref_and_check_selection_tree (tree_view, node->children))
|
||||||
{
|
{
|
||||||
_gtk_rbtree_remove (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;
|
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)
|
if (animate)
|
||||||
{
|
{
|
||||||
tree_view->priv->expand_collapse_timeout = g_timeout_add (50, expand_collapse_timeout, tree_view);
|
tree_view->priv->expand_collapse_timeout = g_timeout_add (50, expand_collapse_timeout, tree_view);
|
||||||
|
Loading…
Reference in New Issue
Block a user