backport dup after program fix.
authorraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Mon, 10 Dec 2012 06:37:12 +0000 (06:37 +0000)
committerraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Mon, 10 Dec 2012 06:37:12 +0000 (06:37 +0000)
git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/branches/edje-1.7@80566 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

AUTHORS
ChangeLog
NEWS
src/bin/edje_cc_handlers.c

diff --git a/AUTHORS b/AUTHORS
index 62ee3da..7430ce0 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -30,3 +30,4 @@ Michael Bouchaud (yoz) <michael.bouchaud@gmail.com>
 WooHyun Jung (woohyun) <woohyun0705@gmail.com>
 Guilherme Silveira <xguiga@gmail.com>
 Robert David <robert.david.public@gmail.com>
+Bluezery <ohpowel@gmail.com>
index a6b39a9..a262f5d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
 
        * 1.7.3 release
 
+2012-12-05  Tae-Hwan Kim (Bluezery)
+
+        * Fix inheriting gorups with programs that have after programs where
+        after programs are duplicated in the list.
diff --git a/NEWS b/NEWS
index ce26384..1cf7b5c 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -5,6 +5,7 @@ Changes since Edje 1.7.2:
 
 Fixes:
     * fix compilation on Solaris 11
+    * fix duplicate after programs in group inheritance.
 
 Changes since Edje 1.7.1:
 -------------------------
index f7fce79..9dd2cac 100644 (file)
@@ -1089,9 +1089,11 @@ _edje_program_copy(Edje_Program *ep, Edje_Program *ep2)
 
    EINA_LIST_FOREACH(ep2->after, l, pa2)
      {
-        pa = mem_alloc(SZ(Edje_Program_After));
+        name = (char*) (pa2 + 1);
+        pa = mem_alloc(SZ(Edje_Program_After) + strlen(name) + 1);
         ep->after = eina_list_append(ep->after, pa);
-
+        copy = (char*) (pa + 1);
+        memcpy(copy, name, strlen(name) + 1);
         data_queue_copied_program_lookup(pc, &(pa2->id), &(pa->id));
      }
 
@@ -7934,14 +7936,27 @@ st_collections_group_programs_program_after(void)
    ep = current_program;
      {
        Edje_Program_After *pa;
+       Edje_Program_After *pa2;
+       Eina_List *l;
        char *name;
+        char *copy;
 
        name = parse_str(0);
 
-       pa = mem_alloc(SZ(Edje_Program_After));
+        EINA_LIST_FOREACH(ep->after, l, pa2)
+          {
+             if (!strcmp(name, (char*) (pa2 + 1)))
+               {
+                  free(name);
+                  return;
+               }
+          }
+
+       pa = mem_alloc(SZ(Edje_Program_After) + strlen(name) + 1);
        pa->id = -1;
        ep->after = eina_list_append(ep->after, pa);
-
+        copy = (char*)(pa + 1);
+        memcpy(copy, name, strlen(name) + 1);
        data_queue_program_lookup(pc, name, &(pa->id));
        free(name);
      }