fixed a leak... patches from trill... need to go thru my mail....

SVN revision: 9281
This commit is contained in:
Carsten Haitzler 2004-03-08 02:43:48 +00:00
parent 8842e181bf
commit 92b6f79c2e
11 changed files with 109 additions and 29 deletions

View File

@ -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();

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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" {

View File

@ -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

View File

@ -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);

View File

@ -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)

View File

@ -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;

View File

@ -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

View File

@ -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:

View File

@ -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", "");
}