Hi,
I was writing an application using edje and I needed to change the
style from an external elementary widget inside edje. So I wrote this
patch to add a param 'style' to elementary widget.
With this patch, you can change the style doing:
params.string: "style" "name_of_style";
Or calling external_param_set_str in embryo script.

-- 
Otavio Pontes
ProFUSION embedded systems
http://www.profusion.mobi
From 88857db6a8ccfabc445c806a3192e1e3cc311b31 Mon Sep 17 00:00:00 2001
From: Otavio Pontes <[email protected]>
Date: Fri, 15 Oct 2010 08:15:25 -0300
Subject: [PATCH] Adding support for changing style from one elm widget in edje external.
To: [email protected]

This patch creates a param 'style' that can be used in edje external
to change the style of one object.
---
 TMP/st/elementary/src/edje_externals/elm.c         |   44 ++++++++++++++++++++
 .../src/edje_externals/elm_anchorblock.c           |    6 ++-
 .../elementary/src/edje_externals/elm_anchorview.c |    6 ++-
 TMP/st/elementary/src/edje_externals/elm_bubble.c  |    1 +
 TMP/st/elementary/src/edje_externals/elm_button.c  |    1 +
 TMP/st/elementary/src/edje_externals/elm_check.c   |    1 +
 TMP/st/elementary/src/edje_externals/elm_clock.c   |    6 ++-
 .../src/edje_externals/elm_fileselector.c          |    6 ++-
 .../src/edje_externals/elm_fileselector_button.c   |    1 +
 .../src/edje_externals/elm_fileselector_entry.c    |    1 +
 TMP/st/elementary/src/edje_externals/elm_genlist.c |    6 ++-
 .../elementary/src/edje_externals/elm_hoversel.c   |    1 +
 TMP/st/elementary/src/edje_externals/elm_list.c    |    6 ++-
 TMP/st/elementary/src/edje_externals/elm_map.c     |    6 ++-
 TMP/st/elementary/src/edje_externals/elm_notify.c  |    1 +
 TMP/st/elementary/src/edje_externals/elm_panes.c   |    1 +
 .../elementary/src/edje_externals/elm_photocam.c   |    6 ++-
 .../src/edje_externals/elm_progressbar.c           |    1 +
 TMP/st/elementary/src/edje_externals/elm_radio.c   |    1 +
 .../src/edje_externals/elm_scrolled_entry.c        |    6 ++-
 TMP/st/elementary/src/edje_externals/elm_slider.c  |    1 +
 .../elementary/src/edje_externals/elm_slideshow.c  |    6 ++-
 TMP/st/elementary/src/edje_externals/elm_spinner.c |    6 ++-
 TMP/st/elementary/src/edje_externals/elm_thumb.c   |    6 ++-
 TMP/st/elementary/src/edje_externals/elm_toggle.c  |    1 +
 TMP/st/elementary/src/edje_externals/elm_toolbar.c |    6 ++-
 TMP/st/elementary/src/edje_externals/private.h     |   19 ++++++++-
 27 files changed, 125 insertions(+), 28 deletions(-)

diff --git a/TMP/st/elementary/src/edje_externals/elm.c b/TMP/st/elementary/src/edje_externals/elm.c
index af91e60..7605280 100644
--- a/TMP/st/elementary/src/edje_externals/elm.c
+++ b/TMP/st/elementary/src/edje_externals/elm.c
@@ -69,6 +69,34 @@ _external_signal_proxy_cb(void *data, Evas_Object *obj __UNUSED__, void *event_i
    edje_object_signal_emit(ctxt->edje, ctxt->emission, ctxt->source);
 }
 
+Eina_Bool
+external_common_param_get(void *data __UNUSED__, const Evas_Object *obj, Edje_External_Param *param)
+{
+   if (!strcmp(param->name, "style"))
+     {
+        if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
+          {
+             param->s = elm_object_style_get(obj);
+             return EINA_TRUE;
+          }
+     }
+   return EINA_FALSE;
+}
+
+Eina_Bool
+external_common_param_set(void *data __UNUSED__, Evas_Object *obj, Edje_External_Param *param)
+{
+   if (!strcmp(param->name, "style"))
+     {
+         if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
+           {
+              elm_object_style_set(obj, param->s);
+              return EINA_TRUE;
+           }
+     }
+   return EINA_FALSE;
+}
+
 void
 external_signals_proxy(Evas_Object *obj, Evas_Object *edje, const char *part_name)
 {
@@ -125,10 +153,24 @@ external_common_params_parse_internal(size_t params_size, void *data __UNUSED__,
      {
 	if (!strcmp(param->name, "label"))
 	  p->label = param->s;
+        else if (!strcmp(param->name, "style"))
+           p->style = eina_stringshare_add(param->s);
      }
    return p;
 }
 
+void
+external_common_state_set(void *data __UNUSED__, Evas_Object *obj, const void *from_params, const void *to_params, float pos __UNUSED__)
+{
+   const Elm_Params *p;
+   if (to_params) p = to_params;
+   else if (from_params) p = from_params;
+   else return;
+
+   if (p->style)
+      elm_object_style_set(obj, p->style);
+}
+
 Evas_Object *
 external_common_param_icon_get(Evas_Object *obj, const Edje_External_Param *p)
 {
@@ -191,6 +233,8 @@ void
 external_common_params_free(void *params)
 {
    Elm_Params *p = params;
+   if (p->style)
+     eina_stringshare_del(p->style);
    free(p);
 };
 
diff --git a/TMP/st/elementary/src/edje_externals/elm_anchorblock.c b/TMP/st/elementary/src/edje_externals/elm_anchorblock.c
index 0e0c2eb..d8cda65 100644
--- a/TMP/st/elementary/src/edje_externals/elm_anchorblock.c
+++ b/TMP/st/elementary/src/edje_externals/elm_anchorblock.c
@@ -2,6 +2,7 @@
 
 typedef struct _Elm_Params_Anchorblock
 {
+   Elm_Params base;
    const char *text;
 } Elm_Params_Anchorblock;
 
@@ -10,6 +11,7 @@ external_anchorblock_state_set(void *data __UNUSED__, Evas_Object *obj, const vo
 {
    const Elm_Params_Anchorblock *p;
 
+   external_common_state_set(data, obj, from_params, to_params, pos);
    if (to_params) p = to_params;
    else if (from_params) p = from_params;
    else return;
@@ -63,7 +65,7 @@ external_anchorblock_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUS
    Edje_External_Param *param;
    const Eina_List *l;
 
-   mem = calloc(1, sizeof(Elm_Params_Anchorblock));
+   mem = external_common_params_parse(Elm_Params_Anchorblock, data, obj, params);
    if (!mem)
      return NULL;
 
@@ -90,7 +92,7 @@ external_anchorblock_params_free(void *params)
 
    if (mem->text)
      eina_stringshare_del(mem->text);
-   free(mem);
+   external_common_params_free(params);
 }
 
 static Edje_External_Param_Info external_anchorblock_params[] = {
diff --git a/TMP/st/elementary/src/edje_externals/elm_anchorview.c b/TMP/st/elementary/src/edje_externals/elm_anchorview.c
index f4f3d9a..1c78a7f 100644
--- a/TMP/st/elementary/src/edje_externals/elm_anchorview.c
+++ b/TMP/st/elementary/src/edje_externals/elm_anchorview.c
@@ -2,6 +2,7 @@
 
 typedef struct _Elm_Params_Anchorview
 {
+   Elm_Params base;
    const char *text;
 } Elm_Params_Anchorview;
 
@@ -10,6 +11,7 @@ external_anchorview_state_set(void *data __UNUSED__, Evas_Object *obj, const voi
 {
    const Elm_Params_Anchorview *p;
 
+   external_common_state_set(data, obj, from_params, to_params, pos);
    if (to_params) p = to_params;
    else if (from_params) p = from_params;
    else return;
@@ -63,7 +65,7 @@ external_anchorview_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUSE
    Edje_External_Param *param;
    const Eina_List *l;
 
-   mem = calloc(1, sizeof(Elm_Params_Anchorview));
+   mem = external_common_params_parse(Elm_Params_Anchorview, data, obj, params);
    if (!mem)
      return NULL;
 
@@ -90,7 +92,7 @@ external_anchorview_params_free(void *params)
 
    if (mem->text)
      eina_stringshare_del(mem->text);
-   free(mem);
+   external_common_params_free(params);
 }
 
 static Edje_External_Param_Info external_anchorview_params[] = {
diff --git a/TMP/st/elementary/src/edje_externals/elm_bubble.c b/TMP/st/elementary/src/edje_externals/elm_bubble.c
index f8f0f2d..c811d37 100644
--- a/TMP/st/elementary/src/edje_externals/elm_bubble.c
+++ b/TMP/st/elementary/src/edje_externals/elm_bubble.c
@@ -13,6 +13,7 @@ external_bubble_state_set(void *data __UNUSED__, Evas_Object *obj, const void *f
 {
    const Elm_Params_Bubble *p;
 
+   external_common_state_set(data, obj, from_params, to_params, pos);
    if (to_params) p = to_params;
    else if (from_params) p = from_params;
    else return;
diff --git a/TMP/st/elementary/src/edje_externals/elm_button.c b/TMP/st/elementary/src/edje_externals/elm_button.c
index 2ed7987..0440e03 100644
--- a/TMP/st/elementary/src/edje_externals/elm_button.c
+++ b/TMP/st/elementary/src/edje_externals/elm_button.c
@@ -11,6 +11,7 @@ external_button_state_set(void *data __UNUSED__, Evas_Object *obj, const void *f
 {
    const Elm_Params_Button *p;
 
+   external_common_state_set(data, obj, from_params, to_params, pos);
    if (to_params) p = to_params;
    else if (from_params) p = from_params;
    else return;
diff --git a/TMP/st/elementary/src/edje_externals/elm_check.c b/TMP/st/elementary/src/edje_externals/elm_check.c
index fca2b87..636375f 100644
--- a/TMP/st/elementary/src/edje_externals/elm_check.c
+++ b/TMP/st/elementary/src/edje_externals/elm_check.c
@@ -13,6 +13,7 @@ external_check_state_set(void *data __UNUSED__, Evas_Object *obj, const void *fr
 {
    const Elm_Params_Check *p;
 
+   external_common_state_set(data, obj, from_params, to_params, pos);
    if (to_params) p = to_params;
    else if (from_params) p = from_params;
    else return;
diff --git a/TMP/st/elementary/src/edje_externals/elm_clock.c b/TMP/st/elementary/src/edje_externals/elm_clock.c
index 13bda6d..ecb1b53 100644
--- a/TMP/st/elementary/src/edje_externals/elm_clock.c
+++ b/TMP/st/elementary/src/edje_externals/elm_clock.c
@@ -2,6 +2,7 @@
 
 typedef struct _Elm_Params_Clock
 {
+   Elm_Params base;
    int hrs, min, sec;
    Eina_Bool hrs_exists:1;
    Eina_Bool min_exists:1;
@@ -16,6 +17,7 @@ external_clock_state_set(void *data __UNUSED__, Evas_Object *obj, const void *fr
 {
    const Elm_Params_Clock *p;
 
+   external_common_state_set(data, obj, from_params, to_params, pos);
    if (to_params) p = to_params;
    else if (from_params) p = from_params;
    else return;
@@ -178,7 +180,7 @@ external_clock_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUSED__,
    Edje_External_Param *param;
    const Eina_List *l;
 
-   mem = calloc(1, sizeof(Elm_Params_Clock));
+   mem = external_common_params_parse(Elm_Params_Clock, data, obj, params);
    if (!mem)
      return NULL;
 
@@ -222,7 +224,7 @@ external_clock_params_free(void *params)
 {
    Elm_Params_Clock *mem = params;
 
-   free(mem);
+   external_common_params_free(params);
 }
 
 static Edje_External_Param_Info external_clock_params[] = {
diff --git a/TMP/st/elementary/src/edje_externals/elm_fileselector.c b/TMP/st/elementary/src/edje_externals/elm_fileselector.c
index c955bc4..03b4906 100644
--- a/TMP/st/elementary/src/edje_externals/elm_fileselector.c
+++ b/TMP/st/elementary/src/edje_externals/elm_fileselector.c
@@ -4,6 +4,7 @@
 
 typedef struct _Elm_Params_Fileselector
 {
+   Elm_Params base;
    Eina_Bool is_save:1;
    Eina_Bool is_save_set:1;
    Eina_Bool folder_only:1;
@@ -19,6 +20,7 @@ external_fileselector_state_set(void *data __UNUSED__, Evas_Object *obj, const v
 {
    const Elm_Params_Fileselector *p;
 
+   external_common_state_set(data, obj, from_params, to_params, pos);
    if (to_params) p = to_params;
    else if (from_params) p = from_params;
    else return;
@@ -124,7 +126,7 @@ external_fileselector_params_parse(void *data __UNUSED__, Evas_Object *obj __UNU
    Edje_External_Param *param;
    const Eina_List *l;
 
-   mem = calloc(1, sizeof(Elm_Params_Fileselector));
+   mem = external_common_params_parse(Elm_Params_Fileselector, data, obj, params);
    if (!mem)
      return NULL;
 
@@ -166,7 +168,7 @@ static void
 external_fileselector_params_free(void *params)
 {
    Elm_Params_Fileselector *mem = params;
-   free(mem);
+   external_common_params_free(params);
 }
 
 static Edje_External_Param_Info external_fileselector_params[] =
diff --git a/TMP/st/elementary/src/edje_externals/elm_fileselector_button.c b/TMP/st/elementary/src/edje_externals/elm_fileselector_button.c
index f17e6bd..a3504b9 100644
--- a/TMP/st/elementary/src/edje_externals/elm_fileselector_button.c
+++ b/TMP/st/elementary/src/edje_externals/elm_fileselector_button.c
@@ -23,6 +23,7 @@ external_fileselector_button_state_set(void *data __UNUSED__, Evas_Object *obj,
 {
    const Elm_Params_fileselector_button *p;
 
+   external_common_state_set(data, obj, from_params, to_params, pos);
    if (to_params) p = to_params;
    else if (from_params) p = from_params;
    else return;
diff --git a/TMP/st/elementary/src/edje_externals/elm_fileselector_entry.c b/TMP/st/elementary/src/edje_externals/elm_fileselector_entry.c
index ee278d2..2a1196a 100644
--- a/TMP/st/elementary/src/edje_externals/elm_fileselector_entry.c
+++ b/TMP/st/elementary/src/edje_externals/elm_fileselector_entry.c
@@ -23,6 +23,7 @@ external_fileselector_entry_state_set(void *data __UNUSED__, Evas_Object *obj, c
 {
    const Elm_Params_fileselector_entry *p;
 
+   external_common_state_set(data, obj, from_params, to_params, pos);
    if (to_params) p = to_params;
    else if (from_params) p = from_params;
    else return;
diff --git a/TMP/st/elementary/src/edje_externals/elm_genlist.c b/TMP/st/elementary/src/edje_externals/elm_genlist.c
index a8b2405..f01eedd 100644
--- a/TMP/st/elementary/src/edje_externals/elm_genlist.c
+++ b/TMP/st/elementary/src/edje_externals/elm_genlist.c
@@ -4,6 +4,7 @@
 
 typedef struct _Elm_Params_Genlist
 {
+   Elm_Params base;
    const char *horizontal_mode;
    Eina_Bool multi:1;
    Eina_Bool multi_exists:1;
@@ -43,6 +44,7 @@ external_genlist_state_set(void *data __UNUSED__, Evas_Object *obj, const void *
 {
    const Elm_Params_Genlist *p;
 
+   external_common_state_set(data, obj, from_params, to_params, pos);
    if (to_params) p = to_params;
    else if (from_params) p = from_params;
    else return;
@@ -249,7 +251,7 @@ external_genlist_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUSED__
    Edje_External_Param *param;
    const Eina_List *l;
 
-   mem = calloc(1, sizeof(Elm_Params_Genlist));
+   mem = external_common_params_parse(Elm_Params_Genlist, data, obj, params);
    if (!mem)
      return NULL;
 
@@ -312,7 +314,7 @@ external_genlist_params_free(void *params)
    if (mem->horizontal_mode)
      eina_stringshare_del(mem->horizontal_mode);
 
-   free(mem);
+   external_common_params_free(params);
 }
 
 static Edje_External_Param_Info external_genlist_params[] = {
diff --git a/TMP/st/elementary/src/edje_externals/elm_hoversel.c b/TMP/st/elementary/src/edje_externals/elm_hoversel.c
index 08b2dce..ab69d62 100644
--- a/TMP/st/elementary/src/edje_externals/elm_hoversel.c
+++ b/TMP/st/elementary/src/edje_externals/elm_hoversel.c
@@ -13,6 +13,7 @@ external_hoversel_state_set(void *data __UNUSED__, Evas_Object *obj, const void
 {
    const Elm_Params_Hoversel *p;
 
+   external_common_state_set(data, obj, from_params, to_params, pos);
    if (to_params) p = to_params;
    else if (from_params) p = from_params;
    else return;
diff --git a/TMP/st/elementary/src/edje_externals/elm_list.c b/TMP/st/elementary/src/edje_externals/elm_list.c
index 8f782af..77cb0fd 100644
--- a/TMP/st/elementary/src/edje_externals/elm_list.c
+++ b/TMP/st/elementary/src/edje_externals/elm_list.c
@@ -4,6 +4,7 @@
 
 typedef struct _Elm_Params_List
 {
+   Elm_Params base;
    const char *policy_h;
    const char *policy_v;
    const char *horizontal_mode;
@@ -48,6 +49,7 @@ external_list_state_set(void *data __UNUSED__, Evas_Object *obj, const void *fro
    const Elm_Params_List *p;
    Elm_Scroller_Policy policy_h, policy_v;
 
+   external_common_state_set(data, obj, from_params, to_params, pos);
    if (to_params) p = to_params;
    else if (from_params) p = from_params;
    else return;
@@ -216,7 +218,7 @@ external_list_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUSED__, c
    Edje_External_Param *param;
    const Eina_List *l;
 
-   mem = calloc(1, sizeof(Elm_Params_List));
+   mem = external_common_params_parse(Elm_Params_List, data, obj, params);
    if (!mem)
      return NULL;
 
@@ -261,7 +263,7 @@ external_list_params_free(void *params)
    if (mem->policy_v)
      eina_stringshare_del(mem->policy_v);
 
-   free(mem);
+   external_common_params_free(params);
 }
 
 static Edje_External_Param_Info external_list_params[] = {
diff --git a/TMP/st/elementary/src/edje_externals/elm_map.c b/TMP/st/elementary/src/edje_externals/elm_map.c
index 3077cf2..4500e7c 100644
--- a/TMP/st/elementary/src/edje_externals/elm_map.c
+++ b/TMP/st/elementary/src/edje_externals/elm_map.c
@@ -4,6 +4,7 @@
 
 typedef struct _Elm_Params_Map
 {
+   Elm_Params base;
    const char *map_source;
    const char *zoom_mode;
    double zoom;
@@ -50,6 +51,7 @@ external_map_state_set(void *data __UNUSED__, Evas_Object *obj, const void *from
 {
    const Elm_Params_Map *p;
 
+   external_common_state_set(data, obj, from_params, to_params, pos);
    if (to_params) p = to_params;
    else if (from_params) p = from_params;
    else return;
@@ -152,7 +154,7 @@ external_map_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUSED__, co
    Edje_External_Param *param;
    const Eina_List *l;
 
-   mem = calloc(1, sizeof(Elm_Params_Map));
+   mem = external_common_params_parse(Elm_Params_Map, data, obj, params);
    if (!mem)
      return NULL;
 
@@ -188,7 +190,7 @@ external_map_params_free(void *params)
      eina_stringshare_del(mem->map_source);
    if (mem->zoom_mode)
      eina_stringshare_del(mem->zoom_mode);
-   free(mem);
+   external_common_params_free(params);
 }
 
 static Edje_External_Param_Info external_map_params[] =
diff --git a/TMP/st/elementary/src/edje_externals/elm_notify.c b/TMP/st/elementary/src/edje_externals/elm_notify.c
index 3efaa37..0f4673e 100644
--- a/TMP/st/elementary/src/edje_externals/elm_notify.c
+++ b/TMP/st/elementary/src/edje_externals/elm_notify.c
@@ -48,6 +48,7 @@ static void external_notify_state_set(void *data __UNUSED__,
 {
 	const Elm_Params_Notify *p;
 
+        external_common_state_set(data, obj, from_params, to_params, pos);
 	if (to_params) p = to_params;
 	else if (from_params) p = from_params;
 	else return;
diff --git a/TMP/st/elementary/src/edje_externals/elm_panes.c b/TMP/st/elementary/src/edje_externals/elm_panes.c
index 38112e1..a1e7201 100644
--- a/TMP/st/elementary/src/edje_externals/elm_panes.c
+++ b/TMP/st/elementary/src/edje_externals/elm_panes.c
@@ -20,6 +20,7 @@ static void external_panes_state_set(void *data __UNUSED__,
 {
 	const Elm_Params_Panes *p;
 
+        external_common_state_set(data, obj, from_params, to_params, pos);
 	if (to_params) p = to_params;
 	else if (from_params) p = from_params;
 	else return;
diff --git a/TMP/st/elementary/src/edje_externals/elm_photocam.c b/TMP/st/elementary/src/edje_externals/elm_photocam.c
index f4b942f..c5e2f84 100644
--- a/TMP/st/elementary/src/edje_externals/elm_photocam.c
+++ b/TMP/st/elementary/src/edje_externals/elm_photocam.c
@@ -4,6 +4,7 @@
 
 typedef struct _Elm_Params_Photocam
 {
+   Elm_Params base;
    const char *file;
    double zoom;
    const char *zoom_mode;
@@ -34,6 +35,7 @@ external_photocam_state_set(void *data __UNUSED__, Evas_Object *obj, const void
 {
    const Elm_Params_Photocam *p;
 
+   external_common_state_set(data, obj, from_params, to_params, pos);
    if (to_params) p = to_params;
    else if (from_params) p = from_params;
    else return;
@@ -150,7 +152,7 @@ external_photocam_params_parse(void *data, Evas_Object *obj, const Eina_List *pa
    Edje_External_Param *param;
    const Eina_List *l;
 
-   mem = calloc(1, sizeof(Elm_Params_Photocam));
+   mem = external_common_params_parse(Elm_Params_Photocam, data, obj, params);
    if (!mem)
      return NULL;
 
@@ -191,7 +193,7 @@ external_photocam_params_free(void *params)
      eina_stringshare_del(mem->file);
    if (mem->zoom_mode)
      eina_stringshare_del(mem->zoom_mode);
-   free(mem);
+   external_common_params_free(params);
 }
 
 static Edje_External_Param_Info external_photocam_params[] = {
diff --git a/TMP/st/elementary/src/edje_externals/elm_progressbar.c b/TMP/st/elementary/src/edje_externals/elm_progressbar.c
index 295ce61..001230b 100644
--- a/TMP/st/elementary/src/edje_externals/elm_progressbar.c
+++ b/TMP/st/elementary/src/edje_externals/elm_progressbar.c
@@ -20,6 +20,7 @@ external_progressbar_state_set(void *data __UNUSED__, Evas_Object *obj, const vo
 {
    const Elm_Params_Progressbar *p;
 
+   external_common_state_set(data, obj, from_params, to_params, pos);
    if (to_params) p = to_params;
    else if (from_params) p = from_params;
    else return;
diff --git a/TMP/st/elementary/src/edje_externals/elm_radio.c b/TMP/st/elementary/src/edje_externals/elm_radio.c
index ab847e4..85ab375 100644
--- a/TMP/st/elementary/src/edje_externals/elm_radio.c
+++ b/TMP/st/elementary/src/edje_externals/elm_radio.c
@@ -14,6 +14,7 @@ external_radio_state_set(void *data __UNUSED__, Evas_Object *obj, const void *fr
 {
    const Elm_Params_Radio *p;
 
+   external_common_state_set(data, obj, from_params, to_params, pos);
    if (to_params) p = to_params;
    else if (from_params) p = from_params;
    else return;
diff --git a/TMP/st/elementary/src/edje_externals/elm_scrolled_entry.c b/TMP/st/elementary/src/edje_externals/elm_scrolled_entry.c
index f81ca62..c441651 100644
--- a/TMP/st/elementary/src/edje_externals/elm_scrolled_entry.c
+++ b/TMP/st/elementary/src/edje_externals/elm_scrolled_entry.c
@@ -2,6 +2,7 @@
 
 typedef struct _Elm_Params_Entry
 {
+   Elm_Params base;
    const char *text;
    Eina_Bool text_set:1;
    Eina_Bool editable:1;
@@ -17,6 +18,7 @@ external_scrolled_entry_state_set(void *data __UNUSED__, Evas_Object *obj, const
 {
    const Elm_Params_Entry *p;
 
+   external_common_state_set(data, obj, from_params, to_params, pos);
    if (to_params) p = to_params;
    else if (from_params) p = from_params;
    else return;
@@ -125,7 +127,7 @@ external_scrolled_entry_params_parse(void *data __UNUSED__, Evas_Object *obj __U
    Edje_External_Param *param;
    const Eina_List *l;
 
-   mem = calloc(1, sizeof(Elm_Params_Entry));
+   mem = external_common_params_parse(Elm_Params_Entry, data, obj, params);
    if (!mem)
      return NULL;
 
@@ -167,7 +169,7 @@ external_scrolled_entry_params_free(void *params)
 
    if (mem->text)
      eina_stringshare_del(mem->text);
-   free(mem);
+   external_common_params_free(params);
 }
 
 static Edje_External_Param_Info external_scrolled_entry_params[] = {
diff --git a/TMP/st/elementary/src/edje_externals/elm_slider.c b/TMP/st/elementary/src/edje_externals/elm_slider.c
index ba76cd4..99280f6 100644
--- a/TMP/st/elementary/src/edje_externals/elm_slider.c
+++ b/TMP/st/elementary/src/edje_externals/elm_slider.c
@@ -22,6 +22,7 @@ external_slider_state_set(void *data __UNUSED__, Evas_Object *obj, const void *f
 {
    const Elm_Params_Slider *p;
 
+   external_common_state_set(data, obj, from_params, to_params, pos);
    if (to_params) p = to_params;
    else if (from_params) p = from_params;
    else return;
diff --git a/TMP/st/elementary/src/edje_externals/elm_slideshow.c b/TMP/st/elementary/src/edje_externals/elm_slideshow.c
index 569f814..fc4a0bf 100644
--- a/TMP/st/elementary/src/edje_externals/elm_slideshow.c
+++ b/TMP/st/elementary/src/edje_externals/elm_slideshow.c
@@ -2,6 +2,7 @@
 
 typedef struct _Elm_Params_Slideshow
 {
+   Elm_Params base;
    int timeout;
    const char *transition;
    const char *layout;
@@ -19,6 +20,7 @@ external_slideshow_state_set(void *data __UNUSED__, Evas_Object *obj, const void
 {
    const Elm_Params_Slideshow *p;
 
+   external_common_state_set(data, obj, from_params, to_params, pos);
    if (to_params) p = to_params;
    else if (from_params) p = from_params;
    else return;
@@ -126,7 +128,7 @@ external_slideshow_params_parse(void *data, Evas_Object *obj, const Eina_List *p
    Edje_External_Param *param;
    const Eina_List *l;
 
-   mem = calloc(1, sizeof(Elm_Params_Slideshow));
+   mem = external_common_params_parse(Elm_Params_Slideshow, data, obj, params);
    if (!mem)
      return NULL;
 
@@ -165,7 +167,7 @@ static Evas_Object *external_slideshow_content_get(void *data __UNUSED__,
 static void
 external_slideshow_params_free(void *params)
 {
-   return;
+   external_common_params_free(params);
 }
 
 static Edje_External_Param_Info external_slideshow_params[] = {
diff --git a/TMP/st/elementary/src/edje_externals/elm_spinner.c b/TMP/st/elementary/src/edje_externals/elm_spinner.c
index e63e45b..6094201 100644
--- a/TMP/st/elementary/src/edje_externals/elm_spinner.c
+++ b/TMP/st/elementary/src/edje_externals/elm_spinner.c
@@ -2,6 +2,7 @@
 
 typedef struct _Elm_Params_Spinner
 {
+   Elm_Params base;
    const char *label_format;
    double min, max, step, value;
    Eina_Bool min_exists:1;
@@ -17,6 +18,7 @@ external_spinner_state_set(void *data __UNUSED__, Evas_Object *obj, const void *
 {
    const Elm_Params_Spinner *p;
 
+   external_common_state_set(data, obj, from_params, to_params, pos);
    if (to_params) p = to_params;
    else if (from_params) p = from_params;
    else return;
@@ -173,7 +175,7 @@ external_spinner_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUSED__
    Edje_External_Param *param;
    const Eina_List *l;
 
-   mem = calloc(1, sizeof(Elm_Params_Spinner));
+   mem = external_common_params_parse(Elm_Params_Spinner, data, obj, params);
    if (!mem)
      return NULL;
 
@@ -225,7 +227,7 @@ external_spinner_params_free(void *params)
 
    if (mem->label_format)
      eina_stringshare_del(mem->label_format);
-   free(mem);
+   external_common_params_free(params);
 }
 
 static Edje_External_Param_Info external_spinner_params[] = {
diff --git a/TMP/st/elementary/src/edje_externals/elm_thumb.c b/TMP/st/elementary/src/edje_externals/elm_thumb.c
index 311ecc9..c3c1092 100644
--- a/TMP/st/elementary/src/edje_externals/elm_thumb.c
+++ b/TMP/st/elementary/src/edje_externals/elm_thumb.c
@@ -4,6 +4,7 @@
 
 typedef struct _Elm_Params_Thumb
 {
+   Elm_Params base;
    const char *animate;
 } Elm_Params_Thumb;
 
@@ -29,6 +30,7 @@ external_thumb_state_set(void *data __UNUSED__, Evas_Object *obj, const void *fr
 {
    const Elm_Params_Thumb *p;
 
+   external_common_state_set(data, obj, from_params, to_params, pos);
    if (to_params) p = to_params;
    else if (from_params) p = from_params;
    else return;
@@ -91,7 +93,7 @@ external_thumb_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUSED__,
    Edje_External_Param *param;
    const Eina_List *l;
 
-   mem = calloc(1, sizeof(Elm_Params_Thumb));
+   mem = external_common_params_parse(Elm_Params_Thumb, data, obj, params);
    if (!mem)
      return NULL;
 
@@ -118,7 +120,7 @@ external_thumb_params_free(void *params)
 
    if (mem->animate)
      eina_stringshare_del(mem->animate);
-   free(mem);
+   external_common_params_free(params);
 }
 
 static Edje_External_Param_Info external_thumb_params[] =
diff --git a/TMP/st/elementary/src/edje_externals/elm_toggle.c b/TMP/st/elementary/src/edje_externals/elm_toggle.c
index 90c4d2c..f45facf 100644
--- a/TMP/st/elementary/src/edje_externals/elm_toggle.c
+++ b/TMP/st/elementary/src/edje_externals/elm_toggle.c
@@ -16,6 +16,7 @@ external_toggle_state_set(void *data __UNUSED__, Evas_Object *obj, const void *f
 {
    const Elm_Params_Toggle *p;
 
+   external_common_state_set(data, obj, from_params, to_params, pos);
    if (to_params) p = to_params;
    else if (from_params) p = from_params;
    else return;
diff --git a/TMP/st/elementary/src/edje_externals/elm_toolbar.c b/TMP/st/elementary/src/edje_externals/elm_toolbar.c
index 27c6f24..b08714b 100644
--- a/TMP/st/elementary/src/edje_externals/elm_toolbar.c
+++ b/TMP/st/elementary/src/edje_externals/elm_toolbar.c
@@ -2,6 +2,7 @@
 
 typedef struct _Elm_Params_Toolbar
 {
+   Elm_Params base;
    int icon_size;
    Eina_Bool icon_size_exists:1;
    double align;
@@ -13,6 +14,7 @@ external_toolbar_state_set(void *data __UNUSED__, Evas_Object *obj, const void *
 {
    const Elm_Params_Toolbar *p;
 
+   external_common_state_set(data, obj, from_params, to_params, pos);
    if (to_params) p = to_params;
    else if (from_params) p = from_params;
    else return;
@@ -82,7 +84,7 @@ external_toolbar_params_parse(void *data, Evas_Object *obj, const Eina_List *par
    Edje_External_Param *param;
    const Eina_List *l;
 
-   mem = calloc(1, sizeof(Elm_Params_Toolbar));
+   mem = external_common_params_parse(Elm_Params_Toolbar, data, obj, params);
    if (!mem)
      return NULL;
 
@@ -114,7 +116,7 @@ static void
 external_toolbar_params_free(void *params)
 {
    Elm_Params_Toolbar *mem = params;
-   free(mem);
+   external_common_params_free(params);
 }
 
 static Edje_External_Param_Info external_toolbar_params[] = {
diff --git a/TMP/st/elementary/src/edje_externals/private.h b/TMP/st/elementary/src/edje_externals/private.h
index a4b5a88..5133483 100644
--- a/TMP/st/elementary/src/edje_externals/private.h
+++ b/TMP/st/elementary/src/edje_externals/private.h
@@ -6,6 +6,7 @@
 
 typedef struct {
     const char *label;
+    const char *style;
 } Elm_Params;
 
 void external_signal(void *data, Evas_Object *obj, const char *signal, const char *source);
@@ -21,6 +22,20 @@ void external_common_icon_param_parse(Evas_Object **icon, Evas_Object *obj, cons
 
 
 #define DEFINE_EXTERNAL_TYPE(type_name, name)           \
+static Eina_Bool                                        \
+_external_##type_name##_param_set(void *data, Evas_Object *obj, const Edje_External_Param *param) \
+{                                                       \
+   if (external_common_param_set(data, obj, param))     \
+      return EINA_TRUE;                                 \
+   return external_##type_name##_param_set(data, obj, param); \
+}                                                       \
+static Eina_Bool                                        \
+_external_##type_name##_param_get(void *data, const Evas_Object *obj, Edje_External_Param *param) \
+{                                                       \
+   if (external_common_param_get(data, obj, param))     \
+      return EINA_TRUE;                                 \
+   return external_##type_name##_param_get(data, obj, param); \
+}                                                       \
 static const char *                                     \
 external_##type_name##_label_get(void *data __UNUSED__) \
 {                                                       \
@@ -34,8 +49,8 @@ const Edje_External_Type external_##type_name##_type = {\
     .add = external_##type_name##_add,                  \
     .state_set = external_##type_name##_state_set,      \
     .signal_emit = external_signal,                     \
-    .param_set = external_##type_name##_param_set,      \
-    .param_get = external_##type_name##_param_get,      \
+    .param_set = _external_##type_name##_param_set,     \
+    .param_get = _external_##type_name##_param_get,     \
     .params_parse = external_##type_name##_params_parse,\
     .params_free = external_##type_name##_params_free,  \
     .label_get = external_##type_name##_label_get,      \
-- 
1.7.3.1

------------------------------------------------------------------------------
Download new Adobe(R) Flash(R) Builder(TM) 4
The new Adobe(R) Flex(R) 4 and Flash(R) Builder(TM) 4 (formerly 
Flex(R) Builder(TM)) enable the development of rich applications that run
across multiple browsers and platforms. Download your free trials today!
http://p.sf.net/sfu/adobe-dev2dev
_______________________________________________
enlightenment-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to