edje: Edje_Edit - fix support for program's targets
authorAndrii Kroitor <an.kroitor@samsung.com>
Thu, 21 Aug 2014 09:11:35 +0000 (11:11 +0200)
committerCedric BAIL <cedric@osg.samsung.com>
Thu, 21 Aug 2014 10:04:53 +0000 (12:04 +0200)
Summary:
added support of all action types that use targets to
edje_edit_program_target_add and edje_edit_program_target_del

added targets cleaning to edje_edit_program_action_set to avoid usage of program id
as part id and vise versa.

@fix

Reviewers: cedric, seoz, Hermet

Subscribers: cedric, reutskiy.v.v

Differential Revision: https://phab.enlightenment.org/D1342

Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
src/lib/edje/edje_edit.c

index 4a25447..5a3ce44 100644 (file)
@@ -8475,6 +8475,33 @@ edje_edit_program_action_set(Evas_Object *obj, const char *prog, Edje_Action_Typ
           }
      }
 
+   switch (action)
+     {
+      case EDJE_ACTION_TYPE_STATE_SET:
+      case EDJE_ACTION_TYPE_SIGNAL_EMIT:
+      case EDJE_ACTION_TYPE_DRAG_VAL_SET:
+      case EDJE_ACTION_TYPE_DRAG_VAL_STEP:
+      case EDJE_ACTION_TYPE_DRAG_VAL_PAGE:
+      case EDJE_ACTION_TYPE_FOCUS_SET:
+      case EDJE_ACTION_TYPE_FOCUS_OBJECT:
+#ifdef HAVE_EPHYSICS
+      case EDJE_ACTION_TYPE_PHYSICS_FORCES_CLEAR:
+      case EDJE_ACTION_TYPE_PHYSICS_STOP:
+      case EDJE_ACTION_TYPE_PHYSICS_ROT_SET:
+#endif
+         /*This actions have part as a target so targets list can be leaved untouched
+           if it was not list of programs (EDJE_ACTION_TYPE_ACTION_STOP) */
+         if (epr->action == EDJE_ACTION_TYPE_ACTION_STOP)
+           edje_edit_program_targets_clear(obj, prog);
+         break;
+
+      case EDJE_ACTION_TYPE_ACTION_STOP:
+         /*this action needs programs as targets*/
+      default:
+         /*other actions do not need targets so we need to delete them all */
+         edje_edit_program_targets_clear(obj, prog);
+     }
+
    epr->action = action;
    return EINA_TRUE;
 }
@@ -8545,30 +8572,42 @@ edje_edit_program_target_add(Evas_Object *obj, const char *prog, const char *tar
 {
    int id;
    Edje_Program_Target *t;
+   Edje_Program *tar;
+   Edje_Real_Part *rp;
 
    GET_ED_OR_RETURN(EINA_FALSE);
    GET_EPR_OR_RETURN(EINA_FALSE);
 
-   if (epr->action == EDJE_ACTION_TYPE_STATE_SET)
+   switch (epr->action)
      {
-       /* the target is a part */
-       Edje_Real_Part *rp;
+      case EDJE_ACTION_TYPE_STATE_SET:
+      case EDJE_ACTION_TYPE_SIGNAL_EMIT:
+      case EDJE_ACTION_TYPE_DRAG_VAL_SET:
+      case EDJE_ACTION_TYPE_DRAG_VAL_STEP:
+      case EDJE_ACTION_TYPE_DRAG_VAL_PAGE:
+      case EDJE_ACTION_TYPE_FOCUS_SET:
+      case EDJE_ACTION_TYPE_FOCUS_OBJECT:
+#ifdef HAVE_EPHYSICS
+      case EDJE_ACTION_TYPE_PHYSICS_FORCES_CLEAR:
+      case EDJE_ACTION_TYPE_PHYSICS_STOP:
+      case EDJE_ACTION_TYPE_PHYSICS_ROT_SET:
+#endif
+         /* the target is a part */
+         rp = _edje_real_part_get(ed, target);
+         if (!rp) return EINA_FALSE;
+         id = rp->part->id;
+         break;
 
-       rp = _edje_real_part_get(ed, target);
-       if (!rp) return EINA_FALSE;
-       id = rp->part->id;
-     }
-   else if (epr->action == EDJE_ACTION_TYPE_ACTION_STOP)
-     {
-       /* the target is a program */
-       Edje_Program *tar;
+      case EDJE_ACTION_TYPE_ACTION_STOP:
+         /* the target is a program */
+         tar = _edje_program_get_byname(obj, target);
+         if (!tar) return EINA_FALSE;
+         id = tar->id;
+         break;
 
-       tar = _edje_program_get_byname(obj, target);
-       if (!tar) return EINA_FALSE;
-       id = tar->id;
+      default:
+         return EINA_FALSE;
      }
-   else
-     return EINA_FALSE;
 
    t = _alloc(sizeof(Edje_Program_Target));
    if (!t) return EINA_FALSE;
@@ -8584,35 +8623,45 @@ edje_edit_program_target_del(Evas_Object *obj, const char *prog, const char *tar
 {
    int id;
    Eina_List *l;
+   Edje_Real_Part *rp;
+   Edje_Program *tar;
    Edje_Program_Target *t;
 
    GET_ED_OR_RETURN(EINA_FALSE);
    GET_EPR_OR_RETURN(EINA_FALSE);
 
-   if (epr->action == EDJE_ACTION_TYPE_STATE_SET)
-     {
-       /* the target is a part */
-       Edje_Real_Part *rp;
-
-       rp = _edje_real_part_get(ed, target);
-       if (!rp) return EINA_FALSE;
-       id = rp->part->id;
-     }
-   else if (epr->action == EDJE_ACTION_TYPE_ACTION_STOP)
+   switch (epr->action)
      {
-       /* the target is a program */
-       Edje_Program *tar;
+      case EDJE_ACTION_TYPE_STATE_SET:
+      case EDJE_ACTION_TYPE_SIGNAL_EMIT:
+      case EDJE_ACTION_TYPE_DRAG_VAL_SET:
+      case EDJE_ACTION_TYPE_DRAG_VAL_STEP:
+      case EDJE_ACTION_TYPE_DRAG_VAL_PAGE:
+      case EDJE_ACTION_TYPE_FOCUS_SET:
+      case EDJE_ACTION_TYPE_FOCUS_OBJECT:
+#ifdef HAVE_EPHYSICS
+      case EDJE_ACTION_TYPE_PHYSICS_FORCES_CLEAR:
+      case EDJE_ACTION_TYPE_PHYSICS_STOP:
+      case EDJE_ACTION_TYPE_PHYSICS_ROT_SET:
+#endif
+         /* the target is a part */
+         rp = _edje_real_part_get(ed, target);
+         if (!rp) return EINA_FALSE;
+         id = rp->part->id;
+         break;
 
-       tar = _edje_program_get_byname(obj, target);
-       if (!tar) return EINA_FALSE;
-       id = tar->id;
+      case EDJE_ACTION_TYPE_ACTION_STOP:
+         /* the target is a program */
+         tar = _edje_program_get_byname(obj, target);
+         if (!tar) return EINA_FALSE;
+         id = tar->id;
+         break;
+      default:
+         return EINA_FALSE;
      }
-   else
-     return EINA_FALSE;
-
    EINA_LIST_FOREACH(epr->targets, l, t)
       if (t->id == id)
-       break;
+        break;
    epr->targets = eina_list_remove_list(epr->targets, l);
    free(t);