From cf4992804500a355f0dba092362d1fcacc250407 Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Fri, 5 Oct 2007 05:12:38 +0000 Subject: [PATCH] cedric's ecore_job_init/shtudown patches. SVN revision: 31972 --- legacy/ecore/src/lib/ecore_job/Ecore_Job.h | 2 ++ legacy/ecore/src/lib/ecore_job/ecore_job.c | 34 ++++++++++++++++++---- legacy/edje/src/lib/edje_main.c | 10 ++++++- legacy/edje/src/lib/edje_message_queue.c | 5 ++++ legacy/emotion/src/lib/emotion_smart.c | 5 ++++ 5 files changed, 50 insertions(+), 6 deletions(-) diff --git a/legacy/ecore/src/lib/ecore_job/Ecore_Job.h b/legacy/ecore/src/lib/ecore_job/Ecore_Job.h index bb2da6c1e4..28af30794e 100644 --- a/legacy/ecore/src/lib/ecore_job/Ecore_Job.h +++ b/legacy/ecore/src/lib/ecore_job/Ecore_Job.h @@ -35,6 +35,8 @@ extern "C" { typedef void Ecore_Job; /**< A job handle */ #endif +EAPI int ecore_job_init(); +EAPI int ecore_job_shutdown(); EAPI Ecore_Job *ecore_job_add(void (*func) (void *data), const void *data); EAPI void *ecore_job_del(Ecore_Job *job); diff --git a/legacy/ecore/src/lib/ecore_job/ecore_job.c b/legacy/ecore/src/lib/ecore_job/ecore_job.c index b5b9636dac..990ad8734e 100644 --- a/legacy/ecore/src/lib/ecore_job/ecore_job.c +++ b/legacy/ecore/src/lib/ecore_job/ecore_job.c @@ -7,6 +7,34 @@ static int _ecore_job_event_handler(void *data, int type, void *ev); static void _ecore_job_event_free(void *data, void *ev); static int ecore_event_job_type = 0; +static int _ecore_init_job_count = 0; +static Ecore_Event_Handler* _ecore_job_handler = NULL; + +EAPI int +ecore_job_init() +{ + if (++_ecore_init_job_count == 1) + { + ecore_init(); + ecore_event_job_type = ecore_event_type_new(); + _ecore_job_handler = ecore_event_handler_add(ecore_event_job_type, _ecore_job_event_handler, NULL); + } + + return _ecore_init_job_count; +} + +EAPI int +ecore_job_shutdown() +{ + if (--_ecore_init_job_count) + return _ecore_init_job_count; + + ecore_event_handler_del(_ecore_job_handler); + _ecore_job_handler = NULL; + ecore_shutdown(); + + return _ecore_init_job_count; +} /** * Add a job to the event queue. @@ -24,11 +52,7 @@ ecore_job_add(void (*func) (void *data), const void *data) Ecore_Job *job; if (!func) return NULL; - if (!ecore_event_job_type) - { - ecore_event_job_type = ecore_event_type_new(); - ecore_event_handler_add(ecore_event_job_type, _ecore_job_event_handler, NULL); - } + job = calloc(1, sizeof(Ecore_Job)); if (!job) return NULL; ECORE_MAGIC_SET(job, ECORE_MAGIC_JOB); diff --git a/legacy/edje/src/lib/edje_main.c b/legacy/edje/src/lib/edje_main.c index 04c08f55bc..a3372443e1 100644 --- a/legacy/edje/src/lib/edje_main.c +++ b/legacy/edje/src/lib/edje_main.c @@ -4,6 +4,8 @@ #include +#include + #include "Edje.h" #include "edje_private.h" @@ -21,6 +23,7 @@ edje_init(void) initted++; if (initted == 1) { + ecore_job_init(); srand(time(NULL)); _edje_edd_setup(); _edje_text_init(); @@ -40,6 +43,10 @@ edje_shutdown(void) initted--; if (initted > 0) return initted; + if (_edje_timer) + ecore_animator_del(_edje_timer); + _edje_timer = NULL; + _edje_file_cache_shutdown(); _edje_message_shutdown(); _edje_edd_free(); @@ -48,7 +55,8 @@ edje_shutdown(void) _edje_text_class_members_free(); _edje_text_class_hash_free(); embryo_shutdown(); - + ecore_job_shutdown(); + return 0; } diff --git a/legacy/edje/src/lib/edje_message_queue.c b/legacy/edje/src/lib/edje_message_queue.c index d2a8bab7b8..2f402c85a5 100644 --- a/legacy/edje/src/lib/edje_message_queue.c +++ b/legacy/edje/src/lib/edje_message_queue.c @@ -124,7 +124,12 @@ void _edje_message_shutdown(void) { _edje_message_queue_clear(); + if (job_loss_timer) + ecore_timer_del(job_loss_timer); + if (job) + ecore_job_del(job); job = NULL; + job_loss_timer = NULL; } void diff --git a/legacy/emotion/src/lib/emotion_smart.c b/legacy/emotion/src/lib/emotion_smart.c index 93b7f4d98c..b081747bb3 100644 --- a/legacy/emotion/src/lib/emotion_smart.c +++ b/legacy/emotion/src/lib/emotion_smart.c @@ -193,12 +193,15 @@ emotion_object_init(Evas_Object *obj, const char *module_filename) sd->seek_pos = 0; sd->len = 0; + ecore_job_init(); + if ((!sd->module) || (!sd->video)) { if (!_emotion_module_open(module_filename, obj, &sd->module, &sd->video)) return 0; } + return 1; } @@ -1183,6 +1186,8 @@ _smart_del(Evas_Object * obj) if (sd->progress.info) free(sd->progress.info); if (sd->ref.file) free(sd->ref.file); free(sd); + + ecore_job_shutdown(); } static void