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

Reply via email to