fixed a leak... patches from trill... need to go thru my mail....
SVN revision: 9281
This commit is contained in:
parent
8842e181bf
commit
92b6f79c2e
|
@ -88,6 +88,7 @@ main(int argc, char **argv)
|
|||
edje_init();
|
||||
|
||||
edje_file = mem_alloc(SZ(Edje_File));
|
||||
edje_file->version = EDJE_FILE_VERSION;
|
||||
|
||||
data_setup();
|
||||
compile();
|
||||
|
|
|
@ -1193,7 +1193,7 @@ ob_collections_group_programs_program(void)
|
|||
pc->programs = evas_list_append(pc->programs, ep);
|
||||
ep->id = evas_list_count(pc->programs) - 1;
|
||||
ep->tween.mode = EDJE_TWEEN_MODE_LINEAR;
|
||||
ep->after = -1;
|
||||
ep->after = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1346,10 +1346,16 @@ st_collections_group_programs_program_after(void)
|
|||
pc = evas_list_data(evas_list_last(edje_collections));
|
||||
ep = evas_list_data(evas_list_last(pc->programs));
|
||||
{
|
||||
Edje_Program_After *pa;
|
||||
char *name;
|
||||
|
||||
|
||||
name = parse_str(0);
|
||||
data_queue_program_lookup(pc, name, &(ep->after));
|
||||
|
||||
pa = mem_alloc(SZ(Edje_Program_After));
|
||||
pa->id = -1;
|
||||
ep->after = evas_list_append(ep->after, pa);
|
||||
|
||||
data_queue_program_lookup(pc, name, &(pa->id));
|
||||
free(name);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -490,13 +490,13 @@ list_head_move_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
|||
static void
|
||||
cb (void *data, Evas_Object *o, const char *sig, const char *src)
|
||||
{
|
||||
/* printf("CALLBACK for %p %p \"%s\" \"%s\"\n", data, o, sig, src);*/
|
||||
printf("CALLBACK for %p %p \"%s\" \"%s\"\n", data, o, sig, src);
|
||||
if (!strcmp(sig, "drag"))
|
||||
{
|
||||
double x, y;
|
||||
|
||||
edje_object_part_drag_value_get(o, src, &x, &y);
|
||||
/* printf("Drag %3.3f %3.3f\n", x, y);*/
|
||||
printf("Drag %3.3f %3.3f\n", x, y);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
#define EDJE_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED 4
|
||||
#define EDJE_LOAD_ERROR_CORRUPT_FILE 5
|
||||
#define EDJE_LOAD_ERROR_UNKNOWN_FORMAT 6
|
||||
#define EDJE_LOAD_ERROR_INCOMPATIBLE_FILE 7
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
|
|
|
@ -16,6 +16,7 @@ typedef struct _Edje_Image_Directory Edje_Image_Directory;
|
|||
typedef struct _Edje_Image_Directory_Entry Edje_Image_Directory_Entry;
|
||||
typedef struct _Edje_Program Edje_Program;
|
||||
typedef struct _Edje_Program_Target Edje_Program_Target;
|
||||
typedef struct _Edje_Program_After Edje_Program_After;
|
||||
typedef struct _Edje_Part_Collection_Directory Edje_Part_Collection_Directory;
|
||||
typedef struct _Edje_Part_Collection_Directory_Entry Edje_Part_Collection_Directory_Entry;
|
||||
typedef struct _Edje_Part_Collection Edje_Part_Collection;
|
||||
|
@ -127,6 +128,7 @@ struct _Edje_File
|
|||
|
||||
Evas_Hash *collection_hash;
|
||||
int references;
|
||||
int version;
|
||||
};
|
||||
|
||||
/*----------*/
|
||||
|
@ -180,7 +182,7 @@ struct _Edje_Program /* a conditional program to be run */
|
|||
|
||||
Evas_List *targets; /* list of target parts to apply the state to */
|
||||
|
||||
int after; /* an action id to run at the end of this, for looping */
|
||||
Evas_List *after; /* list of actions to run at the end of this, for looping */
|
||||
};
|
||||
|
||||
struct _Edje_Program_Target /* the target of an action */
|
||||
|
@ -188,6 +190,11 @@ struct _Edje_Program_Target /* the target of an action */
|
|||
int id; /* just the part id no, or action id no */
|
||||
};
|
||||
|
||||
struct _Edje_Program_After /* the action to run after another action */
|
||||
{
|
||||
int id;
|
||||
};
|
||||
|
||||
/*----------*/
|
||||
|
||||
struct _Edje_Part_Collection_Directory
|
||||
|
|
|
@ -7,6 +7,7 @@ Eet_Data_Descriptor *_edje_edd_edje_image_directory = NULL;
|
|||
Eet_Data_Descriptor *_edje_edd_edje_image_directory_entry = NULL;
|
||||
Eet_Data_Descriptor *_edje_edd_edje_program = NULL;
|
||||
Eet_Data_Descriptor *_edje_edd_edje_program_target = NULL;
|
||||
Eet_Data_Descriptor *_edje_edd_edje_program_after = NULL;
|
||||
Eet_Data_Descriptor *_edje_edd_edje_part_collection_directory = NULL;
|
||||
Eet_Data_Descriptor *_edje_edd_edje_part_collection_directory_entry = NULL;
|
||||
Eet_Data_Descriptor *_edje_edd_edje_part_collection = NULL;
|
||||
|
@ -40,6 +41,7 @@ _edje_edd_free(void)
|
|||
FREED(_edje_edd_edje_image_directory_entry);
|
||||
FREED(_edje_edd_edje_program);
|
||||
FREED(_edje_edd_edje_program_target);
|
||||
FREED(_edje_edd_edje_program_after);
|
||||
FREED(_edje_edd_edje_part_collection_directory);
|
||||
FREED(_edje_edd_edje_part_collection_directory_entry);
|
||||
FREED(_edje_edd_edje_part_collection);
|
||||
|
@ -88,6 +90,7 @@ _edje_edd_setup(void)
|
|||
_edje_edd_edje_file =
|
||||
NEWD("Edje_File",
|
||||
Edje_File);
|
||||
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_file, Edje_File, "version", version, EET_T_INT);
|
||||
EET_DATA_DESCRIPTOR_ADD_SUB(_edje_edd_edje_file, Edje_File, "image_dir", image_dir, _edje_edd_edje_image_directory);
|
||||
EET_DATA_DESCRIPTOR_ADD_SUB(_edje_edd_edje_file, Edje_File, "collection_dir", collection_dir, _edje_edd_edje_part_collection_directory);
|
||||
EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_file, Edje_File, "data", data, _edje_edd_edje_data);
|
||||
|
@ -97,7 +100,12 @@ _edje_edd_setup(void)
|
|||
NEWD("Edje_Program_Target",
|
||||
Edje_Program_Target);
|
||||
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program_target, Edje_Program_Target, "id", id, EET_T_INT);
|
||||
|
||||
|
||||
_edje_edd_edje_program_after =
|
||||
NEWD("Edje_Program_After", Edje_Program_After);
|
||||
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program_after,
|
||||
Edje_Program_After, "id", id, EET_T_INT);
|
||||
|
||||
_edje_edd_edje_program =
|
||||
NEWD("Edje_Program",
|
||||
Edje_Program);
|
||||
|
@ -115,8 +123,8 @@ _edje_edd_setup(void)
|
|||
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "tween.mode", tween.mode, EET_T_INT);
|
||||
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "tween.time", tween.time, EET_T_DOUBLE);
|
||||
EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_program, Edje_Program, "targets", targets, _edje_edd_edje_program_target);
|
||||
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "after", after, EET_T_INT);
|
||||
|
||||
EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_program, Edje_Program, "after", after, _edje_edd_edje_program_after);
|
||||
|
||||
_edje_edd_edje_part_image_id =
|
||||
NEWD("Edje_Part_Image_Id",
|
||||
Edje_Part_Image_Id);
|
||||
|
|
|
@ -360,6 +360,14 @@ _edje_file_add(Edje *ed)
|
|||
goto out;
|
||||
}
|
||||
|
||||
if (ed->file->version != EDJE_FILE_VERSION)
|
||||
{
|
||||
_edje_file_free(ed->file);
|
||||
ed->file = NULL;
|
||||
ed->load_error = EDJE_LOAD_ERROR_INCOMPATIBLE_FILE;
|
||||
goto out;
|
||||
}
|
||||
|
||||
ed->file->references = 1;
|
||||
ed->file->path = strdup(ed->path);
|
||||
if (!ed->file->collection_dir)
|
||||
|
@ -577,6 +585,14 @@ _edje_collection_free(Edje *ed, Edje_Part_Collection *ec)
|
|||
pr->targets = evas_list_remove(pr->targets, prt);
|
||||
free(prt);
|
||||
}
|
||||
while (pr->after)
|
||||
{
|
||||
Edje_Program_After *pa;
|
||||
|
||||
pa = pr->after->data;
|
||||
pr->after = evas_list_remove(pr->after, pa);
|
||||
free(pa);
|
||||
}
|
||||
free(pr);
|
||||
}
|
||||
while (ec->parts)
|
||||
|
|
|
@ -55,6 +55,26 @@ _edje_del(Edje *ed)
|
|||
ed->path = NULL;
|
||||
if (ed->part) free(ed->part);
|
||||
ed->part = NULL;
|
||||
if ((ed->actions) || (ed->pending_actions))
|
||||
{
|
||||
_edje_animators = evas_list_remove(_edje_animators, ed);
|
||||
}
|
||||
while (ed->actions)
|
||||
{
|
||||
Edje_Running_Program *runp;
|
||||
|
||||
runp = ed->actions->data;
|
||||
ed->actions = evas_list_remove(ed->actions, runp);
|
||||
free(runp);
|
||||
}
|
||||
while (ed->pending_actions)
|
||||
{
|
||||
Edje_Pending_Program *pp;
|
||||
|
||||
pp = ed->pending_actions->data;
|
||||
ed->pending_actions = evas_list_remove(ed->pending_actions, pp);
|
||||
free(pp);
|
||||
}
|
||||
while (ed->callbacks)
|
||||
{
|
||||
Edje_Signal_Callback *escb;
|
||||
|
|
|
@ -17,6 +17,11 @@
|
|||
|
||||
#include "Edje_Edit.h"
|
||||
|
||||
/* increment this when the EET data descriptors have changed and old
|
||||
* EETs cannot be loaded/used correctly anymore.
|
||||
*/
|
||||
#define EDJE_FILE_VERSION 1
|
||||
|
||||
/* FIXME:
|
||||
*
|
||||
* more example edje files
|
||||
|
|
|
@ -268,17 +268,20 @@ _edje_program_run_iterate(Edje_Running_Program *runp, double tim)
|
|||
if (!ed->walking_actions) free(runp);
|
||||
goto break_prog;
|
||||
}
|
||||
if (runp->program->after >= 0)
|
||||
for (l = runp->program->after; l; l = l->next)
|
||||
{
|
||||
Edje_Program *pr;
|
||||
Edje_Program_After *pa = l->data;
|
||||
|
||||
pr = evas_list_nth(ed->collection->programs,
|
||||
runp->program->after);
|
||||
if (pr) _edje_program_run(ed, pr, 0);
|
||||
if (_edje_block_break(ed))
|
||||
if (pa->id >= 0)
|
||||
{
|
||||
if (!ed->walking_actions) free(runp);
|
||||
goto break_prog;
|
||||
pr = evas_list_nth(ed->collection->programs, pa->id);
|
||||
if (pr) _edje_program_run(ed, pr, 0);
|
||||
if (_edje_block_break(ed))
|
||||
{
|
||||
if (!ed->walking_actions) free(runp);
|
||||
goto break_prog;
|
||||
}
|
||||
}
|
||||
}
|
||||
_edje_thaw(ed);
|
||||
|
@ -330,10 +333,10 @@ _edje_program_end(Edje *ed, Edje_Running_Program *runp)
|
|||
{
|
||||
_edje_anim_count--;
|
||||
ed->actions = evas_list_remove(ed->actions, runp);
|
||||
free(runp);
|
||||
if (!ed->actions)
|
||||
{
|
||||
_edje_animators = evas_list_remove(_edje_animators, ed);
|
||||
free(runp);
|
||||
}
|
||||
}
|
||||
_edje_emit(ed, "program,stop", pname);
|
||||
|
@ -409,7 +412,11 @@ _edje_program_run(Edje *ed, Edje_Program *pr, int force)
|
|||
}
|
||||
}
|
||||
_edje_emit(ed, "program,start", pr->name);
|
||||
if (_edje_block_break(ed)) goto break_prog;
|
||||
if (_edje_block_break(ed))
|
||||
{
|
||||
ed->actions = evas_list_append(ed->actions, runp);
|
||||
goto break_prog;
|
||||
}
|
||||
if (!ed->actions)
|
||||
_edje_animators = evas_list_append(_edje_animators, ed);
|
||||
ed->actions = evas_list_append(ed->actions, runp);
|
||||
|
@ -445,14 +452,18 @@ _edje_program_run(Edje *ed, Edje_Program *pr, int force)
|
|||
if (_edje_block_break(ed)) goto break_prog;
|
||||
_edje_emit(ed, "program,stop", pr->name);
|
||||
if (_edje_block_break(ed)) goto break_prog;
|
||||
if (pr->after >= 0)
|
||||
|
||||
for (l = pr->after; l; l = l->next)
|
||||
{
|
||||
Edje_Program *pr2;
|
||||
|
||||
pr2 = evas_list_nth(ed->collection->programs,
|
||||
pr->after);
|
||||
if (pr2) _edje_program_run(ed, pr2, 0);
|
||||
if (_edje_block_break(ed)) goto break_prog;
|
||||
Edje_Program_After *pa = l->data;
|
||||
|
||||
if (pa->id >= 0)
|
||||
{
|
||||
pr2 = evas_list_nth(ed->collection->programs, pa->id);
|
||||
if (pr2) _edje_program_run(ed, pr2, 0);
|
||||
if (_edje_block_break(ed)) goto break_prog;
|
||||
}
|
||||
}
|
||||
_edje_recalc(ed);
|
||||
}
|
||||
|
@ -591,13 +602,17 @@ _edje_program_run(Edje *ed, Edje_Program *pr, int force)
|
|||
/* && (pr->tween.time > 0.0) && (!ed->no_anim))) */
|
||||
))
|
||||
{
|
||||
if (pr->after >= 0)
|
||||
for (l= pr->after; l; l = l->next)
|
||||
{
|
||||
Edje_Program *pr2;
|
||||
Edje_Program_After *pa = l->data;
|
||||
|
||||
pr2 = evas_list_nth(ed->collection->programs, pr->after);
|
||||
if (pr2) _edje_program_run(ed, pr2, 0);
|
||||
if (_edje_block_break(ed)) goto break_prog;
|
||||
if (pa->id >= 0)
|
||||
{
|
||||
pr2 = evas_list_nth(ed->collection->programs, pa->id);
|
||||
if (pr2) _edje_program_run(ed, pr2, 0);
|
||||
if (_edje_block_break(ed)) goto break_prog;
|
||||
}
|
||||
}
|
||||
}
|
||||
break_prog:
|
||||
|
|
|
@ -316,7 +316,8 @@ _edje_smart_hide(Evas_Object * obj)
|
|||
ed = evas_object_smart_data_get(obj);
|
||||
if (!ed) return;
|
||||
if (!evas_object_visible_get(obj)) return;
|
||||
evas_object_hide(ed->clipper);
|
||||
if ((ed->collection) && (ed->parts))
|
||||
evas_object_hide(ed->clipper);
|
||||
_edje_emit(ed, "hide", "");
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue