summaryrefslogtreecommitdiff
path: root/gtk/gtktreeview.c
diff options
context:
space:
mode:
authorKristian Rietveld <kris@gtk.org>2002-04-16 15:25:27 +0000
committerKristian Rietveld <kristian@src.gnome.org>2002-04-16 15:25:27 +0000
commit8fbac80bc4f00b15a49061fe388fbe2366c77101 (patch)
treefd63a38368e83122ad7171baf0dc0b9b94a463f6 /gtk/gtktreeview.c
parent163890cafc8a7216320ec439d2ff8086b53800ce (diff)
downloadgtk+-8fbac80bc4f00b15a49061fe388fbe2366c77101.tar.gz
check ->priv->cursor and ->priv->anchor rowrefs before removing
Tue Apr 16 17:28:21 2002 Kristian Rietveld <kris@gtk.org> * gtk/gtktreeview.c (gtk_tree_view_real_collapse_row): check ->priv->cursor and ->priv->anchor rowrefs before removing node->children from the rbtree. Also check the ->priv->last_single_clicked and ->priv->last_single_clicked_2 rowrefs (I think I really need to rename those two someday).
Diffstat (limited to 'gtk/gtktreeview.c')
-rw-r--r--gtk/gtktreeview.c73
1 files changed, 47 insertions, 26 deletions
diff --git a/gtk/gtktreeview.c b/gtk/gtktreeview.c
index 6e915d8d5b..730493a771 100644
--- a/gtk/gtktreeview.c
+++ b/gtk/gtktreeview.c
@@ -8846,6 +8846,53 @@ gtk_tree_view_real_collapse_row (GtkTreeView *tree_view,
gtk_tree_path_free (child_path);
}
+ if (gtk_tree_row_reference_valid (tree_view->priv->cursor))
+ {
+ GtkTreePath *cursor_path = gtk_tree_row_reference_get_path (tree_view->priv->cursor);
+
+ if (gtk_tree_path_is_ancestor (path, cursor_path))
+ {
+ gtk_tree_row_reference_free (tree_view->priv->cursor);
+ tree_view->priv->cursor = gtk_tree_row_reference_new_proxy (G_OBJECT (tree_view),
+ tree_view->priv->model,
+ path);
+ }
+ gtk_tree_path_free (cursor_path);
+ }
+
+ if (gtk_tree_row_reference_valid (tree_view->priv->anchor))
+ {
+ GtkTreePath *anchor_path = gtk_tree_row_reference_get_path (tree_view->priv->anchor);
+ if (gtk_tree_path_is_ancestor (path, anchor_path))
+ {
+ gtk_tree_row_reference_free (tree_view->priv->anchor);
+ tree_view->priv->anchor = NULL;
+ }
+ gtk_tree_path_free (anchor_path);
+ }
+
+ if (gtk_tree_row_reference_valid (tree_view->priv->last_single_clicked))
+ {
+ GtkTreePath *lsc = gtk_tree_row_reference_get_path (tree_view->priv->last_single_clicked);
+ if (gtk_tree_path_is_ancestor (path, lsc))
+ {
+ gtk_tree_row_reference_free (tree_view->priv->last_single_clicked);
+ tree_view->priv->last_single_clicked = NULL;
+ }
+ gtk_tree_path_free (lsc);
+ }
+
+ if (gtk_tree_row_reference_valid (tree_view->priv->last_single_clicked_2))
+ {
+ GtkTreePath *lsc = gtk_tree_row_reference_get_path (tree_view->priv->last_single_clicked_2);
+ if (gtk_tree_path_is_ancestor (path, lsc))
+ {
+ gtk_tree_row_reference_free (tree_view->priv->last_single_clicked_2);
+ tree_view->priv->last_single_clicked_2 = NULL;
+ }
+ gtk_tree_path_free (lsc);
+ }
+
if (gtk_tree_view_unref_and_check_selection_tree (tree_view, node->children))
{
_gtk_rbtree_remove (node->children);
@@ -8882,32 +8929,6 @@ gtk_tree_view_real_collapse_row (GtkTreeView *tree_view,
gtk_widget_queue_resize (GTK_WIDGET (tree_view));
}
- if (gtk_tree_row_reference_valid (tree_view->priv->cursor))
- {
- GtkTreePath *cursor_path = gtk_tree_row_reference_get_path (tree_view->priv->cursor);
-
- if (gtk_tree_path_is_ancestor (path, cursor_path))
- {
- gtk_tree_row_reference_free (tree_view->priv->cursor);
- tree_view->priv->cursor = gtk_tree_row_reference_new_proxy (G_OBJECT (tree_view),
- tree_view->priv->model,
- path);
- }
- gtk_tree_path_free (cursor_path);
- }
-
- if (gtk_tree_row_reference_valid (tree_view->priv->anchor))
- {
- GtkTreePath *anchor_path = gtk_tree_row_reference_get_path (tree_view->priv->anchor);
- if (gtk_tree_path_is_ancestor (path, anchor_path))
- {
- gtk_tree_row_reference_free (tree_view->priv->anchor);
- tree_view->priv->anchor = NULL;
- }
- gtk_tree_path_free (anchor_path);
-
- }
-
g_signal_emit (G_OBJECT (tree_view), tree_view_signals[ROW_COLLAPSED], 0, &iter, path);
/* now that we've collapsed all rows, we want to try to set the prelight