rimmed pushed a commit to branch master.

http://git.enlightenment.org/tools/eflete.git/commit/?id=fbf3de06341bd468e85f8bbf78c90e73945d89f1

commit fbf3de06341bd468e85f8bbf78c90e73945d89f1
Author: Vyacheslav Reutskiy <[email protected]>
Date:   Wed Nov 25 09:31:57 2015 +0200

    groupedit: free the array of table items right after use it
    
    Change-Id: Id46fd35b39d04b25e49f18716ce1f72aa6bcc59b
---
 src/bin/ui/workspace/groupedit_calc.c    | 109 ++++++++++++++++++-------------
 src/bin/ui/workspace/groupedit_private.h |   1 -
 2 files changed, 62 insertions(+), 48 deletions(-)

diff --git a/src/bin/ui/workspace/groupedit_calc.c 
b/src/bin/ui/workspace/groupedit_calc.c
index 6399734..84e622b 100644
--- a/src/bin/ui/workspace/groupedit_calc.c
+++ b/src/bin/ui/workspace/groupedit_calc.c
@@ -535,51 +535,14 @@ _part_select(void *data,
 }
 
 static void
-_part_table_add(Ws_Groupedit_Smart_Data *sd, Groupedit_Part *gp)
-{
-
-   Eina_List *l;
-   Eina_Stringshare *str;
-   int span_c, span_r, col, row, i, j;
-   const Evas_Object *table;
-
-   assert(gp->container == NULL);
-
-   gp->container = evas_object_table_add(sd->e);
-   elm_box_pack_end(gp->draw, gp->container);
-   evas_object_show(gp->container);
-
-   table = edje_object_part_object_get(sd->group->edit_object, gp->part->name);
-   evas_object_table_col_row_size_get(table, &col, &row);
-   fprintf(stdout, "%5d %5d\n", col, row);
-   gp->items_draw = (Eina_Stringshare ***)mem_calloc(1, 
sizeof(Eina_Stringshare **) * col);
-   for (i = 0; i < col; i++)
-     gp->items_draw[i] = (Eina_Stringshare **)mem_calloc(1, 
sizeof(Eina_Stringshare *) * row);
-   EINA_LIST_FOREACH(gp->part->items, l, str)
-     {
-        col = edje_edit_part_item_position_col_get(sd->group->edit_object, 
gp->part->name, str);
-        row = edje_edit_part_item_position_row_get(sd->group->edit_object, 
gp->part->name, str);
-        span_c = edje_edit_part_item_span_col_get(sd->group->edit_object, 
gp->part->name, str);
-        span_r = edje_edit_part_item_span_row_get(sd->group->edit_object, 
gp->part->name, str);
-
-        for (i = col; i < (col + span_c); i++)
-          {
-             for (j = row; j < (row + span_r); j++)
-               gp->items_draw[i][j] = (Eina_Stringshare *) -1;
-          }
-        gp->items_draw[col][row] = eina_stringshare_add(str);
-     }
-}
-
-static void
-_part_table_items_add(Ws_Groupedit_Smart_Data *sd, Groupedit_Part *gp)
+_part_table_items_add(Ws_Groupedit_Smart_Data *sd, Groupedit_Part *gp, 
Eina_Stringshare ***items_draw)
 {
    const Evas_Object *table;
    Evas_Object *cell;
    Eina_Stringshare *item_name, *item_source;
    int w, h; /* Geometry values */
    int min_w, max_w, min_h, max_h; /* Hints values */
-   int i, k, col, row;
+   int i, j, col, row;
    unsigned char span_col, span_row;
 
    assert(gp->container != NULL);
@@ -590,16 +553,16 @@ _part_table_items_add(Ws_Groupedit_Smart_Data *sd, 
Groupedit_Part *gp)
 
    for (i = 0; i < col; i++)
      {
-        for (k = 0; k < row; k++)
+        for (j = 0; j < row; j++)
           {
-             if (gp->items_draw[i][k] == (Eina_Stringshare *) -1) continue;
+             if (items_draw[i][j] == (Eina_Stringshare *) -1) continue;
 
              span_col = 1;
              span_row = 1;
 
-             if (gp->items_draw[i][k] != NULL)
+             if (items_draw[i][j] != NULL)
                {
-                  item_name = gp->items_draw[i][k];
+                  item_name = items_draw[i][j];
                   span_col = 
edje_edit_part_item_span_col_get(sd->group->edit_object, gp->part->name, 
item_name);
                   span_row = 
edje_edit_part_item_span_row_get(sd->group->edit_object, gp->part->name, 
item_name);
 
@@ -627,7 +590,7 @@ _part_table_items_add(Ws_Groupedit_Smart_Data *sd, 
Groupedit_Part *gp)
                   max_w = 
edje_edit_part_item_max_w_get(sd->group->edit_object, gp->part->name, 
item_name);
                   max_h = 
edje_edit_part_item_max_h_get(sd->group->edit_object, gp->part->name, 
item_name);
                   evas_object_size_hint_max_set(cell, max_w, max_h);
-                  evas_object_table_pack(gp->container, cell, i, k, span_col, 
span_row);
+                  evas_object_table_pack(gp->container, cell, i, j, span_col, 
span_row);
                }
              cell = elm_layout_add(sd->parent);
              evas_object_size_hint_align_set(cell, EVAS_HINT_FILL, 
EVAS_HINT_FILL);
@@ -636,9 +599,63 @@ _part_table_items_add(Ws_Groupedit_Smart_Data *sd, 
Groupedit_Part *gp)
              evas_object_show(cell);
              elm_object_signal_emit(cell, "border,part_item", "eflete");
 
-             evas_object_table_pack(gp->container, cell, i, k, span_col, 
span_row);
+             evas_object_table_pack(gp->container, cell, i, j, span_col, 
span_row);
+          }
+     }
+}
+
+static void
+_part_table_add(Ws_Groupedit_Smart_Data *sd, Groupedit_Part *gp)
+{
+
+   Eina_List *l;
+   Eina_Stringshare *str;
+   int span_c, span_r, col, row, i, j;
+   const Evas_Object *table;
+   Eina_Stringshare ***items_draw;
+
+   assert(gp->container == NULL);
+
+   gp->container = evas_object_table_add(sd->e);
+   elm_box_pack_end(gp->draw, gp->container);
+   evas_object_show(gp->container);
+
+   table = edje_object_part_object_get(sd->group->edit_object, gp->part->name);
+   evas_object_table_col_row_size_get(table, &col, &row);
+   fprintf(stdout, "%5d %5d\n", col, row);
+   items_draw = (Eina_Stringshare ***)mem_calloc(1, sizeof(Eina_Stringshare 
**) * col);
+   for (i = 0; i < col; i++)
+     items_draw[i] = (Eina_Stringshare **)mem_calloc(1, 
sizeof(Eina_Stringshare *) * row);
+   EINA_LIST_FOREACH(gp->part->items, l, str)
+     {
+        col = edje_edit_part_item_position_col_get(sd->group->edit_object, 
gp->part->name, str);
+        row = edje_edit_part_item_position_row_get(sd->group->edit_object, 
gp->part->name, str);
+        span_c = edje_edit_part_item_span_col_get(sd->group->edit_object, 
gp->part->name, str);
+        span_r = edje_edit_part_item_span_row_get(sd->group->edit_object, 
gp->part->name, str);
+
+        for (i = col; i < (col + span_c); i++)
+          {
+             for (j = row; j < (row + span_r); j++)
+               items_draw[i][j] = (Eina_Stringshare *) -1;
           }
+        items_draw[col][row] = eina_stringshare_add(str);
      }
+   _part_table_items_add(sd, gp, items_draw);
+
+   evas_object_table_col_row_size_get(table, &col, &row);
+   for (i = 0; i < col; i++)
+     {
+        for (j = 0; j < row; j++)
+          {
+             if (items_draw[i][j] == (Eina_Stringshare *) -1) continue;
+             eina_stringshare_del(items_draw[i][j]);
+          }
+     }
+   for (i = 0; i < col; i++)
+     free(items_draw[i]);
+   free(items_draw);
+
+
 }
 
 /* get from edje_util.c:2935 */
@@ -1009,7 +1026,6 @@ _parts_recalc(Ws_Groupedit_Smart_Data *sd)
                 {
                    _part_container_del(gp);
                    _part_table_add(sd, gp);
-                   _part_table_items_add(sd, gp);
                 }
               _table_param_update(sd, gp);
               _common_param_update(gp, sd->group->edit_object);
@@ -1120,7 +1136,6 @@ _part_draw_add(Ws_Groupedit_Smart_Data *sd, Part_ *part)
          PART_VIEW_PROXY_SET()
          elm_object_signal_emit(gp->layout, "border,table", "eflete");
          _part_table_add(sd, gp);
-         _part_table_items_add(sd, gp);
          break;
       case EDJE_PART_TYPE_BOX:
          PART_VIEW_ADD()
diff --git a/src/bin/ui/workspace/groupedit_private.h 
b/src/bin/ui/workspace/groupedit_private.h
index 3ddce0f..672f378 100644
--- a/src/bin/ui/workspace/groupedit_private.h
+++ b/src/bin/ui/workspace/groupedit_private.h
@@ -145,7 +145,6 @@ struct _Groupedit_Part
    Evas_Object *proxy_part;
    Evas_Object *layout;
    Evas_Object *container;    /**< Used for box/table parts */
-   Eina_Stringshare ***items_draw;
    Evas_Object *item;         /**< The object border in the separete mode */
    Eina_List *items;          /**< The items, for TABLE, BOX part types */
    Eina_List *fake_items;          /**< The items, for TABLE, BOX part types */

-- 


Reply via email to