make more use of stringshare and eet alloc methods

SVN revision: 18732
This commit is contained in:
Carsten Haitzler 2005-11-30 15:36:34 +00:00
parent f8dd4d1af7
commit bd0c83af10
7 changed files with 114 additions and 102 deletions

View File

@ -20,14 +20,7 @@ Eet_Data_Descriptor *_edje_edd_edje_part_description = NULL;
Eet_Data_Descriptor *_edje_edd_edje_part_image_id = NULL;
#define NEWD(str, typ) \
eet_data_descriptor_new(str, sizeof(typ), \
(void *(*) (void *))evas_list_next, \
(void *(*) (void *, void *))evas_list_append, \
(void *(*) (void *))evas_list_data, \
(void *(*) (void *))evas_list_free, \
(void (*) (void *, int (*) (void *, const char *, void *, void *), void *))evas_hash_foreach, \
(void *(*) (void *, const char *, void *))evas_hash_add, \
(void (*) (void *))evas_hash_free)
{ eddc.name = str; eddc.size = sizeof(typ); }
#define FREED(eed) \
if (eed) \
@ -61,66 +54,91 @@ _edje_edd_free(void)
void
_edje_edd_setup(void)
{
Eet_Data_Descriptor_Class eddc;
eddc.version = EET_DATA_DESCRIPTOR_CLASS_VERSION;
eddc.func.mem_alloc = NULL;
eddc.func.mem_free = NULL;
eddc.func.str_alloc = evas_stringshare_add;
eddc.func.str_free = evas_stringshare_del;
eddc.func.list_next = evas_list_next;
eddc.func.list_append = evas_list_append;
eddc.func.list_data = evas_list_data;
eddc.func.list_free = evas_list_free;
eddc.func.hash_foreach = evas_hash_foreach;
eddc.func.hash_add = evas_hash_add;
eddc.func.hash_free = evas_hash_free;
/* font directory */
NEWD("Edje_Font_Directory_Entry",
Edje_Font_Directory_Entry);
_edje_edd_edje_font_directory_entry =
NEWD("Edje_Font_Directory_Entry",
Edje_Font_Directory_Entry);
eet_data_descriptor2_new(&eddc);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_font_directory_entry, Edje_Font_Directory_Entry, "entry", entry, EET_T_STRING);
NEWD("Edje_Font_Directory",
Edje_Font_Directory);
_edje_edd_edje_font_directory =
NEWD("Edje_Font_Directory",
Edje_Font_Directory);
eet_data_descriptor2_new(&eddc);
EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_font_directory, Edje_Font_Directory, "entries", entries, _edje_edd_edje_font_directory_entry);
/* image directory */
NEWD("Edje_Image_Directory_Entry",
Edje_Image_Directory_Entry);
_edje_edd_edje_image_directory_entry =
NEWD("Edje_Image_Directory_Entry",
Edje_Image_Directory_Entry);
eet_data_descriptor2_new(&eddc);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_image_directory_entry, Edje_Image_Directory_Entry, "entry", entry, EET_T_STRING);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_image_directory_entry, Edje_Image_Directory_Entry, "source_type", source_type, EET_T_INT);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_image_directory_entry, Edje_Image_Directory_Entry, "source_param", source_param, EET_T_INT);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_image_directory_entry, Edje_Image_Directory_Entry, "id", id, EET_T_INT);
NEWD("Edje_Image_Directory",
Edje_Image_Directory);
_edje_edd_edje_image_directory =
NEWD("Edje_Image_Directory",
Edje_Image_Directory);
eet_data_descriptor2_new(&eddc);
EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_image_directory, Edje_Image_Directory, "entries", entries, _edje_edd_edje_image_directory_entry);
/* collection directory */
NEWD("Edje_Part_Collection_Directory_Entry",
Edje_Part_Collection_Directory_Entry);
_edje_edd_edje_part_collection_directory_entry =
NEWD("Edje_Part_Collection_Directory_Entry",
Edje_Part_Collection_Directory_Entry);
eet_data_descriptor2_new(&eddc);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection_directory_entry, Edje_Part_Collection_Directory_Entry, "entry", entry, EET_T_STRING);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection_directory_entry, Edje_Part_Collection_Directory_Entry, "id", id, EET_T_INT);
NEWD("Edje_Part_Collection_Directory",
Edje_Part_Collection_Directory);
_edje_edd_edje_part_collection_directory =
NEWD("Edje_Part_Collection_Directory",
Edje_Part_Collection_Directory);
eet_data_descriptor2_new(&eddc);
EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_part_collection_directory, Edje_Part_Collection_Directory, "entries", entries, _edje_edd_edje_part_collection_directory_entry);
/* generic data attachment */
NEWD("Edje_Data",
Edje_Data);
_edje_edd_edje_data =
NEWD("Edje_Data",
Edje_Data);
eet_data_descriptor2_new(&eddc);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_data, Edje_Data, "key", key, EET_T_STRING);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_data, Edje_Data, "value", value, EET_T_STRING);
NEWD("Edje_Style_Tag",
Edje_Style_Tag);
_edje_edd_edje_style_tag =
NEWD("Edje_Style_Tag",
Edje_Style_Tag);
eet_data_descriptor2_new(&eddc);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_style_tag, Edje_Style_Tag, "key", key, EET_T_STRING);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_style_tag, Edje_Style_Tag, "value", value, EET_T_STRING);
NEWD("Edje_Style",
Edje_Style);
_edje_edd_edje_style =
NEWD("Edje_Style",
Edje_Style);
eet_data_descriptor2_new(&eddc);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_style, Edje_Style, "name", name, EET_T_STRING);
EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_style, Edje_Style, "tags", tags, _edje_edd_edje_style_tag);
/* the main file directory */
NEWD("Edje_File",
Edje_File);
_edje_edd_edje_file =
NEWD("Edje_File",
Edje_File);
eet_data_descriptor2_new(&eddc);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_file, Edje_File, "compiler", compiler, EET_T_STRING);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_file, Edje_File, "version", version, EET_T_INT);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_file, Edje_File, "feature_ver", feature_ver, EET_T_INT);
@ -131,19 +149,23 @@ _edje_edd_setup(void)
EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_file, Edje_File, "styles", styles, _edje_edd_edje_style);
/* parts & programs - loaded induvidually */
NEWD("Edje_Program_Target",
Edje_Program_Target);
_edje_edd_edje_program_target =
NEWD("Edje_Program_Target",
Edje_Program_Target);
eet_data_descriptor2_new(&eddc);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program_target, Edje_Program_Target, "id", id, EET_T_INT);
NEWD("Edje_Program_After",
Edje_Program_After);
_edje_edd_edje_program_after =
NEWD("Edje_Program_After", Edje_Program_After);
eet_data_descriptor2_new(&eddc);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program_after,
Edje_Program_After, "id", id, EET_T_INT);
NEWD("Edje_Program",
Edje_Program);
_edje_edd_edje_program =
NEWD("Edje_Program",
Edje_Program);
eet_data_descriptor2_new(&eddc);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "id", id, EET_T_INT);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "name", name, EET_T_STRING);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "signal", signal, EET_T_STRING);
@ -160,14 +182,16 @@ _edje_edd_setup(void)
EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_program, Edje_Program, "targets", targets, _edje_edd_edje_program_target);
EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_program, Edje_Program, "after", after, _edje_edd_edje_program_after);
NEWD("Edje_Part_Image_Id",
Edje_Part_Image_Id);
_edje_edd_edje_part_image_id =
NEWD("Edje_Part_Image_Id",
Edje_Part_Image_Id);
eet_data_descriptor2_new(&eddc);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_image_id, Edje_Part_Image_Id, "id", id, EET_T_INT);
NEWD("Edje_Part_Description",
Edje_Part_Description);
_edje_edd_edje_part_description =
NEWD("Edje_Part_Description",
Edje_Part_Description);
eet_data_descriptor2_new(&eddc);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, Edje_Part_Description, "state.name", state.name, EET_T_STRING);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, Edje_Part_Description, "state.value", state.value, EET_T_DOUBLE);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, Edje_Part_Description, "visible", visible, EET_T_CHAR);
@ -240,9 +264,10 @@ _edje_edd_setup(void)
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, Edje_Part_Description, "text.id_text_source", text.id_text_source, EET_T_INT);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, Edje_Part_Description, "text.elipsis", text.elipsis, EET_T_DOUBLE);
NEWD("Edje_Part",
Edje_Part);
_edje_edd_edje_part =
NEWD("Edje_Part",
Edje_Part);
eet_data_descriptor2_new(&eddc);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "name", name, EET_T_STRING);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "id", id, EET_T_INT);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "type", type, EET_T_CHAR);
@ -261,9 +286,10 @@ _edje_edd_setup(void)
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "dragable.counfine_id", dragable.confine_id, EET_T_INT);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "dragable.events_id", dragable.events_id, EET_T_INT);
NEWD("Edje_Part_Collection",
Edje_Part_Collection);
_edje_edd_edje_part_collection =
NEWD("Edje_Part_Collection",
Edje_Part_Collection);
eet_data_descriptor2_new(&eddc);
EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_part_collection, Edje_Part_Collection, "programs", programs, _edje_edd_edje_program);
EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_part_collection, Edje_Part_Collection, "parts", parts, _edje_edd_edje_part);
EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_part_collection, Edje_Part_Collection, "data", data, _edje_edd_edje_data);

View File

@ -402,7 +402,7 @@ edje_file_collection_list(const char *file)
Edje_Part_Collection_Directory_Entry *ce;
ce = l->data;
lst = evas_list_append(lst, strdup(ce->entry));
lst = evas_list_append(lst, evas_stringshare_add(ce->entry));
}
}
_edje_cache_file_unref(edf);
@ -421,7 +421,7 @@ edje_file_collection_list_free(Evas_List *lst)
{
while (lst)
{
if (lst->data) free(lst->data);
if (lst->data) evas_stringshare_del(lst->data);
lst = evas_list_remove(lst, lst->data);
}
}
@ -546,8 +546,8 @@ _edje_file_del(Edje *ed)
/* I think it would be better swallowed objects dont get deleted */
/* evas_object_del(rp->swallowed_object);*/
}
if (rp->text.text) free(rp->text.text);
if (rp->text.font) free(rp->text.font);
if (rp->text.text) evas_stringshare_del(rp->text.text);
if (rp->text.font) evas_stringshare_del(rp->text.font);
if (rp->text.cache.in_str) evas_stringshare_del(rp->text.cache.in_str);
if (rp->text.cache.out_str) evas_stringshare_del(rp->text.cache.out_str);
@ -605,7 +605,7 @@ _edje_file_free(Edje_File *edf)
fe = edf->font_dir->entries->data;
edf->font_dir->entries =
evas_list_remove(edf->font_dir->entries, fe);
if (fe->entry) free(fe->entry);
if (fe->entry) evas_stringshare_del(fe->entry);
free(fe);
}
free(edf->font_dir);
@ -619,7 +619,7 @@ _edje_file_free(Edje_File *edf)
ie = edf->image_dir->entries->data;
edf->image_dir->entries =
evas_list_remove(edf->image_dir->entries, ie);
if (ie->entry) free(ie->entry);
if (ie->entry) evas_stringshare_del(ie->entry);
free(ie);
}
free(edf->image_dir);
@ -633,7 +633,7 @@ _edje_file_free(Edje_File *edf)
ce = edf->collection_dir->entries->data;
edf->collection_dir->entries =
evas_list_remove(edf->collection_dir->entries, ce);
if (ce->entry) free(ce->entry);
if (ce->entry) evas_stringshare_del(ce->entry);
free(ce);
}
free(edf->collection_dir);
@ -646,8 +646,8 @@ _edje_file_free(Edje_File *edf)
edt = edf->data->data;
edf->data = evas_list_remove(edf->data, edt);
if (edt->key) free(edt->key);
if (edt->value) free(edt->value);
if (edt->key) evas_stringshare_del(edt->key);
if (edt->value) evas_stringshare_del(edt->value);
free(edt);
}
}
@ -668,7 +668,7 @@ _edje_file_free(Edje_File *edf)
evas_hash_free(edf->collection_hash);
}
if (edf->path) evas_stringshare_del(edf->path);
if (edf->compiler) free(edf->compiler);
if (edf->compiler) evas_stringshare_del(edf->compiler);
if (edf->collection_cache) _edje_cache_coll_flush(edf);
_edje_textblock_style_cleanup(edf);
free(edf);
@ -683,11 +683,11 @@ _edje_collection_free(Edje_File *edf, Edje_Part_Collection *ec)
pr = ec->programs->data;
ec->programs = evas_list_remove(ec->programs, pr);
if (pr->name) free(pr->name);
if (pr->signal) free(pr->signal);
if (pr->source) free(pr->source);
if (pr->state) free(pr->state);
if (pr->state2) free(pr->state2);
if (pr->name) evas_stringshare_del(pr->name);
if (pr->signal) evas_stringshare_del(pr->signal);
if (pr->source) evas_stringshare_del(pr->source);
if (pr->state) evas_stringshare_del(pr->state);
if (pr->state2) evas_stringshare_del(pr->state2);
while (pr->targets)
{
Edje_Program_Target *prt;
@ -702,7 +702,7 @@ _edje_collection_free(Edje_File *edf, Edje_Part_Collection *ec)
pa = pr->after->data;
pr->after = evas_list_remove(pr->after, pa);
free(pa);
free(pa);
}
free(pr);
}
@ -712,7 +712,7 @@ _edje_collection_free(Edje_File *edf, Edje_Part_Collection *ec)
ep = ec->parts->data;
ec->parts = evas_list_remove(ec->parts, ep);
if (ep->name) free(ep->name);
if (ep->name) evas_stringshare_del(ep->name);
if (ep->default_desc)
{
_edje_collection_free_part_description_free(ep->default_desc);
@ -736,8 +736,8 @@ _edje_collection_free(Edje_File *edf, Edje_Part_Collection *ec)
edt = ec->data->data;
ec->data = evas_list_remove(ec->data, edt);
if (edt->key) free(edt->key);
if (edt->value) free(edt->value);
if (edt->key) evas_stringshare_del(edt->key);
if (edt->value) evas_stringshare_del(edt->value);
free(edt);
}
}
@ -759,7 +759,7 @@ _edje_collection_free(Edje_File *edf, Edje_Part_Collection *ec)
static void
_edje_collection_free_part_description_free(Edje_Part_Description *desc)
{
if (desc->state.name) free(desc->state.name);
if (desc->state.name) evas_stringshare_del(desc->state.name);
while (desc->image.tween_list)
{
Edje_Part_Image_Id *pi;
@ -768,11 +768,11 @@ _edje_collection_free_part_description_free(Edje_Part_Description *desc)
desc->image.tween_list = evas_list_remove(desc->image.tween_list, pi);
free(pi);
}
if (desc->color_class) free(desc->color_class);
if (desc->text.text) free(desc->text.text);
if (desc->text.text_class) free(desc->text.text_class);
if (desc->text.style) free(desc->text.style);
if (desc->text.font) free(desc->text.font);
if (desc->color_class) evas_stringshare_del(desc->color_class);
if (desc->text.text) evas_stringshare_del(desc->text.text);
if (desc->text.text_class) evas_stringshare_del(desc->text.text_class);
if (desc->text.style) evas_stringshare_del(desc->text.style);
if (desc->text.font) evas_stringshare_del(desc->text.font);
free(desc);
}

View File

@ -112,8 +112,8 @@ _edje_del(Edje *ed)
escb = ed->callbacks->data;
ed->callbacks = evas_list_remove(ed->callbacks, escb);
free(escb->signal);
free(escb->source);
if (escb->signal) evas_stringshare_del(escb->signal);
if (escb->source) evas_stringshare_del(escb->source);
free(escb);
}
while (ed->color_classes)

View File

@ -242,8 +242,8 @@ _edje_message_free(Edje_Message *em)
Edje_Message_Signal *emsg;
emsg = (Edje_Message_Signal *)em->msg;
if (emsg->sig) free(emsg->sig);
if (emsg->src) free(emsg->src);
if (emsg->sig) evas_stringshare_del(emsg->sig);
if (emsg->src) evas_stringshare_del(emsg->src);
free(emsg);
}
break;
@ -293,8 +293,8 @@ _edje_message_send(Edje *ed, Edje_Queue queue, Edje_Message_Type type, int id, v
emsg2 = (Edje_Message_Signal *)emsg;
emsg3 = calloc(1, sizeof(Edje_Message_Signal));
if (emsg2->sig) emsg3->sig = strdup(emsg2->sig);
if (emsg2->src) emsg3->src = strdup(emsg2->src);
if (emsg2->sig) emsg3->sig = evas_stringshare_add(emsg2->sig);
if (emsg2->src) emsg3->src = evas_stringshare_add(emsg2->src);
msg = (unsigned char *)emsg3;
}
break;

View File

@ -55,9 +55,9 @@ edje_object_signal_callback_add(Evas_Object *obj, const char *emission, const ch
if (ed->delete_me) return;
escb = calloc(1, sizeof(Edje_Signal_Callback));
if ((emission) && (emission[0]))
escb->signal = strdup(emission);
escb->signal = evas_stringshare_add(emission);
if ((source) && (source[0]))
escb->source = strdup(source);
escb->source = evas_stringshare_add(source);
escb->func = func;
escb->data = data;
ed->callbacks = evas_list_append(ed->callbacks, escb);
@ -107,8 +107,8 @@ edje_object_signal_callback_del(Evas_Object *obj, const char *emission, const ch
else
{
ed->callbacks = evas_list_remove_list(ed->callbacks, l);
free(escb->signal);
free(escb->source);
if (escb->signal) evas_stringshare_del(escb->signal);
if (escb->source) evas_stringshare_del(escb->source);
free(escb);
}
return data;
@ -765,19 +765,14 @@ _edje_emit_handle(Edje *ed, char *sig, char *src)
#ifdef EDJE_PROGRAM_CACHE
l1 = strlen(sig);
l2 = strlen(src);
tmps = malloc(l1 + l2 + 2);
if (tmps)
{
strcpy(tmps, sig);
tmps[l1] = '\377';
strcpy(&(tmps[l1 + 1]), src);
}
tmps = alloca(l1 + l2 + 2);
strcpy(tmps, sig);
tmps[l1] = '\377';
strcpy(&(tmps[l1 + 1]), src);
#endif
done = 0;
#ifdef EDJE_PROGRAM_CACHE
if (tmps)
{
Evas_List *matches;
@ -795,7 +790,6 @@ _edje_emit_handle(Edje *ed, char *sig, char *src)
_edje_program_run(ed, pr, 0, sig, src);
if (_edje_block_break(ed))
{
if (tmps) free(tmps);
goto break_prog;
}
}
@ -825,7 +819,6 @@ _edje_emit_handle(Edje *ed, char *sig, char *src)
if (_edje_block_break(ed))
{
#ifdef EDJE_PROGRAM_CACHE
if (tmps) free(tmps);
evas_list_free(matches);
#endif
goto break_prog;
@ -850,15 +843,8 @@ _edje_emit_handle(Edje *ed, char *sig, char *src)
_edje_emit_cb(ed, sig, src);
if (_edje_block_break(ed))
{
#ifdef EDJE_PROGRAM_CACHE
if (tmps) free(tmps);
#endif
goto break_prog;
}
#ifdef EDJE_PROGRAM_CACHE
if (tmps) free(tmps);
tmps = NULL;
#endif
}
break_prog:
_edje_thaw(ed);
@ -906,8 +892,8 @@ _edje_emit_cb(Edje *ed, char *sig, char *src)
if (escb->delete_me)
{
ed->callbacks = evas_list_remove_list(ed->callbacks, l);
free(escb->signal);
free(escb->source);
if (escb->signal) evas_stringshare_del(escb->signal);
if (escb->source) evas_stringshare_del(escb->source);
free(escb);
}
l = next_l;

View File

@ -65,14 +65,14 @@ _edje_text_part_on_del(Edje *ed, Edje_Part *pt)
if ((pt->default_desc) && (pt->default_desc->text.text_class))
{
_edje_text_class_member_del(ed, pt->default_desc->text.text_class);
free(pt->default_desc->text.text_class);
evas_stringshare_del(pt->default_desc->text.text_class);
pt->default_desc->text.text_class = NULL;
}
if (pt->default_desc && pt->default_desc->color_class)
{
_edje_color_class_member_del(ed, pt->default_desc->color_class);
free (pt->default_desc->color_class);
evas_stringshare_del(pt->default_desc->color_class);
pt->default_desc->color_class = NULL;
}
@ -84,14 +84,14 @@ _edje_text_part_on_del(Edje *ed, Edje_Part *pt)
if (desc->text.text_class)
{
_edje_text_class_member_del(ed, desc->text.text_class);
free(desc->text.text_class);
evas_stringshare_del(desc->text.text_class);
desc->text.text_class = NULL;
}
if (desc->color_class)
{
_edje_color_class_member_del(ed, desc->color_class);
free(desc->color_class);
evas_stringshare_del(desc->color_class);
desc->color_class = NULL;
}
}

View File

@ -512,8 +512,8 @@ edje_object_part_text_set(Evas_Object *obj, const char *part, const char *text)
if ((rp->text.text) && (text) &&
(!strcmp(rp->text.text, text)))
return;
if (rp->text.text) free(rp->text.text);
if (text) rp->text.text = strdup(text);
if (rp->text.text) evas_stringshare_del(rp->text.text);
if (text) rp->text.text = evas_stringshare_add(text);
else rp->text.text = NULL;
ed->dirty = 1;
_edje_recalc(ed);