rimmed pushed a commit to branch master.

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

commit 1053f6bd2ca2e0883c62689ea8a4dda19423d33d
Author: Vitalii Vorobiov <vi.vorob...@samsung.com>
Date:   Mon Sep 12 14:39:59 2016 +0300

    resource_manager2: send and use structures to send data from editor to RM
---
 src/bin/editor/editor.h                           |  8 ++
 src/bin/editor/editor_group.c                     | 25 +++---
 src/bin/editor/editor_macro.h                     | 99 ++++++++++++++---------
 src/bin/editor/editor_part.c                      | 71 +++++++++-------
 src/bin/editor/editor_program.c                   | 75 ++++++++++-------
 src/bin/editor/editor_states.c                    | 60 ++++++++------
 src/bin/editor/editor_text.c                      | 10 ++-
 src/bin/editor/editor_top_level.c                 |  1 -
 src/bin/resource_manager/resource_manager_react.c | 10 ++-
 9 files changed, 220 insertions(+), 139 deletions(-)

diff --git a/src/bin/editor/editor.h b/src/bin/editor/editor.h
index 31a13db..ca833cf 100644
--- a/src/bin/editor/editor.h
+++ b/src/bin/editor/editor.h
@@ -229,6 +229,14 @@ typedef enum {
    RM_ATTRIBUTE_RESOURCES_LAST
 } RM_Attribute_Resources;
 
+typedef struct {
+   RM_Attribute attribute;
+   Eina_Stringshare *group_name;
+   Eina_Stringshare *part_name;
+   Eina_Stringshare *item_name;
+   Eina_Stringshare *value;
+} Editor_Attribute_Change;
+
 
 void
 _editor_project_changed();
diff --git a/src/bin/editor/editor_group.c b/src/bin/editor/editor_group.c
index 358cd7d..d14e4cf 100644
--- a/src/bin/editor/editor_group.c
+++ b/src/bin/editor/editor_group.c
@@ -126,7 +126,8 @@ editor_group_max_## VAL ##_set(Evas_Object *obj, Change 
*change, Eina_Bool merge
    int old_value; \
    int min_value; \
    Diff *diff; \
-   RM_Attribute attribute = RM_ATTRIBUTE_GROUP_MAX_##VAL_CAPS; \
+   Editor_Attribute_Change send; \
+   send.attribute = RM_ATTRIBUTE_GROUP_MAX_##VAL_CAPS; \
  \
    assert(obj != NULL); \
    assert(new_value >= 0); \
@@ -155,7 +156,7 @@ editor_group_max_## VAL ##_set(Evas_Object *obj, Change 
*change, Eina_Bool merge
      { \
         CRIT_ON_FAIL(edje_edit_group_max_## VAL ##_set(obj, new_value)); \
         _editor_project_changed(); \
-        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute); \
+        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send); \
      } \
    return true; \
 }
@@ -171,7 +172,8 @@ editor_group_min_## VAL ##_set(Evas_Object *obj, Change 
*change, Eina_Bool merge
    int old_value; \
    int max_value; \
    Diff *diff; \
-   RM_Attribute attribute = RM_ATTRIBUTE_GROUP_MIN_##VAL_CAPS; \
+   Editor_Attribute_Change send; \
+   send.attribute = RM_ATTRIBUTE_GROUP_MIN_##VAL_CAPS; \
  \
    assert(obj != NULL); \
    assert(new_value >= 0); \
@@ -200,7 +202,7 @@ editor_group_min_## VAL ##_set(Evas_Object *obj, Change 
*change, Eina_Bool merge
      { \
         CRIT_ON_FAIL(edje_edit_group_min_## VAL ##_set(obj, new_value)); \
         _editor_project_changed(); \
-        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute); \
+        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send); \
      } \
    return true; \
 }
@@ -213,7 +215,8 @@ editor_group_name_set(Evas_Object *edit_object, Change 
*change, Eina_Bool merge,
                       const char *new_val)
 {
    Diff *diff;
-   RM_Attribute attribute = RM_ATTRIBUTE_GROUP_NAME;
+   Editor_Attribute_Change send;
+   send.attribute = RM_ATTRIBUTE_GROUP_NAME;
    assert(edit_object != NULL);
    assert(new_val != NULL);
    if (change)
@@ -236,7 +239,7 @@ editor_group_name_set(Evas_Object *edit_object, Change 
*change, Eina_Bool merge,
      {
         CRIT_ON_FAIL(edje_edit_group_name_set(edit_object, new_val));
         _editor_project_changed();
-        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute);
+        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send);
      }
    return true;
 }
@@ -246,7 +249,8 @@ editor_group_data_value_set(Evas_Object *edit_object, 
Change *change, Eina_Bool
                             const char *item_name, const char *new_val)
 {
    Diff *diff;
-   RM_Attribute attribute = RM_ATTRIBUTE_GROUP_DATA_VALUE;
+   Editor_Attribute_Change send;
+   send.attribute = RM_ATTRIBUTE_GROUP_DATA_VALUE;
    assert(edit_object != NULL);
    assert(item_name != NULL);
    assert(new_val != NULL);
@@ -271,7 +275,7 @@ editor_group_data_value_set(Evas_Object *edit_object, 
Change *change, Eina_Bool
      {
         CRIT_ON_FAIL(edje_edit_group_data_value_set(edit_object, item_name, 
new_val));
         _editor_project_changed();
-        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute);
+        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send);
      }
    return true;
 }
@@ -282,7 +286,8 @@ editor_group_data_name_set(Evas_Object *edit_object, Change 
*change, Eina_Bool m
 {
    Diff *diff;
    Rename ren;
-   RM_Attribute attribute = RM_ATTRIBUTE_GROUP_DATA_NAME;
+   Editor_Attribute_Change send;
+   send.attribute = RM_ATTRIBUTE_GROUP_DATA_NAME;
    assert(edit_object != NULL);
    assert(item_name != NULL);
    assert(new_val != NULL);
@@ -309,7 +314,7 @@ editor_group_data_name_set(Evas_Object *edit_object, Change 
*change, Eina_Bool m
         ren.old_name = item_name;
         ren.new_name = new_val;
         if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_GROUP_DATA_RENAMED, &ren);
-        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute);
+        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send);
      }
    return true;
 }
diff --git a/src/bin/editor/editor_macro.h b/src/bin/editor/editor_macro.h
index 98afcba..fb86222 100644
--- a/src/bin/editor/editor_macro.h
+++ b/src/bin/editor/editor_macro.h
@@ -23,7 +23,8 @@ editor_state_## FUNC ##_set(Evas_Object *edit_object, Change 
*change, Eina_Bool
                             const char *part_name, const char *state_name, 
double state_val, double new_val) \
 { \
    Diff *diff; \
-   RM_Attribute attribute = RM_ATTRIBUTE; \
+   Editor_Attribute_Change send; \
+   send.attribute = RM_ATTRIBUTE; \
    assert(edit_object != NULL); \
    assert(part_name != NULL); \
    assert(state_name != NULL); \
@@ -53,7 +54,7 @@ editor_state_## FUNC ##_set(Evas_Object *edit_object, Change 
*change, Eina_Bool
        CRIT_ON_FAIL(edje_edit_state_## FUNC ##_set(edit_object, part_name, 
state_name, state_val, new_val)); \
        _editor_project_changed(); \
         CRIT_ON_FAIL(editor_save(edit_object)); \
-       if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute); \
+       if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send); \
      } \
    return true; \
 }
@@ -64,7 +65,8 @@ editor_state_## FUNC ##_set(Evas_Object *edit_object, Change 
*change, Eina_Bool
                             const char *part_name, const char *state_name, 
double state_val, Eina_Bool new_val) \
 { \
    Diff *diff; \
-   RM_Attribute attribute = RM_ATTRIBUTE; \
+   Editor_Attribute_Change send; \
+   send.attribute = RM_ATTRIBUTE; \
    assert(edit_object != NULL); \
    assert(part_name != NULL); \
    assert(state_name != NULL); \
@@ -94,7 +96,7 @@ editor_state_## FUNC ##_set(Evas_Object *edit_object, Change 
*change, Eina_Bool
        CRIT_ON_FAIL(edje_edit_state_## FUNC ##_set(edit_object, part_name, 
state_name, state_val, new_val)); \
        _editor_project_changed(); \
        CRIT_ON_FAIL(editor_save(edit_object)); \
-       if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute); \
+       if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send); \
      } \
    return true; \
 }
@@ -105,7 +107,8 @@ editor_state_## FUNC ##_set(Evas_Object *edit_object, 
Change *change, Eina_Bool
                             const char *part_name, const char *state_name, 
double state_val, const char *new_val) \
 { \
    Diff *diff; \
-   RM_Attribute attribute = RM_ATTRIBUTE; \
+   Editor_Attribute_Change send; \
+   send.attribute = RM_ATTRIBUTE; \
    assert(edit_object != NULL); \
    assert(part_name != NULL); \
    assert(state_name != NULL); \
@@ -135,7 +138,7 @@ editor_state_## FUNC ##_set(Evas_Object *edit_object, 
Change *change, Eina_Bool
        CRIT_ON_FAIL(edje_edit_state_## FUNC ##_set(edit_object, part_name, 
state_name, state_val, new_val)); \
        if (SAVE) CRIT_ON_FAIL(editor_save(edit_object)); \
        _editor_project_changed(); \
-       if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute); \
+       if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send); \
      } \
    return true; \
 }
@@ -146,7 +149,8 @@ editor_state_## FUNC ##_set(Evas_Object *edit_object, 
Change *change, Eina_Bool
                             const char *part_name, const char *state_name, 
double state_val, const char *new_val) \
 { \
    Diff *diff; \
-   RM_Attribute attribute = RM_ATTRIBUTE; \
+   Editor_Attribute_Change send; \
+   send.attribute = RM_ATTRIBUTE; \
    assert(edit_object != NULL); \
    assert(part_name != NULL); \
    assert(state_name != NULL); \
@@ -177,7 +181,7 @@ editor_state_## FUNC ##_set(Evas_Object *edit_object, 
Change *change, Eina_Bool
       if (SAVE) CRIT_ON_FAIL(editor_save(edit_object)); \
       _editor_project_changed(); \
       if (!new_val) editor_state_## RESET ##_reset(edit_object, change, apply, 
part_name, state_name, state_val); \
-      if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute); \
+      if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send); \
    } \
    return true; \
 }
@@ -188,7 +192,8 @@ editor_state_## FUNC ##_set(Evas_Object *edit_object, 
Change *change, Eina_Bool
                             const char *part_name, const char *state_name, 
double state_val, const char *new_val) \
 { \
    Diff *diff = NULL; \
-   RM_Attribute attribute = RM_ATTRIBUTE; \
+   Editor_Attribute_Change send; \
+   send.attribute = RM_ATTRIBUTE; \
    assert(edit_object != NULL); \
    assert(part_name != NULL); \
    assert(state_name != NULL); \
@@ -230,7 +235,7 @@ editor_state_## FUNC ##_set(Evas_Object *edit_object, 
Change *change, Eina_Bool
          } \
        if (SAVE) CRIT_ON_FAIL(editor_save(edit_object)); \
        _editor_project_changed(); \
-       if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute); \
+       if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send); \
      } \
    else \
      { \
@@ -253,7 +258,8 @@ editor_state_## FUNC ##_set(Evas_Object *edit_object, 
Change *change, Eina_Bool
 { \
    Diff *diff; \
    int o4, o5, o6, o7; \
-   RM_Attribute attribute = RM_ATTRIBUTE; \
+   Editor_Attribute_Change send; \
+   send.attribute = RM_ATTRIBUTE; \
    assert(edit_object != NULL); \
    assert(part_name != NULL); \
    assert(state_name != NULL); \
@@ -288,7 +294,7 @@ editor_state_## FUNC ##_set(Evas_Object *edit_object, 
Change *change, Eina_Bool
      { \
        CRIT_ON_FAIL(edje_edit_state_## REAL_FUNC ##_set(edit_object, 
part_name, state_name, state_val, n4, n5, n6, n7)); \
        _editor_project_changed(); \
-       if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute); \
+       if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send); \
      } \
    return true; \
 }
@@ -300,7 +306,8 @@ editor_state_## FUNC ##_## NUMBER ##_set(Evas_Object 
*edit_object, Change *chang
 { \
    Diff *diff; \
    int o4, o5, o6, o7; \
-   RM_Attribute attribute = RM_ATTRIBUTE ##_## NUMBER; \
+   Editor_Attribute_Change send; \
+   send.attribute = RM_ATTRIBUTE ##_## NUMBER; \
    assert(edit_object != NULL); \
    assert(part_name != NULL); \
    assert(state_name != NULL); \
@@ -336,7 +343,7 @@ editor_state_## FUNC ##_## NUMBER ##_set(Evas_Object 
*edit_object, Change *chang
         CRIT_ON_FAIL(edje_edit_state_## REAL_FUNC ##_set(edit_object, 
part_name, state_name, state_val, NUMBER - 1, n4, n5, n6, n7)); \
         _editor_project_changed(); \
         CRIT_ON_FAIL(editor_save(edit_object)); \
-        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute); \
+        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send); \
      } \
    return true; \
 }
@@ -347,7 +354,8 @@ editor_state_## FUNC ##_set(Evas_Object *edit_object, 
Change *change, Eina_Bool
                             const char *part_name, const char *state_name, 
double state_val, unsigned char new_val) \
 { \
    Diff *diff; \
-   RM_Attribute attribute = RM_ATTRIBUTE; \
+   Editor_Attribute_Change send; \
+   send.attribute = RM_ATTRIBUTE; \
    assert(edit_object != NULL); \
    assert(part_name != NULL); \
    assert(state_name != NULL); \
@@ -377,7 +385,7 @@ editor_state_## FUNC ##_set(Evas_Object *edit_object, 
Change *change, Eina_Bool
        CRIT_ON_FAIL(edje_edit_state_## FUNC ##_set(edit_object, part_name, 
state_name, state_val, new_val)); \
        if (SAVE) CRIT_ON_FAIL(editor_save(edit_object)); \
        _editor_project_changed(); \
-       if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute); \
+       if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send); \
      } \
    return true; \
 }
@@ -388,7 +396,8 @@ editor_part_## FUNC ##_set(Evas_Object *edit_object, Change 
*change, Eina_Bool m
                            const char *part_name, Eina_Bool new_val) \
 { \
    Diff *diff; \
-   RM_Attribute attribute = RM_ATTRIBUTE; \
+   Editor_Attribute_Change send; \
+   send.attribute = RM_ATTRIBUTE; \
    assert(edit_object != NULL); \
    assert(part_name != NULL); \
    if (change) \
@@ -412,7 +421,7 @@ editor_part_## FUNC ##_set(Evas_Object *edit_object, Change 
*change, Eina_Bool m
      { \
        CRIT_ON_FAIL(edje_edit_part_## FUNC ##_set(edit_object, part_name, 
new_val)); \
        _editor_project_changed(); \
-       if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute); \
+       if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send); \
      } \
    return true; \
 }
@@ -423,7 +432,8 @@ editor_part_## FUNC ##_set(Evas_Object *edit_object, Change 
*change, Eina_Bool m
                            const char *part_name, int new_val) \
 { \
    Diff *diff; \
-   RM_Attribute attribute = RM_ATTRIBUTE; \
+   Editor_Attribute_Change send; \
+   send.attribute = RM_ATTRIBUTE; \
    assert(edit_object != NULL); \
    assert(part_name != NULL); \
    if (change) \
@@ -447,7 +457,7 @@ editor_part_## FUNC ##_set(Evas_Object *edit_object, Change 
*change, Eina_Bool m
      { \
        CRIT_ON_FAIL(edje_edit_part_## FUNC ##_set(edit_object, part_name, 
new_val)); \
        _editor_project_changed(); \
-       if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute); \
+       if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send); \
      } \
    return true; \
 }
@@ -458,7 +468,10 @@ editor_## FUNC ##_set(Evas_Object *edit_object, Change 
*change, Eina_Bool merge,
                       const char *name, const char *new_val) \
 { \
    Diff *diff; \
-   RM_Attribute attribute = RM_ATTRIBUTE; \
+   Editor_Attribute_Change send; \
+   send.attribute = RM_ATTRIBUTE; \
+   send.part_name = eina_stringshare_add(name); \
+   send.value = eina_stringshare_add(new_val); \
    assert(edit_object != NULL); \
    assert(name != NULL); \
    if (change) \
@@ -482,8 +495,10 @@ editor_## FUNC ##_set(Evas_Object *edit_object, Change 
*change, Eina_Bool merge,
      { \
        CRIT_ON_FAIL(edje_edit_## REAL_FUNC ##_set(edit_object, name, 
new_val)); \
        _editor_project_changed(); \
-       if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute); \
+       if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send); \
      } \
+   eina_stringshare_del(send.part_name); \
+   eina_stringshare_del(send.value); \
    return true; \
 }
 
@@ -493,7 +508,8 @@ editor_part_item_## FUNC ##_set(Evas_Object *edit_object, 
Change *change, Eina_B
                                 const char *part_name, const char *item_name, 
double new_val) \
 { \
    Diff *diff; \
-   RM_Attribute attribute = RM_ATTRIBUTE; \
+   Editor_Attribute_Change send; \
+   send.attribute = RM_ATTRIBUTE; \
    assert(edit_object != NULL); \
    assert(part_name != NULL); \
    assert(item_name != NULL); \
@@ -521,7 +537,7 @@ editor_part_item_## FUNC ##_set(Evas_Object *edit_object, 
Change *change, Eina_B
        CRIT_ON_FAIL(edje_edit_part_item_## FUNC ##_set(edit_object, part_name, 
item_name, new_val)); \
        CRIT_ON_FAIL(editor_save(edit_object)); \
        _editor_project_changed(); \
-       if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute); \
+       if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send); \
      } \
    return true; \
 }
@@ -532,7 +548,8 @@ editor_part_item_## FUNC ##_set(Evas_Object *edit_object, 
Change *change, Eina_B
                                 const char *part_name, const char *item_name, 
int new_val) \
 { \
    Diff *diff; \
-   RM_Attribute attribute = RM_ATTRIBUTE; \
+   Editor_Attribute_Change send; \
+   send.attribute = RM_ATTRIBUTE; \
    assert(edit_object != NULL); \
    assert(part_name != NULL); \
    assert(item_name != NULL); \
@@ -561,7 +578,7 @@ editor_part_item_## FUNC ##_set(Evas_Object *edit_object, 
Change *change, Eina_B
        if (SAVE) CRIT_ON_FAIL(editor_save(edit_object)); \
        _editor_project_changed(); \
      } \
-   if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute); \
+   if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send); \
    return true; \
 }
 
@@ -571,7 +588,8 @@ editor_part_item_## FUNC ##_set(Evas_Object *edit_object, 
Change *change, Eina_B
                                 const char *part_name, const char *item_name, 
unsigned short new_val) \
 { \
    Diff *diff; \
-   RM_Attribute attribute = RM_ATTRIBUTE; \
+   Editor_Attribute_Change send; \
+   send.attribute = RM_ATTRIBUTE; \
    assert(edit_object != NULL); \
    assert(part_name != NULL); \
    assert(item_name != NULL); \
@@ -599,7 +617,7 @@ editor_part_item_## FUNC ##_set(Evas_Object *edit_object, 
Change *change, Eina_B
        CRIT_ON_FAIL(edje_edit_part_item_## FUNC ##_set(edit_object, part_name, 
item_name, new_val)); \
        if (SAVE) CRIT_ON_FAIL(editor_save(edit_object)); \
        _editor_project_changed(); \
-       if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute); \
+       if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send); \
      } \
    return true; \
 }
@@ -610,7 +628,8 @@ editor_state_## FUNC ##_set(Evas_Object *edit_object, 
Change *change, Eina_Bool
                             const char *part_name, const char *state_name, 
double state_val, int new_val) \
 { \
    Diff *diff; \
-   RM_Attribute attribute = RM_ATTRIBUTE; \
+   Editor_Attribute_Change send; \
+   send.attribute = RM_ATTRIBUTE; \
    assert(edit_object != NULL); \
    assert(part_name != NULL); \
    assert(state_name != NULL); \
@@ -639,7 +658,7 @@ editor_state_## FUNC ##_set(Evas_Object *edit_object, 
Change *change, Eina_Bool
      { \
        CRIT_ON_FAIL(edje_edit_state_## FUNC ##_set(edit_object, part_name, 
state_name, state_val, new_val)); \
        _editor_project_changed(); \
-       if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute); \
+       if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send); \
      } \
    return true; \
 }
@@ -651,7 +670,8 @@ editor_state_## FUNC ##_set(Evas_Object *edit_object, 
Change *change, Eina_Bool
                             const char *part_name, const char *state_name, 
double state_val, int new_val) \
 { \
    Diff *diff; \
-   RM_Attribute attribute = RM_ATTRIBUTE; \
+   Editor_Attribute_Change send; \
+   send.attribute = RM_ATTRIBUTE; \
    assert(edit_object != NULL); \
    assert(part_name != NULL); \
    assert(state_name != NULL); \
@@ -681,7 +701,7 @@ editor_state_## FUNC ##_set(Evas_Object *edit_object, 
Change *change, Eina_Bool
        CRIT_ON_FAIL(edje_edit_state_## FUNC ##_set(edit_object, part_name, 
state_name, state_val, new_val)); \
        CRIT_ON_FAIL(editor_save(edit_object)); \
        _editor_project_changed(); \
-       if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute); \
+       if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send); \
      } \
    return true; \
 }
@@ -692,7 +712,8 @@ editor_state_## FUNC ##_set(Evas_Object *edit_object, 
Change *change, Eina_Bool
                             const char *part_name, const char *state_name, 
double state_val, double new_val) \
 { \
    Diff *diff; \
-   RM_Attribute attribute = RM_ATTRIBUTE; \
+   Editor_Attribute_Change send; \
+   send.attribute = RM_ATTRIBUTE; \
    assert(edit_object != NULL); \
    assert(part_name != NULL); \
    assert(state_name != NULL); \
@@ -722,7 +743,7 @@ editor_state_## FUNC ##_set(Evas_Object *edit_object, 
Change *change, Eina_Bool
        CRIT_ON_FAIL(edje_edit_state_## FUNC ##_set(edit_object, part_name, 
state_name, state_val, new_val)); \
        CRIT_ON_FAIL(editor_save(edit_object)); \
        _editor_project_changed(); \
-       if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute); \
+       if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send); \
      } \
    return true; \
 }
@@ -733,7 +754,8 @@ editor_program_## FUNC ##_set(Evas_Object *edit_object, 
Change *change, Eina_Boo
                            const char *program, double new_val) \
 { \
    Diff *diff; \
-   RM_Attribute attribute = RM_ATTRIBUTE; \
+   Editor_Attribute_Change send; \
+   send.attribute = RM_ATTRIBUTE; \
    assert(edit_object != NULL); \
    assert(program != NULL); \
    if (change) \
@@ -757,7 +779,7 @@ editor_program_## FUNC ##_set(Evas_Object *edit_object, 
Change *change, Eina_Boo
      { \
        CRIT_ON_FAIL(edje_edit_program_## REAL_FUNC ##_set(edit_object, 
program, new_val)); \
        _editor_project_changed(); \
-       if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute); \
+       if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send); \
      } \
    return true; \
 }
@@ -768,7 +790,8 @@ editor_program_## FUNC ##_set(Evas_Object *edit_object, 
Change *change, Eina_Boo
                            const char *program, const char *new_val) \
 { \
    Diff *diff; \
-   RM_Attribute attribute = RM_ATTRIBUTE; \
+   Editor_Attribute_Change send; \
+   send.attribute = RM_ATTRIBUTE; \
    assert(edit_object != NULL); \
    assert(program != NULL); \
    if (change) \
@@ -792,7 +815,7 @@ editor_program_## FUNC ##_set(Evas_Object *edit_object, 
Change *change, Eina_Boo
      { \
        CRIT_ON_FAIL(edje_edit_program_## REAL_FUNC ##_set(edit_object, 
program, new_val)); \
        _editor_project_changed(); \
-       if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute); \
+       if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send); \
        evas_object_smart_callback_call(ap.win, SIGNAL_EDITOR_PROGRAM_UPDATE, 
(void *)program); \
      } \
    return true; \
diff --git a/src/bin/editor/editor_part.c b/src/bin/editor/editor_part.c
index 50539ae..5391407 100644
--- a/src/bin/editor/editor_part.c
+++ b/src/bin/editor/editor_part.c
@@ -29,7 +29,8 @@ editor_part_text_effect_set(Evas_Object *edit_object, Change 
*change, Eina_Bool
                             const char *part_name, Edje_Text_Effect new_val)
 {
    Diff *diff;
-   RM_Attribute attribute = RM_ATTRIBUTE_PART_TEXT_EFFECT;
+   Editor_Attribute_Change send;
+   send.attribute = RM_ATTRIBUTE_PART_TEXT_EFFECT;
    assert(edit_object != NULL);
    assert(part_name != NULL);
    assert(new_val < EDJE_TEXT_EFFECT_LAST);
@@ -55,7 +56,7 @@ editor_part_text_effect_set(Evas_Object *edit_object, Change 
*change, Eina_Bool
      {
         CRIT_ON_FAIL(edje_edit_part_effect_set(edit_object, part_name, 
(new_val | edje_edit_part_text_shadow_direction_get(edit_object, part_name))));
         _editor_project_changed();
-        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute);
+        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send);
      }
    return true;
 }
@@ -65,7 +66,8 @@ editor_part_text_shadow_direction_set(Evas_Object 
*edit_object, Change *change,
                                       const char *part_name, Edje_Text_Effect 
new_val)
 {
    Diff *diff;
-   RM_Attribute attribute = RM_ATTRIBUTE_PART_TEXT_SHADOW_DIRECTION;
+   Editor_Attribute_Change send;
+   send.attribute = RM_ATTRIBUTE_PART_TEXT_SHADOW_DIRECTION;
    assert(edit_object != NULL);
    assert(part_name != NULL);
    assert((new_val & EDJE_TEXT_EFFECT_MASK_BASIC) == 0);
@@ -91,7 +93,7 @@ editor_part_text_shadow_direction_set(Evas_Object 
*edit_object, Change *change,
      {
         CRIT_ON_FAIL(edje_edit_part_effect_set(edit_object, part_name, 
(new_val | edje_edit_part_text_effect_get(edit_object, part_name))));
         _editor_project_changed();
-        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute);
+        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send);
      }
    return true;
 }
@@ -101,7 +103,8 @@ editor_part_ignore_flags_set(Evas_Object *edit_object, 
Change *change, Eina_Bool
                              const char *part_name, Evas_Event_Flags new_val)
 {
    Diff *diff;
-   RM_Attribute attribute = RM_ATTRIBUTE_PART_IGNORE_FLAGS;
+   Editor_Attribute_Change send;
+   send.attribute = RM_ATTRIBUTE_PART_IGNORE_FLAGS;
    assert(edit_object != NULL);
    assert(part_name != NULL);
    if (change)
@@ -125,7 +128,7 @@ editor_part_ignore_flags_set(Evas_Object *edit_object, 
Change *change, Eina_Bool
      {
         CRIT_ON_FAIL(edje_edit_part_ignore_flags_set(edit_object, part_name, 
new_val));
         _editor_project_changed();
-        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute);
+        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send);
      }
    return true;
 }
@@ -160,7 +163,8 @@ editor_part_name_set(Evas_Object *edit_object, Change 
*change, Eina_Bool merge,
 {
    Diff *diff;
    Rename ren;
-   RM_Attribute attribute = RM_ATTRIBUTE_PART_NAME;
+   Editor_Attribute_Change send;
+   send.attribute = RM_ATTRIBUTE_PART_NAME;
    assert(edit_object != NULL);
    assert(name != NULL);
    assert(new_val != NULL);
@@ -186,8 +190,9 @@ editor_part_name_set(Evas_Object *edit_object, Change 
*change, Eina_Bool merge,
         _editor_project_changed();
         ren.old_name = name;
         ren.new_name = new_val;
+        TODO("Maybe think about merging those two signals? I dunno")
         if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_PART_RENAMED, &ren);
-        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute);
+        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send);
      }
    return true;
 }
@@ -197,7 +202,8 @@ editor_part_item_aspect_mode_set(Evas_Object *edit_object, 
Change *change, Eina_
                                  const char *part_name, const char *item_name, 
Edje_Aspect_Control new_val)
 {
    Diff *diff;
-   RM_Attribute attribute = RM_ATTRIBUTE_PART_ITEM_ASPECT_MODE;
+   Editor_Attribute_Change send;
+   send.attribute = RM_ATTRIBUTE_PART_ITEM_ASPECT_MODE;
    assert(edit_object != NULL);
    assert(part_name != NULL);
    assert(item_name != NULL);
@@ -225,7 +231,7 @@ editor_part_item_aspect_mode_set(Evas_Object *edit_object, 
Change *change, Eina_
         CRIT_ON_FAIL(edje_edit_part_item_aspect_mode_set(edit_object, 
part_name, item_name, new_val));
         CRIT_ON_FAIL(editor_save(edit_object));
         _editor_project_changed();
-        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute);
+        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send);
      }
    return true;
 }
@@ -256,7 +262,8 @@ editor_part_item_source_set(Evas_Object *edit_object, 
Change *change, Eina_Bool
                             const char *part_name, const char *item_name, 
const char *new_val)
 {
    Diff *diff;
-   RM_Attribute attribute = RM_ATTRIBUTE_PART_ITEM_SOURCE;
+   Editor_Attribute_Change send;
+   send.attribute = RM_ATTRIBUTE_PART_ITEM_SOURCE;
    assert(edit_object != NULL);
    assert(part_name != NULL);
    assert(item_name != NULL);
@@ -285,7 +292,7 @@ editor_part_item_source_set(Evas_Object *edit_object, 
Change *change, Eina_Bool
         CRIT_ON_FAIL(editor_save(edit_object));
         _editor_project_changed();
         CRIT_ON_FAIL(editor_save(edit_object));
-        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute);
+        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send);
      }
    return true;
 }
@@ -298,7 +305,8 @@ editor_part_item_padding_left_set(Evas_Object *edit_object, 
Change *change, Eina
 {
    Diff *diff;
    int o3, o4, o5, o6;
-   RM_Attribute attribute = RM_ATTRIBUTE_PART_ITEM_PADDING_LEFT;
+   Editor_Attribute_Change send;
+   send.attribute = RM_ATTRIBUTE_PART_ITEM_PADDING_LEFT;
    assert(edit_object != NULL);
    assert(part_name != NULL);
    assert(item_name != NULL);
@@ -326,7 +334,7 @@ editor_part_item_padding_left_set(Evas_Object *edit_object, 
Change *change, Eina
         CRIT_ON_FAIL(edje_edit_part_item_padding_set(edit_object, part_name, 
item_name, n3, o4, o5, o6));
         CRIT_ON_FAIL(editor_save(edit_object));
         _editor_project_changed();
-        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute);
+        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send);
      }
    return true;
 }
@@ -337,7 +345,8 @@ editor_part_item_padding_right_set(Evas_Object 
*edit_object, Change *change, Ein
 {
    Diff *diff;
    int o3, o4, o5, o6;
-   RM_Attribute attribute = RM_ATTRIBUTE_PART_ITEM_PADDING_RIGHT;
+   Editor_Attribute_Change send;
+   send.attribute = RM_ATTRIBUTE_PART_ITEM_PADDING_RIGHT;
    assert(edit_object != NULL);
    assert(part_name != NULL);
    assert(item_name != NULL);
@@ -365,7 +374,7 @@ editor_part_item_padding_right_set(Evas_Object 
*edit_object, Change *change, Ein
         CRIT_ON_FAIL(edje_edit_part_item_padding_set(edit_object, part_name, 
item_name, o3, n4, o5, o6));
         CRIT_ON_FAIL(editor_save(edit_object));
         _editor_project_changed();
-        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute);
+        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send);
      }
    return true;
 }
@@ -376,7 +385,8 @@ editor_part_item_padding_top_set(Evas_Object *edit_object, 
Change *change, Eina_
 {
    Diff *diff;
    int o3, o4, o5, o6;
-   RM_Attribute attribute = RM_ATTRIBUTE_PART_ITEM_PADDING_TOP;
+   Editor_Attribute_Change send;
+   send.attribute = RM_ATTRIBUTE_PART_ITEM_PADDING_TOP;
    assert(edit_object != NULL);
    assert(part_name != NULL);
    assert(item_name != NULL);
@@ -404,7 +414,7 @@ editor_part_item_padding_top_set(Evas_Object *edit_object, 
Change *change, Eina_
         CRIT_ON_FAIL(edje_edit_part_item_padding_set(edit_object, part_name, 
item_name, o3, o4, n5, o6));
         CRIT_ON_FAIL(editor_save(edit_object));
         _editor_project_changed();
-        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute);
+        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send);
      }
    return true;
 }
@@ -415,7 +425,8 @@ editor_part_item_padding_bottom_set(Evas_Object 
*edit_object, Change *change, Ei
 {
    Diff *diff;
    int o3, o4, o5, o6;
-   RM_Attribute attribute = RM_ATTRIBUTE_PART_ITEM_PADDING_BOTTOM;
+   Editor_Attribute_Change send;
+   send.attribute = RM_ATTRIBUTE_PART_ITEM_PADDING_BOTTOM;
    assert(edit_object != NULL);
    assert(part_name != NULL);
    assert(item_name != NULL);
@@ -443,7 +454,7 @@ editor_part_item_padding_bottom_set(Evas_Object 
*edit_object, Change *change, Ei
         CRIT_ON_FAIL(edje_edit_part_item_padding_set(edit_object, part_name, 
item_name, o3, o4, o5, n6));
         CRIT_ON_FAIL(editor_save(edit_object));
         _editor_project_changed();
-        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute);
+        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send);
      }
    return true;
 }
@@ -455,7 +466,8 @@ editor_part_select_mode_set(Evas_Object *edit_object, 
Change *change, Eina_Bool
                             const char *part_name, Edje_Edit_Select_Mode 
new_val)
 {
    Diff *diff;
-   RM_Attribute attribute = RM_ATTRIBUTE_PART_SELECT_MODE;
+   Editor_Attribute_Change send;
+   send.attribute = RM_ATTRIBUTE_PART_SELECT_MODE;
    assert(edit_object != NULL);
    assert(part_name != NULL);
    if (change)
@@ -479,7 +491,7 @@ editor_part_select_mode_set(Evas_Object *edit_object, 
Change *change, Eina_Bool
      {
         CRIT_ON_FAIL(edje_edit_part_select_mode_set(edit_object, part_name, 
new_val));
         _editor_project_changed();
-        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute);
+        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send);
      }
    return true;
 }
@@ -489,7 +501,8 @@ editor_part_entry_mode_set(Evas_Object *edit_object, Change 
*change, Eina_Bool m
                            const char *part_name, Edje_Edit_Entry_Mode new_val)
 {
    Diff *diff;
-   RM_Attribute attribute = RM_ATTRIBUTE_PART_ENTRY_MODE;
+   Editor_Attribute_Change send;
+   send.attribute = RM_ATTRIBUTE_PART_ENTRY_MODE;
    assert(edit_object != NULL);
    assert(part_name != NULL);
    if (change)
@@ -513,7 +526,7 @@ editor_part_entry_mode_set(Evas_Object *edit_object, Change 
*change, Eina_Bool m
      {
         CRIT_ON_FAIL(edje_edit_part_entry_mode_set(edit_object, part_name, 
new_val));
         _editor_project_changed();
-        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute);
+        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send);
      }
    return true;
 }
@@ -523,7 +536,8 @@ editor_part_pointer_mode_set(Evas_Object *edit_object, 
Change *change, Eina_Bool
                            const char *part_name, Evas_Object_Pointer_Mode 
new_val)
 {
    Diff *diff;
-   RM_Attribute attribute = RM_ATTRIBUTE_PART_POINTER_MODE;
+   Editor_Attribute_Change send;
+   send.attribute = RM_ATTRIBUTE_PART_POINTER_MODE;
    assert(edit_object != NULL);
    assert(part_name != NULL);
    if (change)
@@ -547,7 +561,7 @@ editor_part_pointer_mode_set(Evas_Object *edit_object, 
Change *change, Eina_Bool
      {
         CRIT_ON_FAIL(edje_edit_part_pointer_mode_set(edit_object, part_name, 
new_val));
         _editor_project_changed();
-        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute);
+        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send);
      }
    return true;
 }
@@ -557,7 +571,8 @@ editor_part_cursor_mode_set(Evas_Object *edit_object, 
Change *change, Eina_Bool
                             const char *part_name, unsigned char new_val)
 {
    Diff *diff;
-   RM_Attribute attribute = RM_ATTRIBUTE_PART_CURSOR_MODE;
+   Editor_Attribute_Change send;
+   send.attribute = RM_ATTRIBUTE_PART_CURSOR_MODE;
    assert(edit_object != NULL);
    assert(part_name != NULL);
    if (change)
@@ -581,7 +596,7 @@ editor_part_cursor_mode_set(Evas_Object *edit_object, 
Change *change, Eina_Bool
      {
         CRIT_ON_FAIL(edje_edit_part_cursor_mode_set(edit_object, part_name, 
new_val));
         _editor_project_changed();
-        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute);
+        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send);
      }
    return true;
 }
diff --git a/src/bin/editor/editor_program.c b/src/bin/editor/editor_program.c
index 9e9307e..03bc9d7 100644
--- a/src/bin/editor/editor_program.c
+++ b/src/bin/editor/editor_program.c
@@ -51,7 +51,8 @@ editor_program_transition_type_set(Evas_Object *edit_object, 
Change *change, Ein
                                    const char *program, Edje_Tween_Mode 
new_val)
 {
    Diff *diff;
-   RM_Attribute attribute = RM_ATTRIBUTE_PROGRAM_TRANSITION_TYPE;
+   Editor_Attribute_Change send;
+   send.attribute = RM_ATTRIBUTE_PROGRAM_TRANSITION_TYPE;
 
    assert(edit_object != NULL);
    assert(program != NULL);
@@ -80,7 +81,7 @@ editor_program_transition_type_set(Evas_Object *edit_object, 
Change *change, Ein
           new_val = new_val | EDJE_TWEEN_MODE_OPT_FROM_CURRENT;
         CRIT_ON_FAIL(edje_edit_program_transition_set(edit_object, program, 
new_val));
         _editor_project_changed();
-        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute);
+        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send);
      }
    return true;
 }
@@ -91,7 +92,8 @@ editor_program_transition_from_current_set(Evas_Object 
*edit_object, Change *cha
 {
    Diff *diff;
    Edje_Tween_Mode mode;
-   RM_Attribute attribute = RM_ATTRIBUTE_PROGRAM_TRANSITION_FROM_CURRENT;
+   Editor_Attribute_Change send;
+   send.attribute = RM_ATTRIBUTE_PROGRAM_TRANSITION_FROM_CURRENT;
 
    assert(edit_object != NULL);
    assert(program != NULL);
@@ -120,7 +122,7 @@ editor_program_transition_from_current_set(Evas_Object 
*edit_object, Change *cha
           mode = mode | EDJE_TWEEN_MODE_OPT_FROM_CURRENT;
         CRIT_ON_FAIL(edje_edit_program_transition_set(edit_object, program, 
mode));
         _editor_project_changed();
-        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute);
+        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send);
      }
    return true;
 }
@@ -130,7 +132,8 @@ editor_program_channel_set(Evas_Object *edit_object, Change 
*change, Eina_Bool m
                            const char *program, Edje_Channel new_val)
 {
    Diff *diff;
-   RM_Attribute attribute = RM_ATTRIBUTE_PROGRAM_CHANNEL;
+   Editor_Attribute_Change send;
+   send.attribute = RM_ATTRIBUTE_PROGRAM_CHANNEL;
    assert(edit_object != NULL);
    assert(program != NULL);
    if (change)
@@ -154,7 +157,7 @@ editor_program_channel_set(Evas_Object *edit_object, Change 
*change, Eina_Bool m
      {
         CRIT_ON_FAIL(edje_edit_program_channel_set(edit_object, program, 
new_val));
         _editor_project_changed();
-        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute);
+        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send);
      }
    return true;
 }
@@ -190,7 +193,8 @@ editor_program_transition_factor_set(Evas_Object 
*edit_object, Change *change, E
                                      const char *program, double new_val)
 {
    Diff *diff;
-   RM_Attribute attribute = RM_ATTRIBUTE_PROGRAM_TRANSITION_FACTOR;
+   Editor_Attribute_Change send;
+   send.attribute = RM_ATTRIBUTE_PROGRAM_TRANSITION_FACTOR;
    assert(edit_object != NULL);
    assert(program != NULL);
 
@@ -228,7 +232,7 @@ editor_program_transition_factor_set(Evas_Object 
*edit_object, Change *change, E
           }
 
         _editor_project_changed();
-        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute);
+        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send);
      }
    return true;
 }
@@ -251,7 +255,8 @@ editor_program_transition_gradient_set(Evas_Object 
*edit_object, Change *change,
                                        const char *program, double new_val)
 {
    Diff *diff;
-   RM_Attribute attribute = RM_ATTRIBUTE_PROGRAM_TRANSITION_GRADIENT;
+   Editor_Attribute_Change send;
+   send.attribute = RM_ATTRIBUTE_PROGRAM_TRANSITION_GRADIENT;
    assert(edit_object != NULL);
    assert(program != NULL);
 
@@ -278,7 +283,7 @@ editor_program_transition_gradient_set(Evas_Object 
*edit_object, Change *change,
      {
         CRIT_ON_FAIL(edje_edit_program_transition_value1_set(edit_object, 
program, new_val));
         _editor_project_changed();
-        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute);
+        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send);
      }
    return true;
 }
@@ -302,7 +307,8 @@ editor_program_transition_decay_set(Evas_Object 
*edit_object, Change *change, Ei
                                     const char *program, double new_val)
 {
    Diff *diff;
-   RM_Attribute attribute = RM_ATTRIBUTE_PROGRAM_TRANSITION_DECAY;
+   Editor_Attribute_Change send;
+   send.attribute = RM_ATTRIBUTE_PROGRAM_TRANSITION_DECAY;
    assert(edit_object != NULL);
    assert(program != NULL);
 
@@ -330,7 +336,7 @@ editor_program_transition_decay_set(Evas_Object 
*edit_object, Change *change, Ei
      {
         CRIT_ON_FAIL(edje_edit_program_transition_value1_set(edit_object, 
program, new_val));
         _editor_project_changed();
-        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute);
+        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send);
      }
    return true;
 }
@@ -353,7 +359,8 @@ editor_program_transition_bounces_set(Evas_Object 
*edit_object, Change *change,
                                       const char *program, double new_val)
 {
    Diff *diff;
-   RM_Attribute attribute = RM_ATTRIBUTE_PROGRAM_TRANSITION_BOUNCES;
+   Editor_Attribute_Change send;
+   send.attribute = RM_ATTRIBUTE_PROGRAM_TRANSITION_BOUNCES;
    assert(edit_object != NULL);
    assert(program != NULL);
 
@@ -380,7 +387,7 @@ editor_program_transition_bounces_set(Evas_Object 
*edit_object, Change *change,
      {
         CRIT_ON_FAIL(edje_edit_program_transition_value2_set(edit_object, 
program, new_val));
         _editor_project_changed();
-        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute);
+        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send);
      }
    return true;
 }
@@ -403,7 +410,8 @@ editor_program_transition_swings_set(Evas_Object 
*edit_object, Change *change, E
                                      const char *program, double new_val)
 {
    Diff *diff;
-   RM_Attribute attribute = RM_ATTRIBUTE_PROGRAM_TRANSITION_SWINGS;
+   Editor_Attribute_Change send;
+   send.attribute = RM_ATTRIBUTE_PROGRAM_TRANSITION_SWINGS;
    assert(edit_object != NULL);
    assert(program != NULL);
 
@@ -430,7 +438,7 @@ editor_program_transition_swings_set(Evas_Object 
*edit_object, Change *change, E
      {
         CRIT_ON_FAIL(edje_edit_program_transition_value2_set(edit_object, 
program, new_val));
         _editor_project_changed();
-        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute);
+        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send);
      }
    return true;
 }
@@ -454,7 +462,8 @@ editor_program_transition_bezier_## VAL ##_set(Evas_Object 
*edit_object, Change
                                                const char *program, double 
new_val) \
 { \
    Diff *diff; \
-   RM_Attribute attribute = RM_ATTRIBUTE; \
+   Editor_Attribute_Change send; \
+   send.attribute = RM_ATTRIBUTE; \
    assert(edit_object != NULL); \
    assert(program != NULL); \
  \
@@ -481,7 +490,7 @@ editor_program_transition_bezier_## VAL ##_set(Evas_Object 
*edit_object, Change
      { \
        CRIT_ON_FAIL(edje_edit_program_transition_value## 
REAL_VAL##_set(edit_object, program, new_val)); \
        _editor_project_changed(); \
-       if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute); \
+       if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send); \
      } \
    return true; \
 }
@@ -513,7 +522,8 @@ editor_program_emit_signal_set(Evas_Object *edit_object, 
Change *change, Eina_Bo
                                const char *program, const char *new_val)
 {
    Diff *diff;
-   RM_Attribute attribute = RM_ATTRIBUTE_PROGRAM_EMIT_SIGNAL;
+   Editor_Attribute_Change send;
+   send.attribute = RM_ATTRIBUTE_PROGRAM_EMIT_SIGNAL;
    assert(edit_object != NULL);
    assert(program != NULL);
    if (change)
@@ -539,7 +549,7 @@ editor_program_emit_signal_set(Evas_Object *edit_object, 
Change *change, Eina_Bo
        if (!edje_edit_program_emit_source_get(edit_object, program))
          CRIT_ON_FAIL(edje_edit_program_state2_set(edit_object, program, ""));
        _editor_project_changed();
-       if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute);
+       if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send);
        evas_object_smart_callback_call(ap.win, SIGNAL_EDITOR_PROGRAM_UPDATE, 
(void *)program);
      }
    return true;
@@ -551,7 +561,8 @@ editor_program_name_set(Evas_Object *edit_object, Change 
*change, Eina_Bool merg
 {
    Diff *diff;
    Rename ren;
-   RM_Attribute attribute = RM_ATTRIBUTE_PROGRAM_NAME;
+   Editor_Attribute_Change send;
+   send.attribute = RM_ATTRIBUTE_PROGRAM_NAME;
    assert(edit_object != NULL);
    assert(name != NULL);
    assert(new_val != NULL);
@@ -578,7 +589,7 @@ editor_program_name_set(Evas_Object *edit_object, Change 
*change, Eina_Bool merg
         ren.old_name = name;
         ren.new_name = new_val;
         if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_PROGRAM_RENAMED, &ren);
-        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute);
+        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send);
      }
    return true;
 }
@@ -588,7 +599,8 @@ editor_program_target_add(Evas_Object *edit_object, Change 
*change, Eina_Bool me
                           const char *program_name, Eina_Stringshare *target)
 {
    Diff *diff;
-   RM_Attribute attribute = RM_ATTRIBUTE_PROGRAM_TARGET;
+   Editor_Attribute_Change send;
+   send.attribute = RM_ATTRIBUTE_PROGRAM_TARGET;
    assert(edit_object != NULL);
    assert(program_name != NULL);
    assert(target != NULL);
@@ -613,7 +625,7 @@ editor_program_target_add(Evas_Object *edit_object, Change 
*change, Eina_Bool me
         CRIT_ON_FAIL(edje_edit_program_target_add(edit_object, program_name, 
target));
         _editor_project_changed();
         if (!_editor_signals_blocked)
-        evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute);
+        evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send);
      }
    return true;
 }
@@ -623,7 +635,8 @@ editor_program_target_del(Evas_Object *edit_object, Change 
*change, Eina_Bool me
                           const char *program_name, Eina_Stringshare *target)
 {
    Diff *diff;
-   RM_Attribute attribute = RM_ATTRIBUTE_PROGRAM_TARGET;
+   Editor_Attribute_Change send;
+   send.attribute = RM_ATTRIBUTE_PROGRAM_TARGET;
    assert(edit_object != NULL);
    assert(program_name != NULL);
    if (change)
@@ -647,7 +660,7 @@ editor_program_target_del(Evas_Object *edit_object, Change 
*change, Eina_Bool me
         CRIT_ON_FAIL(edje_edit_program_target_del(edit_object, program_name, 
target));
         _editor_project_changed();
         if (!_editor_signals_blocked)
-        evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute);
+        evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send);
      }
    return true;
 }
@@ -657,7 +670,8 @@ editor_program_after_add(Evas_Object *edit_object, Change 
*change, Eina_Bool mer
                          const char *program_name, Eina_Stringshare *after)
 {
    Diff *diff;
-   RM_Attribute attribute = RM_ATTRIBUTE_PROGRAM_AFTER;
+   Editor_Attribute_Change send;
+   send.attribute = RM_ATTRIBUTE_PROGRAM_AFTER;
    assert(edit_object != NULL);
    assert(program_name != NULL);
    assert(after != NULL);
@@ -682,7 +696,7 @@ editor_program_after_add(Evas_Object *edit_object, Change 
*change, Eina_Bool mer
         CRIT_ON_FAIL(edje_edit_program_after_add(edit_object, program_name, 
after));
         _editor_project_changed();
         if (!_editor_signals_blocked)
-          evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute);
+          evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send);
      }
    return true;
 }
@@ -692,7 +706,8 @@ editor_program_after_del(Evas_Object *edit_object, Change 
*change, Eina_Bool mer
                          const char *program_name, Eina_Stringshare *after)
 {
    Diff *diff;
-   RM_Attribute attribute = RM_ATTRIBUTE_PROGRAM_AFTER;
+   Editor_Attribute_Change send;
+   send.attribute = RM_ATTRIBUTE_PROGRAM_AFTER;
    assert(edit_object != NULL);
    assert(program_name != NULL);
    if (change)
@@ -716,7 +731,7 @@ editor_program_after_del(Evas_Object *edit_object, Change 
*change, Eina_Bool mer
         CRIT_ON_FAIL(edje_edit_program_after_del(edit_object, program_name, 
after));
         _editor_project_changed();
         if (!_editor_signals_blocked)
-          evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute);
+          evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send);
      }
    return true;
 }
diff --git a/src/bin/editor/editor_states.c b/src/bin/editor/editor_states.c
index 3090935..b5bb54c 100644
--- a/src/bin/editor/editor_states.c
+++ b/src/bin/editor/editor_states.c
@@ -61,7 +61,8 @@ editor_state_max_## VAL ##_set(Evas_Object *edit_object, 
Change *change, Eina_Bo
    int old_value; \
    int min_value; \
    Diff *diff; \
-   RM_Attribute attribute = RM_ATTRIBUTE_STATE_MAX_##VAL_CAPS; \
+   Editor_Attribute_Change send; \
+   send.attribute = RM_ATTRIBUTE_STATE_MAX_##VAL_CAPS; \
  \
    assert(edit_object != NULL); \
    assert(new_value >= -1); \
@@ -96,7 +97,7 @@ editor_state_max_## VAL ##_set(Evas_Object *edit_object, 
Change *change, Eina_Bo
      { \
         CRIT_ON_FAIL(edje_edit_state_max_## VAL ##_set(edit_object, part_name, 
state_name, state_val, new_value)); \
         _editor_project_changed(); \
-        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute); \
+        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send); \
      } \
    return true; \
 }
@@ -112,7 +113,8 @@ editor_state_min_## VAL ##_set(Evas_Object *edit_object, 
Change *change, Eina_Bo
    int old_value; \
    int max_value; \
    Diff *diff; \
-   RM_Attribute attribute = RM_ATTRIBUTE_STATE_MIN_##VAL_CAPS; \
+   Editor_Attribute_Change send; \
+   send.attribute = RM_ATTRIBUTE_STATE_MIN_##VAL_CAPS; \
  \
    assert(edit_object != NULL); \
    assert(new_value >= 0); \
@@ -147,7 +149,7 @@ editor_state_min_## VAL ##_set(Evas_Object *edit_object, 
Change *change, Eina_Bo
      { \
         CRIT_ON_FAIL(edje_edit_state_min_## VAL ##_set(edit_object, part_name, 
state_name, state_val, new_value)); \
         _editor_project_changed(); \
-        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute); \
+        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send); \
      } \
    return true; \
 }
@@ -161,7 +163,8 @@ editor_state_## FUNC ##_set(Evas_Object *edit_object, 
Change *change, Eina_Bool
                             const char *part_name, const char *state_name, 
double state_val, double new_val) \
 { \
    Diff *diff; \
-   RM_Attribute attribute = RM_ATTRIBUTE; \
+   Editor_Attribute_Change send; \
+   send.attribute = RM_ATTRIBUTE; \
    assert(edit_object != NULL); \
    assert(part_name != NULL); \
    assert(state_name != NULL); \
@@ -190,7 +193,7 @@ editor_state_## FUNC ##_set(Evas_Object *edit_object, 
Change *change, Eina_Bool
      { \
        CRIT_ON_FAIL(edje_edit_state_## FUNC ##_set(edit_object, part_name, 
state_name, state_val, new_val)); \
        _editor_project_changed(); \
-       if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute); \
+       if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send); \
      } \
    return true; \
 }
@@ -229,7 +232,8 @@ editor_state_map_rotation_x_set(Evas_Object *edit_object, 
Change *change, Eina_B
 {
    Diff *diff;
    double o4, o5, o6;
-   RM_Attribute attribute = RM_ATTRIBUTE_STATE_MAP_ROTATION_X;
+   Editor_Attribute_Change send;
+   send.attribute = RM_ATTRIBUTE_STATE_MAP_ROTATION_X;
    assert(edit_object != NULL);
    assert(part_name != NULL);
    assert(state_name != NULL);
@@ -258,7 +262,7 @@ editor_state_map_rotation_x_set(Evas_Object *edit_object, 
Change *change, Eina_B
      {
         CRIT_ON_FAIL(edje_edit_state_map_rotation_set(edit_object, part_name, 
state_name, state_val, n4, o5, o6));
         _editor_project_changed();
-        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute);
+        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send);
      }
    return true;
 }
@@ -269,7 +273,8 @@ editor_state_map_rotation_y_set(Evas_Object *edit_object, 
Change *change, Eina_B
 {
    Diff *diff;
    double o4, o5, o6;
-   RM_Attribute attribute = RM_ATTRIBUTE_STATE_MAP_ROTATION_Y;
+   Editor_Attribute_Change send;
+   send.attribute = RM_ATTRIBUTE_STATE_MAP_ROTATION_Y;
    assert(edit_object != NULL);
    assert(part_name != NULL);
    assert(state_name != NULL);
@@ -298,7 +303,7 @@ editor_state_map_rotation_y_set(Evas_Object *edit_object, 
Change *change, Eina_B
      {
         CRIT_ON_FAIL(edje_edit_state_map_rotation_set(edit_object, part_name, 
state_name, state_val, o4, n5, o6));
         _editor_project_changed();
-        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute);
+        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send);
      }
    return true;
 }
@@ -309,7 +314,8 @@ editor_state_map_rotation_z_set(Evas_Object *edit_object, 
Change *change, Eina_B
 {
    Diff *diff;
    double o4, o5, o6;
-   RM_Attribute attribute = RM_ATTRIBUTE_STATE_MAP_ROTATION_Z;
+   Editor_Attribute_Change send;
+   send.attribute = RM_ATTRIBUTE_STATE_MAP_ROTATION_Z;
    assert(edit_object != NULL);
    assert(part_name != NULL);
    assert(state_name != NULL);
@@ -338,7 +344,7 @@ editor_state_map_rotation_z_set(Evas_Object *edit_object, 
Change *change, Eina_B
      {
         CRIT_ON_FAIL(edje_edit_state_map_rotation_set(edit_object, part_name, 
state_name, state_val, o4, o5, n6));
         _editor_project_changed();
-        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute);
+        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send);
      }
    return true;
 }
@@ -369,7 +375,8 @@ editor_state_image_border_left_set(Evas_Object 
*edit_object, Change *change, Ein
 {
    Diff *diff;
    int o4, o5, o6, o7;
-   RM_Attribute attribute = RM_ATTRIBUTE_STATE_IMAGE_BORDER_LEFT;
+   Editor_Attribute_Change send;
+   send.attribute = RM_ATTRIBUTE_STATE_IMAGE_BORDER_LEFT;
    assert(edit_object != NULL);
    assert(part_name != NULL);
    assert(state_name != NULL);
@@ -399,7 +406,7 @@ editor_state_image_border_left_set(Evas_Object 
*edit_object, Change *change, Ein
         CRIT_ON_FAIL(edje_edit_state_image_border_set(edit_object, part_name, 
state_name, state_val, n4, o5, o6, o7));
         CRIT_ON_FAIL(editor_save(edit_object));
         _editor_project_changed();
-        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute);
+        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send);
      }
    return true;
 }
@@ -410,7 +417,8 @@ editor_state_image_border_right_set(Evas_Object 
*edit_object, Change *change, Ei
 {
    Diff *diff;
    int o4, o5, o6, o7;
-   RM_Attribute attribute = RM_ATTRIBUTE_STATE_IMAGE_BORDER_RIGHT;
+   Editor_Attribute_Change send;
+   send.attribute = RM_ATTRIBUTE_STATE_IMAGE_BORDER_RIGHT;
    assert(edit_object != NULL);
    assert(part_name != NULL);
    assert(state_name != NULL);
@@ -440,7 +448,7 @@ editor_state_image_border_right_set(Evas_Object 
*edit_object, Change *change, Ei
         CRIT_ON_FAIL(edje_edit_state_image_border_set(edit_object, part_name, 
state_name, state_val, o4, n5, o6, o7));
         CRIT_ON_FAIL(editor_save(edit_object));
         _editor_project_changed();
-        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute);
+        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send);
      }
    return true;
 }
@@ -451,7 +459,8 @@ editor_state_image_border_top_set(Evas_Object *edit_object, 
Change *change, Eina
 {
    Diff *diff;
    int o4, o5, o6, o7;
-   RM_Attribute attribute = RM_ATTRIBUTE_STATE_IMAGE_BORDER_TOP;
+   Editor_Attribute_Change send;
+   send.attribute = RM_ATTRIBUTE_STATE_IMAGE_BORDER_TOP;
    assert(edit_object != NULL);
    assert(part_name != NULL);
    assert(state_name != NULL);
@@ -481,7 +490,7 @@ editor_state_image_border_top_set(Evas_Object *edit_object, 
Change *change, Eina
         CRIT_ON_FAIL(edje_edit_state_image_border_set(edit_object, part_name, 
state_name, state_val, o4, o5, n6, o7));
         CRIT_ON_FAIL(editor_save(edit_object));
         _editor_project_changed();
-        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute);
+        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send);
      }
    return true;
 }
@@ -492,7 +501,8 @@ editor_state_image_border_bottom_set(Evas_Object 
*edit_object, Change *change, E
 {
    Diff *diff;
    int o4, o5, o6, o7;
-   RM_Attribute attribute = RM_ATTRIBUTE_STATE_IMAGE_BORDER_BOTTOM;
+   Editor_Attribute_Change send;
+   send.attribute = RM_ATTRIBUTE_STATE_IMAGE_BORDER_BOTTOM;
    assert(edit_object != NULL);
    assert(part_name != NULL);
    assert(state_name != NULL);
@@ -522,7 +532,7 @@ editor_state_image_border_bottom_set(Evas_Object 
*edit_object, Change *change, E
         CRIT_ON_FAIL(edje_edit_state_image_border_set(edit_object, part_name, 
state_name, state_val, o4, o5, o6, n7));
         CRIT_ON_FAIL(editor_save(edit_object));
         _editor_project_changed();
-        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute);
+        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send);
      }
    return true;
 }
@@ -543,7 +553,8 @@ editor_state_tween_add(Evas_Object *edit_object, Change 
*change, Eina_Bool merge
                        Eina_Stringshare *name)
 {
    Diff *diff;
-   RM_Attribute attribute = RM_ATTRIBUTE_STATE_IMAGE_TWEEN;
+   Editor_Attribute_Change send;
+   send.attribute = RM_ATTRIBUTE_STATE_IMAGE_TWEEN;
    assert(edit_object != NULL);
    assert(part_name != NULL);
    assert(state_name != NULL);
@@ -572,7 +583,7 @@ editor_state_tween_add(Evas_Object *edit_object, Change 
*change, Eina_Bool merge
         CRIT_ON_FAIL(edje_edit_state_tween_add(edit_object, part_name, 
state_name, state_val, name));
         _editor_project_changed();
         if (!_editor_signals_blocked)
-          evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute);
+          evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send);
      }
    return true;
 }
@@ -582,7 +593,8 @@ editor_state_tween_del(Evas_Object *edit_object, Change 
*change, Eina_Bool merge
                        Eina_Stringshare *name)
 {
    Diff *diff;
-   RM_Attribute attribute = RM_ATTRIBUTE_STATE_IMAGE_TWEEN;
+   Editor_Attribute_Change send;
+   send.attribute = RM_ATTRIBUTE_STATE_IMAGE_TWEEN;
    assert(edit_object != NULL);
    assert(part_name != NULL);
    assert(state_name != NULL);
@@ -611,7 +623,7 @@ editor_state_tween_del(Evas_Object *edit_object, Change 
*change, Eina_Bool merge
         CRIT_ON_FAIL(edje_edit_state_tween_del(edit_object, part_name, 
state_name, state_val, name));
         _editor_project_changed();
         if (!_editor_signals_blocked)
-          evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute);
+          evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send);
      }
    return true;
 }
diff --git a/src/bin/editor/editor_text.c b/src/bin/editor/editor_text.c
index 5ea80e5..03a8243 100644
--- a/src/bin/editor/editor_text.c
+++ b/src/bin/editor/editor_text.c
@@ -34,7 +34,8 @@ editor_state_text_size_set(Evas_Object *edit_object, Change 
*change, Eina_Bool m
                            const char *part_name, const char *state_name, 
double state_val, int new_val)
 {
    Diff *diff;
-   RM_Attribute attribute = RM_ATTRIBUTE_STATE_TEXT_SIZE;
+   Editor_Attribute_Change send;
+   send.attribute = RM_ATTRIBUTE_STATE_TEXT_SIZE;
 
    assert(edit_object != NULL);
    assert(part_name != NULL);
@@ -66,7 +67,7 @@ editor_state_text_size_set(Evas_Object *edit_object, Change 
*change, Eina_Bool m
      {
         CRIT_ON_FAIL(edje_edit_state_text_size_set(edit_object, part_name, 
state_name, state_val, new_val));
         _editor_project_changed();
-        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute);
+        if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send);
      }
    return true;
 }
@@ -90,7 +91,8 @@ editor_state_text_set(Evas_Object *edit_object, Change 
*change, Eina_Bool merge,
                       const char *part_name, const char *state_name, double 
state_val, const char *new_val)
 {
    Diff *diff;
-   RM_Attribute attribute = RM_ATTRIBUTE_STATE_TEXT_STYLE;
+   Editor_Attribute_Change send;
+   send.attribute = RM_ATTRIBUTE_STATE_TEXT_STYLE;
    assert(edit_object != NULL);
    assert(part_name != NULL);
    assert(state_name != NULL);
@@ -119,7 +121,7 @@ editor_state_text_set(Evas_Object *edit_object, Change 
*change, Eina_Bool merge,
      {
        CRIT_ON_FAIL(edje_edit_state_text_set(edit_object, part_name, 
state_name, state_val, new_val ? new_val : ""));
        _editor_project_changed();
-       if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute);
+       if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &send);
      }
    return true;
 }
diff --git a/src/bin/editor/editor_top_level.c 
b/src/bin/editor/editor_top_level.c
index 48d6cef..d87833c 100644
--- a/src/bin/editor/editor_top_level.c
+++ b/src/bin/editor/editor_top_level.c
@@ -278,6 +278,5 @@ editor_style_tag_value_set(Evas_Object *obj, const char 
*name, const char *tag,
    if (!_editor_signals_blocked)
      evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_RM_ATTRIBUTE_CHANGED, &attribute);
 
-     evas_object_smart_callback_call(ap.win, SIGNAL_EDITOR_ATTRIBUTE_CHANGED, 
&attribute);
    return true;
 }
diff --git a/src/bin/resource_manager/resource_manager_react.c 
b/src/bin/resource_manager/resource_manager_react.c
index d277c45..3248707 100644
--- a/src/bin/resource_manager/resource_manager_react.c
+++ b/src/bin/resource_manager/resource_manager_react.c
@@ -90,10 +90,10 @@ _property_attribute_changed(void *data __UNUSED__,
     ***********************************************************************
     ***********************************************************************/
 
-   RM_Attribute *attr = event_info;
-   Attribute editor_resource = (int)*attr;
+   Editor_Attribute_Change *change = (Editor_Attribute_Change *)event_info;
+   Attribute editor_resource = (int)change->attribute;
 
-   switch ((int)*attr)
+   switch ((int)change->attribute)
      {
       case RM_ATTRIBUTE_GROUP_MIN_W:
       case RM_ATTRIBUTE_GROUP_MIN_H:
@@ -151,7 +151,6 @@ _property_attribute_changed(void *data __UNUSED__,
       case RM_ATTRIBUTE_PART_TEXT_SHADOW_DIRECTION:
       case RM_ATTRIBUTE_PART_CLIP_TO:
       case RM_ATTRIBUTE_PART_DRAG_CONFINE:
-      case RM_ATTRIBUTE_PART_GROUP_SOURCE:
       case RM_ATTRIBUTE_PART_TEXTBLOCK_SELECTION_UNDER:
       case RM_ATTRIBUTE_PART_TEXTBLOCK_SELECTION_OVER:
       case RM_ATTRIBUTE_PART_TEXTBLOCK_CURSOR_UNDER:
@@ -222,6 +221,9 @@ _property_attribute_changed(void *data __UNUSED__,
       case RM_ATTRIBUTE_PART_ITEM_PADDING_LEFT:
       case RM_ATTRIBUTE_PART_ITEM_PADDING_TOP:
       case RM_ATTRIBUTE_PART_ITEM_PADDING_BOTTOM:
+         break;
+      case RM_ATTRIBUTE_PART_GROUP_SOURCE:
+         break;
       default:
          break;
      }

-- 


Reply via email to