Cleanup of last patches and revert my patching mistakes.

Last 2 patches were swapped, I applied them in the wrong order and
missed the rejections, my bad.

I fixed it and also did some cleanup, looks better now.


SVN revision: 33855
This commit is contained in:
Gustavo Sverzut Barbieri 2008-02-26 20:12:00 +00:00
parent c48465c86a
commit 9abfa8f70a
5 changed files with 69 additions and 56 deletions

View File

@ -210,6 +210,25 @@ edje_file_data_get(const char *file, const char *key)
return str;
}
static void
_edje_programs_patterns_clean(Edje *ed)
{
_edje_signals_sources_patterns_clean(&ed->patterns.programs);
}
static void
_edje_programs_patterns_init(Edje *ed)
{
Edje_Signals_Sources_Patterns *ssp = &ed->patterns.programs;
Evas_List *programs = ed->collection->programs;
if (ssp->signals_patterns)
return;
ssp->signals_patterns = edje_match_programs_signal_init(programs);
ssp->sources_patterns = edje_match_programs_source_init(programs);
}
static int
_edje_object_file_set_internal(Evas_Object *obj, const char *file, const char *part, Evas_List *group_path)
{
@ -408,8 +427,7 @@ _edje_object_file_set_internal(Evas_Object *obj, const char *file, const char *p
}
}
ed->patterns.programs.signals_patterns = edje_match_programs_signal_init(ed->collection->programs);
ed->patterns.programs.sources_patterns = edje_match_programs_source_init(ed->collection->programs);
_edje_programs_patterns_init(ed);
n = evas_list_count(ed->collection->programs);
if (n > 0)
@ -603,14 +621,7 @@ _edje_file_del(Edje *ed)
_edje_message_del(ed);
_edje_block_violate(ed);
_edje_var_shutdown(ed);
if (ed->patterns.programs.signals_patterns)
{
edje_match_patterns_free(ed->patterns.programs.signals_patterns);
edje_match_patterns_free(ed->patterns.programs.sources_patterns);
}
ed->patterns.programs.signals_patterns = NULL;
ed->patterns.programs.sources_patterns = NULL;
_edje_programs_patterns_clean(ed);
if (!((ed->file) && (ed->collection))) return;
if ((ed->file) && (ed->collection))
@ -709,14 +720,6 @@ _edje_file_del(Edje *ed)
if (ed->table_programs) free(ed->table_programs);
ed->table_programs = NULL;
ed->table_programs_size = 0;
if (ed->patterns.programs.signals_patterns)
{
edje_match_patterns_free(ed->patterns.programs.signals_patterns);
edje_match_patterns_free(ed->patterns.programs.sources_patterns);
}
ed->patterns.programs.signals_patterns = NULL;
ed->patterns.programs.sources_patterns = NULL;
}
/**
* Used to free the cached data values that are stored in the data_cache

View File

@ -90,7 +90,7 @@ _edje_del(Edje *ed)
return;
}
_edje_message_del(ed);
_edje_clean_callbacks_patterns(ed);
_edje_callbacks_patterns_clean(ed);
_edje_file_del(ed);
if (ed->path) evas_stringshare_del(ed->path);
if (ed->part) evas_stringshare_del(ed->part);
@ -146,11 +146,6 @@ _edje_del(Edje *ed)
if (tc->font) evas_stringshare_del(tc->font);
free(tc);
}
if (ed->patterns.callbacks.signals_patterns)
{
edje_match_patterns_free(ed->patterns.callbacks.signals_patterns);
edje_match_patterns_free(ed->patterns.callbacks.sources_patterns);
}
free(ed);
}

View File

@ -546,3 +546,14 @@ edje_match_patterns_free(Edje_Patterns *ppat)
free(ppat);
}
void
_edje_signals_sources_patterns_clean(Edje_Signals_Sources_Patterns *ssp)
{
if (!ssp->signals_patterns)
return;
edje_match_patterns_free(ssp->signals_patterns);
edje_match_patterns_free(ssp->sources_patterns);
ssp->signals_patterns = NULL;
ssp->sources_patterns = NULL;
}

View File

@ -578,6 +578,14 @@ typedef struct _Edje_Var_Animator Edje_Var_Animator;
typedef struct _Edje_Var_Timer Edje_Var_Timer;
typedef struct _Edje_Var_Pool Edje_Var_Pool;
struct _Edje_Signals_Sources_Patterns
{
Edje_Patterns *signals_patterns;
Edje_Patterns *sources_patterns;
};
typedef struct _Edje_Signals_Sources_Patterns Edje_Signals_Sources_Patterns;
struct _Edje
{
const char *path;
@ -608,14 +616,8 @@ struct _Edje
int table_parts_size;
struct {
struct {
Edje_Patterns *signals_patterns;
Edje_Patterns *sources_patterns;
} callbacks;
struct {
Edje_Patterns *signals_patterns;
Edje_Patterns *sources_patterns;
} programs;
Edje_Signals_Sources_Patterns callbacks;
Edje_Signals_Sources_Patterns programs;
} patterns;
int references;
@ -1028,7 +1030,8 @@ void _edje_program_end(Edje *ed, Edje_Running_Program *runp);
void _edje_program_run(Edje *ed, Edje_Program *pr, int force, const char *ssig, const char *ssrc);
void _edje_emit(Edje *ed, const char *sig, const char *src);
void _edje_emit_handle(Edje *ed, const char *sig, const char *src);
void _edje_clean_callbacks_patterns(Edje *ed);
void _edje_signals_sources_patterns_clean(Edje_Signals_Sources_Patterns *ssp);
void _edje_callbacks_patterns_clean(Edje *ed);
void _edje_text_init(void);
void _edje_text_part_on_add(Edje *ed, Edje_Real_Part *ep);

View File

@ -106,7 +106,7 @@ edje_object_signal_callback_add(Evas_Object *obj, const char *emission, const ch
ed->just_added_callbacks = 1;
}
else
_edje_clean_callbacks_patterns(ed);
_edje_callbacks_patterns_clean(ed);
}
/** Remove a callback from an object
@ -152,7 +152,7 @@ edje_object_signal_callback_del(Evas_Object *obj, const char *emission, const ch
}
else
{
_edje_clean_callbacks_patterns(ed);
_edje_callbacks_patterns_clean(ed);
ed->callbacks = evas_list_remove_list(ed->callbacks, l);
if (escb->signal) evas_stringshare_del(escb->signal);
@ -863,6 +863,25 @@ static int _edje_glob_callback(Edje_Program *pr, void *dt)
return 0;
}
void
_edje_callbacks_patterns_clean(Edje *ed)
{
_edje_signals_sources_patterns_clean(&ed->patterns.callbacks);
}
static void
_edje_callbacks_patterns_init(Edje *ed)
{
Edje_Signals_Sources_Patterns *ssp = &ed->patterns.callbacks;
if (ssp->signals_patterns)
return;
ssp->signals_patterns = edje_match_callback_signal_init(ed->callbacks);
ssp->sources_patterns = edje_match_callback_source_init(ed->callbacks);
}
/* FIXME: what if we delete the evas object??? */
void
_edje_emit_handle(Edje *ed, const char *sig, const char *src)
@ -978,7 +997,7 @@ _edje_emit_cb(Edje *ed, const char *sig, const char *src)
_edje_block(ed);
if (ed->just_added_callbacks)
_edje_clean_callbacks_patterns(ed);
_edje_callbacks_patterns_clean(ed);
ed->walking_callbacks = 1;
@ -986,12 +1005,7 @@ _edje_emit_cb(Edje *ed, const char *sig, const char *src)
{
int r;
if (!ed->patterns.callbacks.signals_patterns)
{
ed->patterns.callbacks.signals_patterns = edje_match_callback_signal_init(ed->callbacks);
ed->patterns.callbacks.sources_patterns = edje_match_callback_source_init(ed->callbacks);
}
_edje_callbacks_patterns_init(ed);
r = edje_match_callback_exec(ed->patterns.callbacks.signals_patterns,
ed->patterns.callbacks.sources_patterns,
sig,
@ -1027,23 +1041,10 @@ _edje_emit_cb(Edje *ed, const char *sig, const char *src)
l = next_l;
}
_edje_clean_callbacks_patterns(ed);
_edje_callbacks_patterns_clean(ed);
}
break_prog:
_edje_unblock(ed);
_edje_thaw(ed);
_edje_unref(ed);
}
void
_edje_clean_callbacks_patterns(Edje *ed)
{
if (ed->patterns.callbacks.signals_patterns)
{
edje_match_patterns_free(ed->patterns.callbacks.signals_patterns);
edje_match_patterns_free(ed->patterns.callbacks.sources_patterns);
ed->patterns.callbacks.signals_patterns = NULL;
ed->patterns.callbacks.sources_patterns = NULL;
}
}