Enlightenment CVS committal

Author  : leviathan
Project : e17
Module  : libs/engrave

Dir     : e17/libs/engrave/src/lib


Modified Files:
        engrave_part.c 


Log Message:
Make sure data is consistent: when part name is changed, update the rel_to 
pointing to it, and all program source and targets that used to point too. 
Thanx for DaveMDS for the report

===================================================================
RCS file: /cvs/e/e17/libs/engrave/src/lib/engrave_part.c,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -3 -r1.16 -r1.17
--- engrave_part.c      6 Sep 2006 07:31:31 -0000       1.16
+++ engrave_part.c      10 Jan 2007 01:58:30 -0000      1.17
@@ -83,6 +83,82 @@
 engrave_part_name_set(Engrave_Part *ep, const char *name)
 {
   if (!ep) return;
+
+  Engrave_Group * group;
+  Evas_List * list;
+
+  group = (Engrave_Group *) engrave_part_parent_get(ep);
+
+  if (ep->name)
+  {
+    // for all the programs in the group
+    for (list = group->programs; list; list = list->next)
+    {
+      Engrave_Program * ep2;
+      Evas_List * list2;
+      ep2 = (Engrave_Program *) list->data;
+    
+      // if source matches, update
+      if (ep2->source && !strcmp(ep2->source, ep->name))
+      {
+        IF_FREE(ep2->source);
+        ep2->source = (name ? strdup(name) : NULL);
+      }
+
+      // if any of the targets match, update too
+      for (list2 = ep2->targets; list2; list2 = list2->next)
+      {
+        char * n;
+        n = (char *) list2->data;
+        if (n && !strcmp(n, ep->name))
+        {
+          ep2->targets = evas_list_remove(ep2->targets, n);
+         IF_FREE(n);
+         ep2->targets = evas_list_append(ep2->targets, strdup(name));
+        }
+      }
+    } 
+
+    // for all other parts in the group
+    for (list = group->parts; list; list = list->next)
+    {
+      Engrave_Part * ep2;
+      Evas_List * list2;
+
+      ep2 = (Engrave_Part *) list->data;
+      // for each state
+      for (list2 = ep2->states; list2; list2 = list2->next)
+      {
+        Engrave_Part_State * eps2;
+        eps2 = (Engrave_Part_State *) list2->data;
+
+        if (eps2->rel1.to_x != NULL && !strcmp(eps2->rel1.to_x, ep->name))
+        {
+          IF_FREE(eps2->rel1.to_x);
+         eps2->rel1.to_x = (name ? strdup(name) : NULL);
+        }
+
+        if (eps2->rel1.to_y != NULL && !strcmp(eps2->rel1.to_y, ep->name))
+        {
+          IF_FREE(eps2->rel1.to_y);
+         eps2->rel1.to_y = (name ? strdup(name) : NULL);
+        }
+
+        if (eps2->rel2.to_x != NULL && !strcmp(eps2->rel2.to_x, ep->name))
+        {
+          IF_FREE(eps2->rel2.to_x);
+         eps2->rel2.to_x = (name ? strdup(name) : NULL);
+        }
+
+        if (eps2->rel2.to_y != NULL && !strcmp(eps2->rel2.to_y, ep->name))
+        {
+          IF_FREE(eps2->rel2.to_y);
+         eps2->rel2.to_y = (name ? strdup(name) : NULL);
+        }
+      }
+    }
+  }
+
   IF_FREE(ep->name);
   ep->name = (name ? strdup(name) : NULL);
 }



-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to