edje: resolve user defined string with type

Summary: Resolve Edje_User_Defined string with type (normal/escaped/unescaped)

Reviewers: cedric, jpeg

Differential Revision: https://phab.enlightenment.org/D4219
This commit is contained in:
Jee-Yong Um 2016-08-09 17:29:49 +09:00 committed by Jean-Philippe Andre
parent d5da8d31ce
commit 4fc6d3cf90
3 changed files with 27 additions and 6 deletions

View File

@ -1369,7 +1369,18 @@ _edje_object_file_set_internal(Evas_Object *obj, const Eina_File *file, const ch
break;
case EDJE_USER_STRING:
edje_object_part_text_set(obj, eud->part, eud->u.string.text);
switch (eud->u.string.type)
{
case EDJE_TEXT_TYPE_NORMAL:
edje_object_part_text_set(obj, eud->part, eud->u.string.text);
break;
case EDJE_TEXT_TYPE_ESCAPED:
edje_object_part_text_escaped_set(obj, eud->part, eud->u.string.text);
break;
case EDJE_TEXT_TYPE_UNESCAPED:
edje_object_part_text_unescaped_set(obj, eud->part, eud->u.string.text);
break;
}
eina_stringshare_del(eud->u.string.text);
break;
}

View File

@ -2022,6 +2022,13 @@ struct _Edje_Signal_Callback
Eina_Bool propagate : 1;
};
typedef enum
{
EDJE_TEXT_TYPE_NORMAL,
EDJE_TEXT_TYPE_ESCAPED,
EDJE_TEXT_TYPE_UNESCAPED
} Edje_Text_Type;
struct _Edje_Text_Insert_Filter_Callback
{
const char *part;
@ -2211,6 +2218,7 @@ struct _Edje_User_Defined
union {
struct {
const char *text;
Edje_Text_Type type;
} string;
struct {
Evas_Object *child;

View File

@ -2256,7 +2256,7 @@ _edje_object_part_text_style_user_peek(Eo *obj EINA_UNUSED, Edje *ed, const char
}
static void
_edje_user_define_string(Edje *ed, const char *part, const char *raw_text)
_edje_user_define_string(Edje *ed, const char *part, const char *raw_text, Edje_Text_Type type)
{
/* NOTE: This one is tricky, text is referenced in rp->typedata.text->text for the life of the
rp. So on edje_object_file_set, we should first ref it, before destroying the old
@ -2273,12 +2273,14 @@ _edje_user_define_string(Edje *ed, const char *part, const char *raw_text)
return;
}
eud->u.string.text = raw_text;
eud->u.string.type = type;
return;
}
eud = _edje_user_definition_new(EDJE_USER_STRING, part, ed);
if (!eud) return;
eud->u.string.text = raw_text;
eud->u.string.type = type;
}
EOLIAN Eina_Bool
@ -2298,7 +2300,7 @@ _edje_object_part_text_set(Eo *obj, Edje *ed, const char *part, const char *text
return EINA_TRUE;
}
int_ret = _edje_object_part_text_raw_set(ed, obj, rp, part, text);
_edje_user_define_string(ed, part, rp->typedata.text->text);
_edje_user_define_string(ed, part, rp->typedata.text->text, EDJE_TEXT_TYPE_NORMAL);
return int_ret;
}
@ -2410,12 +2412,12 @@ _edje_object_part_text_escaped_set(Eo *obj, Edje *ed, const char *part, const ch
p++;
}
int_ret = _edje_object_part_text_raw_set(ed, obj, rp, part, eina_strbuf_string_get(sbuf));
_edje_user_define_string(ed, part, rp->typedata.text->text);
_edje_user_define_string(ed, part, rp->typedata.text->text, EDJE_TEXT_TYPE_ESCAPED);
eina_strbuf_free(sbuf);
return int_ret;
}
int_ret = _edje_object_part_text_raw_set(ed, obj, rp, part, text);
_edje_user_define_string(ed, part, rp->typedata.text->text);
_edje_user_define_string(ed, part, rp->typedata.text->text, EDJE_TEXT_TYPE_ESCAPED);
return int_ret;
}
@ -2548,7 +2550,7 @@ _edje_object_part_text_unescaped_set(Eo *obj, Edje *ed, const char *part, const
int_ret = _edje_object_part_text_raw_set(ed, obj, rp, part, text);
free(text);
}
_edje_user_define_string(ed, part, rp->typedata.text->text);
_edje_user_define_string(ed, part, rp->typedata.text->text, EDJE_TEXT_TYPE_UNESCAPED);
return int_ret;
}