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