rimmed pushed a commit to branch master.

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

commit 8d8769f400908830cc8f73964164f7623f5f1f0f
Author: Vitalii Vorobiov <vi.vorob...@samsung.com>
Date:   Mon Sep 12 19:12:53 2016 +0300

    resource_manager2: forgotten AFTER and TARGETS del free and update
---
 src/bin/common/signals.h                           |  4 ++
 src/bin/editor/editor_program.c                    |  9 ++--
 src/bin/project_manager/project_manager.c          |  6 +++
 src/bin/resource_manager/resource_manager2.h       |  1 +
 src/bin/resource_manager/resource_manager_build.c  |  1 +
 src/bin/resource_manager/resource_manager_free.c   | 62 ++++++++++++++++++++--
 .../resource_manager/resource_manager_private.h    |  2 +-
 src/bin/resource_manager/resource_manager_react.c  | 16 +++---
 8 files changed, 84 insertions(+), 17 deletions(-)

diff --git a/src/bin/common/signals.h b/src/bin/common/signals.h
index 45290d3..0b81705 100644
--- a/src/bin/common/signals.h
+++ b/src/bin/common/signals.h
@@ -449,6 +449,10 @@ typedef struct {
  *
  * @ingroup Window
  */
+typedef struct {
+   const char *program_name;
+   Change *change;
+} Editor_Program;
 #define SIGNAL_EDITOR_PROGRAM_DELETED "SIGNAL_EDITOR_PROGRAM_DELETED"
 
 /**
diff --git a/src/bin/editor/editor_program.c b/src/bin/editor/editor_program.c
index c22eafe..12266cf 100644
--- a/src/bin/editor/editor_program.c
+++ b/src/bin/editor/editor_program.c
@@ -901,12 +901,13 @@ _editor_program_del(Evas_Object *edit_object, Change 
*change, Eina_Bool merge __
                     const char *program_name)
 {
    Diff *diff;
-   Eina_Stringshare *event_info;
+   Editor_Program event_info;
 
    assert(edit_object != NULL);
 
-   event_info = eina_stringshare_add(program_name);
-   if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_PROGRAM_DELETED, (void *)event_info);
+   event_info.program_name = eina_stringshare_add(program_name);
+   event_info.change = change;
+   if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_PROGRAM_DELETED, (void *)&event_info);
 
    if (change)
      {
@@ -928,10 +929,10 @@ _editor_program_del(Evas_Object *edit_object, Change 
*change, Eina_Bool merge __
    if (apply)
      {
         CRIT_ON_FAIL(edje_edit_program_del(edit_object, program_name));
-        eina_stringshare_del(event_info);
         CRIT_ON_FAIL(editor_save(edit_object));
         _editor_project_changed();
      }
+   eina_stringshare_del(event_info.program_name);
    return true;
 }
 
diff --git a/src/bin/project_manager/project_manager.c 
b/src/bin/project_manager/project_manager.c
index 2a02c73..691364b 100644
--- a/src/bin/project_manager/project_manager.c
+++ b/src/bin/project_manager/project_manager.c
@@ -28,6 +28,7 @@
 #endif
 
 #include "change.h"
+#include "resource_manager2.h"
 
 #define THREAD_CONTEXT_SWITCH_BEGIN    ecore_thread_main_loop_begin()
 #define THREAD_CONTEXT_SWITCH_END      ecore_thread_main_loop_end()
@@ -320,6 +321,9 @@ _project_open_internal(Project_Thread *ptd)
    ftd->queue = 6;
    eina_lock_new(&ftd->mutex);
    ecore_thread_global_data_add("ptd", ptd, NULL, false);
+
+   resource_manager_init(project);
+
    /* Launch images load inside thread with feedback */
    ecore_thread_feedback_run(_image_resources_feedback_job, 
_resources_export_feedback_cb,
                              _resources_export_end_cb, 
_resources_export_cancel_cb, ftd,
@@ -607,6 +611,8 @@ pm_project_close(Project *project)
 
    assert(project != NULL);
 
+   resource_manager_shutdown(project);
+
    backup = eina_stringshare_printf("%s.backup", project->dev);
    ecore_file_remove(backup);
    eina_stringshare_del(backup);
diff --git a/src/bin/resource_manager/resource_manager2.h 
b/src/bin/resource_manager/resource_manager2.h
index 2bf1ab3..2701bd5 100644
--- a/src/bin/resource_manager/resource_manager2.h
+++ b/src/bin/resource_manager/resource_manager2.h
@@ -140,6 +140,7 @@ struct _Program2
    Edje_Action_Type type;
    Eina_List *targets;
    Eina_List *afters;
+   Eina_Stringshare *filter_part;
    Group2 *group;
 };
 
diff --git a/src/bin/resource_manager/resource_manager_build.c 
b/src/bin/resource_manager/resource_manager_build.c
index 0038c1a..e3d47f0 100644
--- a/src/bin/resource_manager/resource_manager_build.c
+++ b/src/bin/resource_manager/resource_manager_build.c
@@ -257,6 +257,7 @@ _program_dependency_load(Project *pro, Group2 *group, 
Program2 *program)
    res = resource_manager_find(group->parts, name);
    if (res)
      {
+        program->filter_part = eina_stringshare_add(name);
         _resource_usage_resource_add((Resource2 *)program, res);
         state = edje_edit_program_filter_state_get(group->edit_object, 
program->common.name);
         res_state = resource_manager_find(((Part2 *)res)->states, state);
diff --git a/src/bin/resource_manager/resource_manager_free.c 
b/src/bin/resource_manager/resource_manager_free.c
index a1ae67b..71796f5 100644
--- a/src/bin/resource_manager/resource_manager_free.c
+++ b/src/bin/resource_manager/resource_manager_free.c
@@ -405,12 +405,29 @@ _resource_part_del(Group2 *group, Part2 *part, Change 
*change)
         else if (res->common.type == RESOURCE2_TYPE_PROGRAM)
           {
              program = (Program2 *)res;
-             
CRIT_ON_FAIL(editor_program_filter_part_set(program->group->edit_object,
+             /* if it is actually filter */
+             if (program->filter_part == part->common.name)
+               {
+                  
CRIT_ON_FAIL(editor_program_filter_part_set(program->group->edit_object,
+                                                              change,
+                                                              false,
+                                                              true,
+                                                              res->common.name,
+                                                              NULL));
+                  eina_stringshare_del(program->filter_part);
+                  program->filter_part = NULL;
+               }
+             else
+               {
+                  /* if not its probably target part */
+                  
CRIT_ON_FAIL(editor_program_target_del(program->group->edit_object,
                                                          change,
                                                          false,
                                                          true,
                                                          res->common.name,
-                                                         NULL));
+                                                         part->common.name));
+                  program->targets = eina_list_remove(program->targets, part);
+               }
           }
      }
 
@@ -448,8 +465,45 @@ _resource_program_free(Group2 *group, Program2 *program)
 }
 
 void
-_resource_program_del(Group2 *group, Program2 *program)
+_resource_program_del(Group2 *group, Program2 *program, Change *change)
 {
+   Eina_List *l;
+   Resource2 *res;
+   Program2 *res_program;
+
+   EINA_LIST_FOREACH(program->common.used_in, l, res)
+     {
+        if (res->common.type == RESOURCE2_TYPE_PROGRAM)
+          {
+             res_program = (Program2 *)res;
+
+             /* if its inside of targets */
+             while (eina_list_data_find_list(res_program->targets, program))
+               {
+                  /* if not its probably target part */
+                  
CRIT_ON_FAIL(editor_program_target_del(program->group->edit_object,
+                                                         change,
+                                                         false,
+                                                         true,
+                                                         res->common.name,
+                                                         
program->common.name));
+                  res_program->targets = 
eina_list_remove(res_program->targets, program);
+               }
+             /* if its inside of afters */
+             while (eina_list_data_find_list(res_program->afters, program))
+               {
+                  /* if not its probably target part */
+                  
CRIT_ON_FAIL(editor_program_after_del(program->group->edit_object,
+                                                        change,
+                                                        false,
+                                                        true,
+                                                        res->common.name,
+                                                        program->common.name));
+                  res_program->afters = eina_list_remove(res_program->afters, 
program);
+               }
+          }
+     }
+
    /* item is not used anywhere at all */
    _resource_program_free(group, program);
 }
@@ -564,7 +618,7 @@ _resource_group_del(Project *pro, Group2 *group)
 
    EINA_LIST_FOREACH(group->programs, l, program)
      {
-        _resource_program_del(group, program);
+        _resource_program_del(group, program, NULL);
      }
    EINA_LIST_FOREACH(group->data_items, l, data)
      {
diff --git a/src/bin/resource_manager/resource_manager_private.h 
b/src/bin/resource_manager/resource_manager_private.h
index fc7305d..e30d9ab 100644
--- a/src/bin/resource_manager/resource_manager_private.h
+++ b/src/bin/resource_manager/resource_manager_private.h
@@ -149,7 +149,7 @@ void
 _resource_program_free(Group2 *group, Program2 *program);
 
 void
-_resource_program_del(Group2 *group, Program2 *program);
+_resource_program_del(Group2 *group, Program2 *program, Change *change);
 
 void
 _resource_group_data_free(Group2 *group, Group_Data2 *data);
diff --git a/src/bin/resource_manager/resource_manager_react.c 
b/src/bin/resource_manager/resource_manager_react.c
index ed825ce..28c4784 100644
--- a/src/bin/resource_manager/resource_manager_react.c
+++ b/src/bin/resource_manager/resource_manager_react.c
@@ -90,7 +90,6 @@ _property_attribute_changed(void *data,
     ***********************************************************************
     ***********************************************************************/
    Resource2 *part, *state, *source, *old_source, *item, *program;
-   Eina_Stringshare *tmp_value;
 
    Editor_Attribute_Change *change = (Editor_Attribute_Change *)event_info;
    Attribute editor_resource = (int)change->attribute;
@@ -354,10 +353,7 @@ _property_attribute_changed(void *data,
          break;
       case RM_ATTRIBUTE_PROGRAM_FILTER_STATE:
          program = resource_manager_find(group->programs, 
change->program_name);
-
-         tmp_value = edje_edit_program_filter_part_get(group->edit_object, 
change->program_name);
-         part = resource_manager_find(group->parts, tmp_value);
-         edje_edit_string_free(tmp_value);
+         part = resource_manager_find(group->parts, ((Program2 
*)program)->filter_part);
 
          if (change->old_value)
            {
@@ -378,12 +374,15 @@ _property_attribute_changed(void *data,
            {
               old_source = resource_manager_find(group->parts, 
change->old_value);
               _resource_usage_resource_del(program, old_source);
+              eina_stringshare_del(((Program2 *)program)->filter_part);
+              ((Program2 *)program)->filter_part = NULL;
            }
 
          if (change->value)
            {
               source = resource_manager_find(group->parts, change->value);
               _resource_usage_resource_add(program, source);
+              ((Program2 *)program)->filter_part = 
eina_stringshare_add(change->value);
            }
          break;
       case RM_ATTRIBUTE_STATE_PROXY_SOURCE:
@@ -684,12 +683,13 @@ _editor_program_deleted_cb(void *data,
                            Evas_Object *obj __UNUSED__,
                            void *event_info)
 {
-   Eina_Stringshare *program_name = event_info;
+   const Editor_Program *editor_part = event_info;
    Project *pro = (Project *)data;
    Group2 *group = _get_current_group2(pro);
-   Program2 *program = (Program2 *)resource_manager_find(group->programs, 
program_name);
+   Program2 *program = (Program2 *)resource_manager_find(group->programs,
+                                                         
editor_part->program_name);
 
-   _resource_program_del(group, program);
+   _resource_program_del(group, program, editor_part->change);
 }
 
 static void

-- 


Reply via email to