Re: treeview: seg fault When Collapsing a Row Containg a Selected Item
- From: Marshall Lake <mlake mlake net>
- To: gtk-app-devel-list gnome org
- Subject: Re: treeview: seg fault When Collapsing a Row Containg a Selected Item
- Date: Sun, 17 Jun 2007 09:37:25 -0400 (EDT)
I have a treeview/treestore containing many top-level rows. Each
top-level row contains many children. The treeview works fine except
for one thing. If the user expands a top-level row, selects a child,
and then collapses that row the program seg faults with the console
error:
gtk_tree_store_get_value: assertion `iter->stamp == GTK_TREE_STORE (tree_model)->stamp' failed
gtype.c:3351: type id `0' is invalid
can't peek value table for type `<invalid>' which is not currently referenced
Without seeing the code I can only guess. I seems that the iter your
using is invalid -- or no longer valid. This could occur if you used a
LOCAL variable to create the iter; then saved the pointer of that inter
and tried to use it somewhere else which creates the segfault.
To poke around looking for it, use this api to test iters before use:
bool=gtk_tree_store_iter_is_valid(GtkTreeStore *tree_model, GtkTreeIter
*iter)
I apologize for not posting the code originally. See below.
I don't quite understand how the gtk_tree_store_iter_is_valid() function
will help me since the seg fault occurs when the top-level row is
collapsed and is (seemingly ?) out of my control.
void
TeamSelected2 (GtkTreeSelection *selection) {
GtkTreeModel *model;
GtkTreePath *path;
GtkTreeIter iter;
gint sub, row_count, x;
gchar *teamname, path_str[10] = " ";
gboolean valid;
gtk_tree_selection_get_selected (selection, &model, &iter);
gtk_tree_model_get (model, &iter, NAME_COLUMN, &teamname, -1);
if (strlen (teamname) == 4)
/* user clicked on a year */
return;
for (sub = row_count = 0; sub < toplevelentries; sub++, row_count = 0) {
/* walk through the root level of data (years) */
sprintf (&path_str[0], "%d:0", sub);
path = gtk_tree_path_new_from_string (&path_str[0]);
valid = gtk_tree_model_get_iter (model, &iter, path);
while (valid) {
/* walk through the sub-level (teams), looking for the selected row */
if (gtk_tree_selection_iter_is_selected (selection, &iter) == TRUE)
/* get out of the for() loop */
goto GetOutFor;
row_count++;
valid = gtk_tree_model_iter_next (model, &iter);
}
}
GetOutFor:
[do some processing and return]
--
Marshall Lake -- mlake mlake net -- http://mlake.net
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]