diff --git a/legacy/edje/src/lib/edje_embryo.c b/legacy/edje/src/lib/edje_embryo.c index fc46102b29..e95359f7a2 100644 --- a/legacy/edje/src/lib/edje_embryo.c +++ b/legacy/edje/src/lib/edje_embryo.c @@ -2568,7 +2568,7 @@ _edje_embryo_fn_external_param_get_int(Embryo_Program *ep, Embryo_Cell *params) eep.name = param_name; eep.type = EDJE_EXTERNAL_PARAM_TYPE_INT; eep.i = 0; - _edje_external_param_get(rp->swallowed_object, &eep); + _edje_external_param_get(NULL, rp, &eep); return eep.i; } @@ -2594,7 +2594,7 @@ _edje_embryo_fn_external_param_set_int(Embryo_Program *ep, Embryo_Cell *params) eep.name = param_name; eep.type = EDJE_EXTERNAL_PARAM_TYPE_INT; eep.i = params[3]; - return _edje_external_param_set(rp->swallowed_object, &eep); + return _edje_external_param_set(NULL, rp, &eep); } /* Float:external_param_get_float(id, param_name[]) */ @@ -2620,7 +2620,7 @@ _edje_embryo_fn_external_param_get_float(Embryo_Program *ep, Embryo_Cell *params eep.name = param_name; eep.type = EDJE_EXTERNAL_PARAM_TYPE_DOUBLE; eep.d = 0.0; - _edje_external_param_get(rp->swallowed_object, &eep); + _edje_external_param_get(NULL, rp, &eep); v = eep.d; return EMBRYO_FLOAT_TO_CELL(v); } @@ -2647,7 +2647,7 @@ _edje_embryo_fn_external_param_set_float(Embryo_Program *ep, Embryo_Cell *params eep.name = param_name; eep.type = EDJE_EXTERNAL_PARAM_TYPE_DOUBLE; eep.d = EMBRYO_CELL_TO_FLOAT(params[3]); - return _edje_external_param_set(rp->swallowed_object, &eep); + return _edje_external_param_set(NULL, rp, &eep); } /* external_param_get_strlen(id, param_name[]) */ @@ -2672,7 +2672,7 @@ _edje_embryo_fn_external_param_get_strlen(Embryo_Program *ep, Embryo_Cell *param eep.name = param_name; eep.type = EDJE_EXTERNAL_PARAM_TYPE_STRING; eep.s = NULL; - _edje_external_param_get(rp->swallowed_object, &eep); + _edje_external_param_get(NULL, rp, &eep); if (!eep.s) return 0; return strlen(eep.s); } @@ -2703,7 +2703,7 @@ _edje_embryo_fn_external_param_get_str(Embryo_Program *ep, Embryo_Cell *params) eep.name = param_name; eep.type = EDJE_EXTERNAL_PARAM_TYPE_STRING; eep.s = NULL; - _edje_external_param_get(rp->swallowed_object, &eep); + _edje_external_param_get(NULL, rp, &eep); if (!eep.s) goto error; src_len = strlen(eep.s); if (src_len < dst_len) @@ -2748,7 +2748,7 @@ _edje_embryo_fn_external_param_set_str(Embryo_Program *ep, Embryo_Cell *params) GETSTR(val, params[3]); if (!val) return 0; eep.s = val; - return _edje_external_param_set(rp->swallowed_object, &eep); + return _edje_external_param_set(NULL, rp, &eep); } /* external_param_get_choice_len(id, param_name[]) */ @@ -2773,7 +2773,7 @@ _edje_embryo_fn_external_param_get_choice_len(Embryo_Program *ep, Embryo_Cell *p eep.name = param_name; eep.type = EDJE_EXTERNAL_PARAM_TYPE_CHOICE; eep.s = NULL; - _edje_external_param_get(rp->swallowed_object, &eep); + _edje_external_param_get(NULL, rp, &eep); if (!eep.s) return 0; return strlen(eep.s); } @@ -2804,7 +2804,7 @@ _edje_embryo_fn_external_param_get_choice(Embryo_Program *ep, Embryo_Cell *param eep.name = param_name; eep.type = EDJE_EXTERNAL_PARAM_TYPE_CHOICE; eep.s = NULL; - _edje_external_param_get(rp->swallowed_object, &eep); + _edje_external_param_get(NULL, rp, &eep); if (!eep.s) goto error; src_len = strlen(eep.s); if (src_len < dst_len) @@ -2849,7 +2849,7 @@ _edje_embryo_fn_external_param_set_choice(Embryo_Program *ep, Embryo_Cell *param GETSTR(val, params[3]); if (!val) return 0; eep.s = val; - return _edje_external_param_set(rp->swallowed_object, &eep); + return _edje_external_param_set(NULL, rp, &eep); } /* external_param_get_bool(id, param_name[]) */ @@ -2874,7 +2874,7 @@ _edje_embryo_fn_external_param_get_bool(Embryo_Program *ep, Embryo_Cell *params) eep.name = param_name; eep.type = EDJE_EXTERNAL_PARAM_TYPE_BOOL; eep.i = 0; - _edje_external_param_get(rp->swallowed_object, &eep); + _edje_external_param_get(NULL, rp, &eep); return eep.i; } @@ -2900,7 +2900,7 @@ _edje_embryo_fn_external_param_set_bool(Embryo_Program *ep, Embryo_Cell *params) eep.name = param_name; eep.type = EDJE_EXTERNAL_PARAM_TYPE_BOOL; eep.i = params[3]; - return _edje_external_param_set(rp->swallowed_object, &eep); + return _edje_external_param_set(NULL, rp, &eep); } void diff --git a/legacy/edje/src/lib/edje_external.c b/legacy/edje/src/lib/edje_external.c index dbb87e11ba..c4bd80de21 100644 --- a/legacy/edje/src/lib/edje_external.c +++ b/legacy/edje/src/lib/edje_external.c @@ -125,7 +125,7 @@ edje_object_part_external_param_set(Evas_Object *obj, const char *part, const Ed return EINA_FALSE; } - return _edje_external_param_set(rp->swallowed_object, param); + return _edje_external_param_set(obj, rp, param); } /** @@ -174,7 +174,7 @@ edje_object_part_external_param_get(const Evas_Object *obj, const char *part, Ed return EINA_FALSE; } - return _edje_external_param_get(rp->swallowed_object, param); + return _edje_external_param_get(obj, rp, param); } @@ -585,12 +585,23 @@ _edje_external_signal_emit(Evas_Object *obj, const char *emission, const char *s } Eina_Bool -_edje_external_param_set(Evas_Object *obj, const Edje_External_Param *param) +_edje_external_param_set(Evas_Object *obj, Edje_Real_Part *rp, const Edje_External_Param *param) { - Edje_External_Type *type = evas_object_data_get(obj, "Edje_External_Type"); + Evas_Object *swallowed_object = rp->swallowed_object; + Edje_External_Type *type = evas_object_data_get(swallowed_object, "Edje_External_Type"); if (!type) { - ERR("no external type for object %p", obj); + if ((rp->part->type == EDJE_PART_TYPE_TEXT) || + (rp->part->type == EDJE_PART_TYPE_TEXTBLOCK)) + { + if ((param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING) && + (!strcmp (param->name, "text")) && (obj)) + { + return edje_object_part_text_set(obj, rp->part->name, param->s); + } + } + + ERR("no external type for object %p", swallowed_object); return EINA_FALSE; } if (!type->param_set) @@ -599,16 +610,28 @@ _edje_external_param_set(Evas_Object *obj, const Edje_External_Param *param) type->module_name, type->module); return EINA_FALSE; } - return type->param_set(type->data, obj, param); + return type->param_set(type->data, swallowed_object, param); } Eina_Bool -_edje_external_param_get(const Evas_Object *obj, Edje_External_Param *param) +_edje_external_param_get(const Evas_Object *obj, Edje_Real_Part *rp, Edje_External_Param *param) { - Edje_External_Type *type = evas_object_data_get(obj, "Edje_External_Type"); + Evas_Object *swallowed_object = rp->swallowed_object; + Edje_External_Type *type = evas_object_data_get(swallowed_object, "Edje_External_Type"); if (!type) { - ERR("no external type for object %p", obj); + if ((rp->part->type == EDJE_PART_TYPE_TEXT) || + (rp->part->type == EDJE_PART_TYPE_TEXTBLOCK)) + { + const char *text; + param->type = EDJE_EXTERNAL_PARAM_TYPE_STRING; + param->name = "text"; + text = edje_object_part_text_get(obj, rp->part->name); + strcpy (param->s, text); + return EINA_TRUE; + } + + ERR("no external type for object %p", swallowed_object); return EINA_FALSE; } if (!type->param_get) @@ -617,7 +640,7 @@ _edje_external_param_get(const Evas_Object *obj, Edje_External_Param *param) type->module_name, type->module); return EINA_FALSE; } - return type->param_get(type->data, obj, param); + return type->param_get(type->data, swallowed_object, param); } Evas_Object* diff --git a/legacy/edje/src/lib/edje_private.h b/legacy/edje/src/lib/edje_private.h index 7dee495405..98c293bc3d 100644 --- a/legacy/edje/src/lib/edje_private.h +++ b/legacy/edje/src/lib/edje_private.h @@ -1770,8 +1770,8 @@ void _edje_external_init(); void _edje_external_shutdown(); Evas_Object *_edje_external_type_add(const char *type_name, Evas *evas, Evas_Object *parent, const Eina_List *params, const char *part_name); void _edje_external_signal_emit(Evas_Object *obj, const char *emission, const char *source); -Eina_Bool _edje_external_param_set(Evas_Object *obj, const Edje_External_Param *param) EINA_ARG_NONNULL(1, 2); -Eina_Bool _edje_external_param_get(const Evas_Object *obj, Edje_External_Param *param) EINA_ARG_NONNULL(1, 2); +Eina_Bool _edje_external_param_set(Evas_Object *obj, Edje_Real_Part *rp, const Edje_External_Param *param) EINA_ARG_NONNULL(1, 2); +Eina_Bool _edje_external_param_get(const Evas_Object *obj, Edje_Real_Part *rp, Edje_External_Param *param) EINA_ARG_NONNULL(1, 2); Evas_Object *_edje_external_content_get(const Evas_Object *obj, const char *content) EINA_ARG_NONNULL(1, 2); void _edje_external_params_free(Eina_List *params, Eina_Bool free_strings); void _edje_external_recalc_apply(Edje *ed, Edje_Real_Part *ep, diff --git a/legacy/edje/src/lib/edje_program.c b/legacy/edje/src/lib/edje_program.c index 03328dedce..24724096d1 100644 --- a/legacy/edje/src/lib/edje_program.c +++ b/legacy/edje/src/lib/edje_program.c @@ -1387,17 +1387,18 @@ _edje_external_param_info_get(const Evas_Object *obj, const char *name) } static Edje_External_Param * -_edje_param_external_get(const Evas_Object *obj, const char *name, Edje_External_Param *param) +_edje_param_external_get(Edje_Real_Part *rp, const char *name, Edje_External_Param *param) { + Evas_Object *swallowed_object = rp->swallowed_object; const Edje_External_Param_Info *info; - info = _edje_external_param_info_get(obj, name); + info = _edje_external_param_info_get(swallowed_object, name); if (!info) return NULL; memset(param, 0, sizeof(*param)); param->name = info->name; param->type = info->type; - if (!_edje_external_param_get(obj, param)) return NULL; + if (!_edje_external_param_get(NULL, rp, param)) return NULL; return param; } @@ -1999,7 +2000,7 @@ _edje_param_copy(Edje_Real_Part *src_part, const char *src_param, Edje_Real_Part if (src_part->part->type == EDJE_PART_TYPE_EXTERNAL) { if (!_edje_param_external_get - (src_part->swallowed_object, src_param, &val)) + (src_part, src_param, &val)) { ERR("cannot get parameter '%s' of part '%s'", src_param, src_part->part->name); @@ -2034,7 +2035,7 @@ _edje_param_copy(Edje_Real_Part *src_part, const char *src_param, Edje_Real_Part if (dst_part->part->type == EDJE_PART_TYPE_EXTERNAL) { val.name = dst_param; - if (!_edje_external_param_set(dst_part->swallowed_object, &val)) + if (!_edje_external_param_set(NULL, dst_part, &val)) { ERR("failed to set parameter '%s' (%s) of part '%s'", dst_param, edje_external_param_type_str(dst_info->type), @@ -2099,7 +2100,7 @@ _edje_param_set(Edje_Real_Part *part, const char *param, const char *value) if (part->part->type == EDJE_PART_TYPE_EXTERNAL) { val.name = param; - if (!_edje_external_param_set(part->swallowed_object, &val)) + if (!_edje_external_param_set(NULL, part, &val)) { ERR("failed to set parameter '%s' (%s) of part '%s'", param, edje_external_param_type_str(info->type),