forked from enlightenment/efl
edje: fix signal comming from box/table part.
Thanks to the report by Jonathan "Watchwolf" Atton. SVN revision: 57299
This commit is contained in:
parent
a8f52f4378
commit
c54cc95085
|
@ -32,3 +32,8 @@
|
||||||
2011-02-10 Cedric BAIL
|
2011-02-10 Cedric BAIL
|
||||||
|
|
||||||
* Fix propagation of recursive events on existing part.
|
* Fix propagation of recursive events on existing part.
|
||||||
|
|
||||||
|
2011-02-24 Cedric BAIL
|
||||||
|
|
||||||
|
* fix signal comming from box/table item to include their
|
||||||
|
index or name correctly.
|
||||||
|
|
|
@ -785,7 +785,7 @@ _edje_object_file_set_internal(Evas_Object *obj, const char *file, const char *g
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
child_ed = _edje_fetch(child_obj);
|
child_ed = _edje_fetch(child_obj);
|
||||||
child_ed->parent = eina_stringshare_add(rp->part->name);
|
child_ed->parent = eina_stringshare_add(rp->part->name);
|
||||||
|
|
||||||
group_path = eina_list_remove(group_path, group_path_entry);
|
group_path = eina_list_remove(group_path, group_path_entry);
|
||||||
eina_stringshare_del(group_path_entry);
|
eina_stringshare_del(group_path_entry);
|
||||||
|
@ -798,10 +798,13 @@ _edje_object_file_set_internal(Evas_Object *obj, const char *file, const char *g
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
pack_it->parent = rp;
|
||||||
|
|
||||||
_edje_object_pack_item_hints_set(child_obj, pack_it);
|
_edje_object_pack_item_hints_set(child_obj, pack_it);
|
||||||
evas_object_show(child_obj);
|
evas_object_show(child_obj);
|
||||||
if (pack_it->name)
|
if (pack_it->name)
|
||||||
evas_object_name_set(child_obj, pack_it->name);
|
evas_object_name_set(child_obj, pack_it->name);
|
||||||
|
|
||||||
if (rp->part->type == EDJE_PART_TYPE_BOX)
|
if (rp->part->type == EDJE_PART_TYPE_BOX)
|
||||||
{
|
{
|
||||||
_edje_real_part_box_append(rp, child_obj);
|
_edje_real_part_box_append(rp, child_obj);
|
||||||
|
@ -1421,26 +1424,77 @@ _edje_find_alias(Eina_Hash *aliased, char *src, int *length)
|
||||||
static void
|
static void
|
||||||
_cb_signal_repeat(void *data, Evas_Object *obj, const char *signal, const char *source)
|
_cb_signal_repeat(void *data, Evas_Object *obj, const char *signal, const char *source)
|
||||||
{
|
{
|
||||||
|
Edje_Pack_Element *pack_it;
|
||||||
Evas_Object *parent;
|
Evas_Object *parent;
|
||||||
Edje *ed;
|
Edje *ed;
|
||||||
Edje *ed_parent;
|
Edje *ed_parent;
|
||||||
char new_src[4096]; /* XXX is this max reasonable? */
|
char new_src[4096]; /* XXX is this max reasonable? */
|
||||||
size_t length_parent = 0;
|
size_t length_parent = 0;
|
||||||
|
size_t length_index = 0;
|
||||||
size_t length_source;
|
size_t length_source;
|
||||||
|
int i = 0;
|
||||||
const char *alias = NULL;
|
const char *alias = NULL;
|
||||||
|
|
||||||
parent = data;
|
parent = data;
|
||||||
ed = _edje_fetch(obj);
|
ed = _edje_fetch(obj);
|
||||||
if (!ed) return;
|
if (!ed) return;
|
||||||
|
|
||||||
|
pack_it = evas_object_data_get(obj, "\377 edje.box_item");
|
||||||
|
if (!pack_it) pack_it = evas_object_data_get(obj, "\377 edje.table_item");
|
||||||
|
if (pack_it)
|
||||||
|
{
|
||||||
|
if (!pack_it->name)
|
||||||
|
{
|
||||||
|
Eina_List *child = NULL;
|
||||||
|
Evas_Object *o;
|
||||||
|
|
||||||
|
if (pack_it->parent->part->type == EDJE_PART_TYPE_BOX)
|
||||||
|
{
|
||||||
|
child = evas_object_box_children_get(pack_it->parent->object);
|
||||||
|
}
|
||||||
|
else if (pack_it->parent->part->type == EDJE_PART_TYPE_TABLE)
|
||||||
|
{
|
||||||
|
child = evas_object_table_children_get(pack_it->parent->object);
|
||||||
|
}
|
||||||
|
|
||||||
|
EINA_LIST_FREE(child, o)
|
||||||
|
{
|
||||||
|
if (o == obj) break;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
eina_list_free(child);
|
||||||
|
|
||||||
|
length_index = 12;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
length_index = strlen(pack_it->name) + 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Replace snprint("%s%c%s") == memcpy + *new_src + memcat */
|
/* Replace snprint("%s%c%s") == memcpy + *new_src + memcat */
|
||||||
if (ed->parent)
|
if (ed->parent)
|
||||||
length_parent = strlen(ed->parent);
|
length_parent = strlen(ed->parent);
|
||||||
length_source = strlen(source);
|
length_source = strlen(source);
|
||||||
if (length_source + length_parent + 2 > sizeof(new_src))
|
if (length_source + length_parent + 2 + length_index > sizeof(new_src))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (ed->parent)
|
if (ed->parent)
|
||||||
memcpy(new_src, ed->parent, length_parent);
|
memcpy(new_src, ed->parent, length_parent);
|
||||||
|
if (ed->parent && length_index)
|
||||||
|
{
|
||||||
|
new_src[length_parent++] = EDJE_PART_PATH_SEPARATOR_INDEXL;
|
||||||
|
if (length_index == 12)
|
||||||
|
length_parent += eina_convert_itoa(i, new_src + length_parent);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
memcpy(new_src + length_parent, pack_it->name, length_index);
|
||||||
|
length_parent += length_index - 2;
|
||||||
|
}
|
||||||
|
new_src[length_parent++] = EDJE_PART_PATH_SEPARATOR_INDEXR;
|
||||||
|
}
|
||||||
|
|
||||||
new_src[length_parent] = EDJE_PART_PATH_SEPARATOR;
|
new_src[length_parent] = EDJE_PART_PATH_SEPARATOR;
|
||||||
memcpy(new_src + length_parent + 1, source, length_source + 1);
|
memcpy(new_src + length_parent + 1, source, length_source + 1);
|
||||||
|
|
||||||
|
|
|
@ -291,6 +291,30 @@ typedef struct _Edje_Part_Description_Spec_Table Edje_Part_Description_Spec_
|
||||||
typedef struct _Edje_Patterns Edje_Patterns;
|
typedef struct _Edje_Patterns Edje_Patterns;
|
||||||
typedef struct _Edje_Part_Box_Animation Edje_Part_Box_Animation;
|
typedef struct _Edje_Part_Box_Animation Edje_Part_Box_Animation;
|
||||||
|
|
||||||
|
typedef struct _Edje Edje;
|
||||||
|
typedef struct _Edje_Real_Part_State Edje_Real_Part_State;
|
||||||
|
typedef struct _Edje_Real_Part_Drag Edje_Real_Part_Drag;
|
||||||
|
typedef struct _Edje_Real_Part_Set Edje_Real_Part_Set;
|
||||||
|
typedef struct _Edje_Real_Part Edje_Real_Part;
|
||||||
|
typedef struct _Edje_Running_Program Edje_Running_Program;
|
||||||
|
typedef struct _Edje_Signal_Callback Edje_Signal_Callback;
|
||||||
|
typedef struct _Edje_Calc_Params Edje_Calc_Params;
|
||||||
|
typedef struct _Edje_Pending_Program Edje_Pending_Program;
|
||||||
|
typedef struct _Edje_Text_Style Edje_Text_Style;
|
||||||
|
typedef struct _Edje_Color_Class Edje_Color_Class;
|
||||||
|
typedef struct _Edje_Text_Class Edje_Text_Class;
|
||||||
|
typedef struct _Edje_Var Edje_Var;
|
||||||
|
typedef struct _Edje_Var_Int Edje_Var_Int;
|
||||||
|
typedef struct _Edje_Var_Float Edje_Var_Float;
|
||||||
|
typedef struct _Edje_Var_String Edje_Var_String;
|
||||||
|
typedef struct _Edje_Var_List Edje_Var_List;
|
||||||
|
typedef struct _Edje_Var_Hash Edje_Var_Hash;
|
||||||
|
typedef struct _Edje_Var_Animator Edje_Var_Animator;
|
||||||
|
typedef struct _Edje_Var_Timer Edje_Var_Timer;
|
||||||
|
typedef struct _Edje_Var_Pool Edje_Var_Pool;
|
||||||
|
typedef struct _Edje_Signal_Source_Char Edje_Signal_Source_Char;
|
||||||
|
typedef struct _Edje_Text_Insert_Filter_Callback Edje_Text_Insert_Filter_Callback;
|
||||||
|
|
||||||
#define EDJE_INF_MAX_W 100000
|
#define EDJE_INF_MAX_W 100000
|
||||||
#define EDJE_INF_MAX_H 100000
|
#define EDJE_INF_MAX_H 100000
|
||||||
|
|
||||||
|
@ -590,6 +614,7 @@ struct _Edje_Part_Collection_Directory_Entry
|
||||||
struct _Edje_Pack_Element
|
struct _Edje_Pack_Element
|
||||||
{
|
{
|
||||||
unsigned char type; /* only GROUP supported for now */
|
unsigned char type; /* only GROUP supported for now */
|
||||||
|
Edje_Real_Part *parent; /* pointer to the table/box that hold it, set at runtime */
|
||||||
const char *name; /* if != NULL, will be set with evas_object_name_set */
|
const char *name; /* if != NULL, will be set with evas_object_name_set */
|
||||||
const char *source; /* group name to use as source for this element */
|
const char *source; /* group name to use as source for this element */
|
||||||
Edje_Size min, prefer, max;
|
Edje_Size min, prefer, max;
|
||||||
|
@ -892,31 +917,6 @@ struct _Edje_Part_Description_External
|
||||||
|
|
||||||
/*----------*/
|
/*----------*/
|
||||||
|
|
||||||
|
|
||||||
typedef struct _Edje Edje;
|
|
||||||
typedef struct _Edje_Real_Part_State Edje_Real_Part_State;
|
|
||||||
typedef struct _Edje_Real_Part_Drag Edje_Real_Part_Drag;
|
|
||||||
typedef struct _Edje_Real_Part_Set Edje_Real_Part_Set;
|
|
||||||
typedef struct _Edje_Real_Part Edje_Real_Part;
|
|
||||||
typedef struct _Edje_Running_Program Edje_Running_Program;
|
|
||||||
typedef struct _Edje_Signal_Callback Edje_Signal_Callback;
|
|
||||||
typedef struct _Edje_Calc_Params Edje_Calc_Params;
|
|
||||||
typedef struct _Edje_Pending_Program Edje_Pending_Program;
|
|
||||||
typedef struct _Edje_Text_Style Edje_Text_Style;
|
|
||||||
typedef struct _Edje_Color_Class Edje_Color_Class;
|
|
||||||
typedef struct _Edje_Text_Class Edje_Text_Class;
|
|
||||||
typedef struct _Edje_Var Edje_Var;
|
|
||||||
typedef struct _Edje_Var_Int Edje_Var_Int;
|
|
||||||
typedef struct _Edje_Var_Float Edje_Var_Float;
|
|
||||||
typedef struct _Edje_Var_String Edje_Var_String;
|
|
||||||
typedef struct _Edje_Var_List Edje_Var_List;
|
|
||||||
typedef struct _Edje_Var_Hash Edje_Var_Hash;
|
|
||||||
typedef struct _Edje_Var_Animator Edje_Var_Animator;
|
|
||||||
typedef struct _Edje_Var_Timer Edje_Var_Timer;
|
|
||||||
typedef struct _Edje_Var_Pool Edje_Var_Pool;
|
|
||||||
typedef struct _Edje_Signal_Source_Char Edje_Signal_Source_Char;
|
|
||||||
typedef struct _Edje_Text_Insert_Filter_Callback Edje_Text_Insert_Filter_Callback;
|
|
||||||
|
|
||||||
struct _Edje_Signal_Source_Char
|
struct _Edje_Signal_Source_Char
|
||||||
{
|
{
|
||||||
EINA_RBTREE;
|
EINA_RBTREE;
|
||||||
|
|
Loading…
Reference in New Issue