ajwillia-ms pushed a commit to branch master. http://git.enlightenment.org/tools/edi.git/commit/?id=6fd2aed6f1b259068d44a148cb0d8daab2c46b4d
commit 6fd2aed6f1b259068d44a148cb0d8daab2c46b4d Author: Andy Williams <[email protected]> Date: Sun Nov 30 16:25:11 2014 +0000 Update syntax highlighting to run in the background. Hook the highlight runner into ctrl-s so you can get it to re-parse appropriately (this will be slicker with elm_code) --- src/bin/editor/edi_editor.c | 37 ++++++++++++++++++++++++++++++------- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/src/bin/editor/edi_editor.c b/src/bin/editor/edi_editor.c index cd3602e..2fbc1e7 100644 --- a/src/bin/editor/edi_editor.c +++ b/src/bin/editor/edi_editor.c @@ -59,6 +59,9 @@ static void _update_lines(Edi_Editor *editor); static void +_update_highlight(Edi_Editor *editor); + +static void _undo_do(Edi_Editor *editor, Elm_Entry_Change_Info *inf) { if (inf->insert) @@ -170,6 +173,7 @@ _smart_cb_key_down(void *data EINA_UNUSED, Evas *e EINA_UNUSED, else if (!strcmp(ev->key, "s")) { edi_mainview_save(); + _update_highlight(editor); } else if (!strcmp(ev->key, "f")) { @@ -287,6 +291,8 @@ _edi_editor_statusbar_add(Evas_Object *panel, Edi_Editor *editor, Edi_Mainview_I static void _edi_range_color_set(Edi_Editor *editor EINA_UNUSED, Edi_Range range, Edi_Color color) { + ecore_thread_main_loop_begin(); + evas_textblock_cursor_line_set(_format_cursor, range.start.line - 1); evas_textblock_cursor_pos_set(_format_cursor, evas_textblock_cursor_pos_get(_format_cursor) + range.start.col - 1); evas_textblock_cursor_format_prepend(_format_cursor, color); @@ -294,6 +300,8 @@ _edi_range_color_set(Edi_Editor *editor EINA_UNUSED, Edi_Range range, Edi_Color evas_textblock_cursor_line_set(_format_cursor, range.end.line - 1); evas_textblock_cursor_pos_set(_format_cursor, evas_textblock_cursor_pos_get(_format_cursor) + range.end.col - 1); evas_textblock_cursor_format_append(_format_cursor, "</color>"); + + ecore_thread_main_loop_end(); } static void @@ -505,12 +513,14 @@ _clang_load_errors(const char *path EINA_UNUSED, Edi_Editor *editor) } } -static void -_edi_clang_setup(Edi_Editor *editor) +static void * +_edi_clang_setup(void *data) { + Edi_Editor *editor; Evas_Object *textblock; const char *path; + editor = (Edi_Editor *)data; elm_entry_file_get(editor->entry, &path, NULL); /* Clang */ @@ -528,6 +538,8 @@ _edi_clang_setup(Edi_Editor *editor) _clang_load_errors(path, editor); _clang_load_highlighting(path, editor); evas_textblock_cursor_free(_format_cursor); + + return NULL; } /* @@ -541,14 +553,26 @@ _edi_clang_dispose(Edi_Editor *editor) #endif static void -_text_set_done(void *data, Evas_Object *obj EINA_UNUSED, void *source EINA_UNUSED) +_update_highlight(Edi_Editor *editor) { - Edi_Editor *editor = (Edi_Editor *) data; - #if HAVE_LIBCLANG - _edi_clang_setup(editor); + pthread_attr_t attr; + pthread_t thread_id; + + if (pthread_attr_init(&attr) != 0) + perror("pthread_attr_init"); + if (pthread_create(&thread_id, &attr, _edi_clang_setup, editor) != 0) + perror("pthread_create"); #endif +} +static void +_text_set_done(void *data, Evas_Object *obj EINA_UNUSED, void *source EINA_UNUSED) +{ + Edi_Editor *editor = (Edi_Editor *) data; + + _update_lines(editor); + _update_highlight(editor); } EAPI Evas_Object *edi_editor_add(Evas_Object *parent, Edi_Mainview_Item *item) @@ -634,7 +658,6 @@ EAPI Evas_Object *edi_editor_add(Evas_Object *parent, Edi_Mainview_Item *item) (void)!evas_object_key_grab(txt, "z", ctrl, shift | alt, 1); evas_object_data_set(vbox, "editor", editor); - _update_lines(editor); return vbox; } --
