forked from enlightenment/efl
* edje: fix signal comming from aliased part.
I needed to bump minor file format version, but it will only change behaviour for people using alias for part and they couldn't use the signal emitted by them. SVN revision: 53305
This commit is contained in:
parent
ed83a01ea0
commit
26ba1c03e3
|
@ -2015,13 +2015,21 @@ static void
|
|||
st_collections_group_parts_alias(void)
|
||||
{
|
||||
Edje_Part_Collection *pc;
|
||||
const char *alias;
|
||||
const char *aliased;
|
||||
|
||||
check_arg_count(2);
|
||||
|
||||
pc = eina_list_data_get(eina_list_last(edje_collections));
|
||||
|
||||
alias = parse_str(0);
|
||||
aliased = parse_str(1);
|
||||
|
||||
if (!pc->alias) pc->alias = eina_hash_string_small_new(NULL);
|
||||
eina_hash_add(pc->alias, parse_str(0), parse_str(1));
|
||||
eina_hash_add(pc->alias, alias, aliased);
|
||||
|
||||
if (!pc->aliased) pc->aliased = eina_hash_string_small_new(NULL);
|
||||
eina_hash_add(pc->aliased, aliased, alias);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -777,6 +777,7 @@ _edje_edd_init(void)
|
|||
EET_DATA_DESCRIPTOR_ADD_HASH(_edje_edd_edje_part_collection, Edje_Part_Collection, "data", data, _edje_edd_edje_string);
|
||||
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection, Edje_Part_Collection, "id", id, EET_T_INT);
|
||||
EET_DATA_DESCRIPTOR_ADD_HASH_STRING(_edje_edd_edje_part_collection, Edje_Part_Collection, "alias", alias);
|
||||
EET_DATA_DESCRIPTOR_ADD_HASH_STRING(_edje_edd_edje_part_collection, Edje_Part_Collection, "aliased", aliased);
|
||||
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection, Edje_Part_Collection, "prop.min.w", prop.min.w, EET_T_INT);
|
||||
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection, Edje_Part_Collection, "prop.min.h", prop.min.h, EET_T_INT);
|
||||
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection, Edje_Part_Collection, "prop.max.w", prop.max.w, EET_T_INT);
|
||||
|
|
|
@ -1346,14 +1346,38 @@ _edje_object_pack_item_hints_set(Evas_Object *obj, Edje_Pack_Element *it)
|
|||
evas_object_resize(obj, w, h);
|
||||
}
|
||||
|
||||
static const char *
|
||||
_edje_find_alias(Eina_Hash *aliased, char *src, int *length)
|
||||
{
|
||||
const char *alias;
|
||||
char *search;
|
||||
|
||||
*length = strlen(src);
|
||||
if (*length == 0) return NULL;
|
||||
|
||||
alias = eina_hash_find(aliased, src);
|
||||
if (alias) return alias;
|
||||
|
||||
search = strrchr(src, EDJE_PART_PATH_SEPARATOR);
|
||||
if (search == NULL) return NULL;
|
||||
|
||||
*search = '\0';
|
||||
alias = _edje_find_alias(aliased, src, length);
|
||||
*search = EDJE_PART_PATH_SEPARATOR;
|
||||
|
||||
return alias;
|
||||
}
|
||||
|
||||
static void
|
||||
_cb_signal_repeat(void *data, Evas_Object *obj, const char *signal, const char *source)
|
||||
{
|
||||
Evas_Object *parent;
|
||||
Edje *ed;
|
||||
Edje *ed_parent;
|
||||
char new_src[4096]; /* XXX is this max reasonable? */
|
||||
size_t length_parent = 0;
|
||||
size_t length_source;
|
||||
const char *alias = NULL;
|
||||
|
||||
parent = data;
|
||||
ed = _edje_fetch(obj);
|
||||
|
@ -1370,5 +1394,36 @@ _cb_signal_repeat(void *data, Evas_Object *obj, const char *signal, const char *
|
|||
new_src[length_parent] = EDJE_PART_PATH_SEPARATOR;
|
||||
memcpy(new_src + length_parent + 1, source, length_source + 1);
|
||||
|
||||
edje_object_signal_emit(parent, signal, new_src);
|
||||
/* Handle alias renaming */
|
||||
ed_parent = _edje_fetch(parent);
|
||||
if (ed_parent && ed_parent->collection && ed_parent->collection->aliased)
|
||||
{
|
||||
int length;
|
||||
|
||||
alias = _edje_find_alias(ed_parent->collection->aliased, new_src, &length);
|
||||
|
||||
if (alias)
|
||||
{
|
||||
int origin;
|
||||
|
||||
/* Add back the end of the source */
|
||||
origin = strlen(new_src);
|
||||
length ++; /* Remove the trailing ':' from the count */
|
||||
if (origin > length)
|
||||
{
|
||||
char *tmp;
|
||||
int alias_length;
|
||||
|
||||
alias_length = strlen(alias);
|
||||
tmp = alloca(alias_length + origin - length + 2);
|
||||
memcpy(tmp, alias, alias_length);
|
||||
tmp[alias_length] = EDJE_PART_PATH_SEPARATOR;
|
||||
memcpy(tmp + alias_length + 1, new_src + length, origin - length + 1);
|
||||
|
||||
alias = tmp;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
edje_object_signal_emit(parent, signal, alias ? alias : new_src);
|
||||
}
|
||||
|
|
|
@ -172,7 +172,7 @@ struct _Edje_Smart_Api
|
|||
/* increment this when you add new feature to edje file format without
|
||||
* breaking backward compatibility.
|
||||
*/
|
||||
#define EDJE_FILE_MINOR 0
|
||||
#define EDJE_FILE_MINOR 1
|
||||
|
||||
/* FIXME:
|
||||
*
|
||||
|
@ -628,6 +628,7 @@ struct _Edje_Part_Collection
|
|||
int id; /* the collection id */
|
||||
|
||||
Eina_Hash *alias; /* aliasing part */
|
||||
Eina_Hash *aliased; /* invert match of alias */
|
||||
|
||||
struct {
|
||||
Edje_Size min, max;
|
||||
|
|
Loading…
Reference in New Issue