Enlightenment CVS committal Author : moom16 Project : e17 Module : proto
Dir : e17/proto/etk/src/lib Modified Files: etk_tree.c Log Message: * Fix a segv that appears if a callback connected on the "selected" signal tries to clear the tree =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/etk/src/lib/etk_tree.c,v retrieving revision 1.9 retrieving revision 1.10 diff -u -3 -r1.9 -r1.10 --- etk_tree.c 30 Oct 2005 00:07:45 -0000 1.9 +++ etk_tree.c 30 Oct 2005 08:13:32 -0000 1.10 @@ -698,6 +698,15 @@ if ((l = evas_list_find_list(row->node.parent->child_rows, row))) { + Etk_Tree_Node *n; + for (n = row->tree->last_selected; n; n = n->parent) + { + if (&row->node == n) + { + row->tree->last_selected = NULL; + break; + } + } _etk_tree_row_free(l->data); row->node.parent->child_rows = evas_list_remove_list(row->node.parent->child_rows, l); } @@ -720,6 +729,7 @@ _etk_tree_row_free(tree->root.child_rows->data); tree->root.child_rows = evas_list_remove_list(tree->root.child_rows, tree->root.child_rows); } + tree->last_selected = NULL; if (!tree->frozen) etk_widget_redraw_queue(ETK_WIDGET(tree)); @@ -2215,6 +2225,7 @@ { etk_tree_unselect_all(tree); node->selected = TRUE; + tree->last_selected = node; etk_signal_emit(_etk_tree_signals[ETK_TREE_ROW_SELECTED_SIGNAL], ETK_OBJECT(tree), NULL, node->row); } else @@ -2249,6 +2260,7 @@ node->selected = TRUE; } } + tree->last_selected = node; etk_signal_emit(_etk_tree_signals[ETK_TREE_ROW_SELECTED_SIGNAL], ETK_OBJECT(tree), NULL, node->row); } else if (evas_key_modifier_is_set(modifiers, "Control")) @@ -2256,11 +2268,13 @@ if (node->selected) { node->selected = FALSE; + tree->last_selected = node; etk_signal_emit(_etk_tree_signals[ETK_TREE_ROW_UNSELECTED_SIGNAL], ETK_OBJECT(tree), NULL, node->row); } else { node->selected = TRUE; + tree->last_selected = node; etk_signal_emit(_etk_tree_signals[ETK_TREE_ROW_SELECTED_SIGNAL], ETK_OBJECT(tree), NULL, node->row); } } @@ -2268,10 +2282,10 @@ { etk_tree_unselect_all(tree); node->selected = TRUE; + tree->last_selected = node; etk_signal_emit(_etk_tree_signals[ETK_TREE_ROW_SELECTED_SIGNAL], ETK_OBJECT(tree), NULL, node->row); } } - tree->last_selected = node; etk_widget_redraw_queue(ETK_WIDGET(tree->grid)); } ------------------------------------------------------- This SF.Net email is sponsored by the JBoss Inc. Get Certified Today * Register for a JBoss Training Course Free Certification Exam for All Training Attendees Through End of 2005 Visit http://www.jboss.com/services/certification for more information _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs