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

-- 


Reply via email to