hermet pushed a commit to branch master. http://git.enlightenment.org/tools/enventor.git/commit/?id=7e27aeead1c7e5028a31d1ab523103fac9c76167
commit 7e27aeead1c7e5028a31d1ab523103fac9c76167 Author: ChunEon Park <her...@hermet.pe.kr> Date: Tue May 20 16:54:41 2014 +0900 syntax_color: initialize it on the multi-thread. --- src/bin/edc_editor.c | 1 + src/bin/syntax_color.c | 34 +++++++++++++++++++++++++++------- src/include/syntax_color.h | 1 + 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/src/bin/edc_editor.c b/src/bin/edc_editor.c index f78cbdc..9db1ba2 100644 --- a/src/bin/edc_editor.c +++ b/src/bin/edc_editor.c @@ -100,6 +100,7 @@ static Eina_Bool syntax_color_timer_cb(void *data) { edit_data *ed = data; + if (!color_ready(syntax_color_data_get(ed->sh))) return ECORE_CALLBACK_RENEW; syntax_color_apply(ed); ed->syntax_color_timer = NULL; return ECORE_CALLBACK_CANCEL; diff --git a/src/bin/syntax_color.c b/src/bin/syntax_color.c index 0eb9b79..9913572 100644 --- a/src/bin/syntax_color.c +++ b/src/bin/syntax_color.c @@ -30,7 +30,10 @@ struct syntax_color_s Eina_Stringshare *col_comment; Eina_Stringshare *col_define; Eina_Stringshare *cols[COL_NUM]; - syntax_color_group *scg; + syntax_color_group *scg; + Ecore_Thread *thread; + + Eina_Bool ready: 1; }; static Eet_Data_Descriptor *edd_scg = NULL; @@ -144,25 +147,36 @@ color_table_init(color_data *cd) cd->scg = NULL; } -color_data * -color_init(Eina_Strbuf *strbuf) +static void +init_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED) { - color_data *cd = malloc(sizeof(color_data)); - cd->strbuf = strbuf; - cd->cachebuf = eina_strbuf_new(); + color_data *cd = data; eddc_init(); color_load(cd); eddc_term(); - color_table_init(cd); + cd->thread = NULL; + cd->ready = EINA_TRUE; +} + +color_data * +color_init(Eina_Strbuf *strbuf) +{ + color_data *cd = malloc(sizeof(color_data)); + cd->strbuf = strbuf; + cd->cachebuf = eina_strbuf_new(); + cd->thread = ecore_thread_run(init_thread_blocking, NULL, NULL, cd); + return cd; } void color_term(color_data *cd) { + ecore_thread_cancel(cd->thread); + eina_hash_free(cd->color_hash); eina_strbuf_free(cd->cachebuf); @@ -597,3 +611,9 @@ finished: return str; } + +Eina_Bool +color_ready(color_data *cd) +{ + return cd->ready; +} diff --git a/src/include/syntax_color.h b/src/include/syntax_color.h index d235698..fca917b 100644 --- a/src/include/syntax_color.h +++ b/src/include/syntax_color.h @@ -2,4 +2,5 @@ color_data *color_init(Eina_Strbuf *strbuf); void color_term(color_data *cd); const char *color_cancel(color_data *cd, const char *str, int length); const char *color_apply(color_data *cd, const char *str, int length); +Eina_Bool color_ready(color_data *cd); --