hermet pushed a commit to branch master.

http://git.enlightenment.org/tools/enventor.git/commit/?id=e93ab4331924c2ea9c16aece4c5c10866b75f0ea

commit e93ab4331924c2ea9c16aece4c5c10866b75f0ea
Author: Hermet Park <[email protected]>
Date:   Fri Jul 1 23:59:17 2016 +0900

    ++ multi file editing feature implementation.
---
 src/bin/file_browser.c     |  38 +++++++++++--
 src/bin/globals.c          |   4 +-
 src/bin/goto.c             |   2 +-
 src/bin/search.c           |   2 +-
 src/bin/setting.c          |   3 +-
 src/lib/Enventor_Legacy.h  |   5 +-
 src/lib/edc_editor.c       |  15 +++---
 src/lib/edc_parser.c       | 132 ++++++++++++++++++++++++++++-----------------
 src/lib/edj_viewer.c       |   1 -
 src/lib/enventor_private.h |   6 +--
 src/lib/enventor_smart.c   |  40 +++++++-------
 11 files changed, 157 insertions(+), 91 deletions(-)

diff --git a/src/bin/file_browser.c b/src/bin/file_browser.c
index 7d5a737..5fa0fb7 100644
--- a/src/bin/file_browser.c
+++ b/src/bin/file_browser.c
@@ -73,19 +73,51 @@ gl_clicked_double_cb(void *data EINA_UNUSED, Evas_Object 
*obj EINA_UNUSED,
         return;
      }
 
-   // Open a double clicked edc file.
+   /* Open a double clicked edc file. */
+
+   //skip non edc file.
    if (!eina_str_has_extension(file->path, "edc")) return;
+
    int selected_file_len = strlen(file->path);
 
-   //Let's check if the file is already opened or not.
+   Enventor_Item *eit;
+   const char *it_file_path;
+
+   //Case 1. main file.
+
+   //FIXME: Probably file browser item may have boolean info for a collection
+   //data. and just check it is enough.
+   eit = enventor_object_main_item_get(base_enventor_get());
+   if (!eit)
+     {
+        EINA_LOG_ERR("No main item??");
+        return;
+     }
+
+   it_file_path = enventor_item_file_get(eit);
+   if (!it_file_path)
+     {
+        EINA_LOG_ERR("No main item file path??");
+        return;
+     }
+   //Ok, This selected file is already openend, let's activate the item.
+   if (strlen(file->name) == strlen(it_file_path) &&
+       !strcmp(file->name, it_file_path))
+     {
+        facade_it_select(eit);
+        return;
+     }
+
+   //Case 2. sub files.
    Eina_List *sub_items =
       (Eina_List *)enventor_object_sub_items_get(base_enventor_get());
    Eina_List *l;
-   Enventor_Item *eit;
    EINA_LIST_FOREACH(sub_items, l, eit)
      {
         const char *it_file_path = enventor_item_file_get(eit);
         if (!it_file_path) continue;
+
+        //Let's check if the file is already opened.
         if (selected_file_len != strlen(it_file_path)) continue;
 
         //Ok, This selected file is already openend, let's activate the item.
diff --git a/src/bin/globals.c b/src/bin/globals.c
index 3ff43c8..da8a7dc 100644
--- a/src/bin/globals.c
+++ b/src/bin/globals.c
@@ -26,7 +26,7 @@ void facade_it_select(Enventor_Item *it)
 
 Enventor_Item *facade_sub_file_add(const char *path)
 {
-   Enventor_Item *it = enventor_object_sub_file_add(base_enventor_get(), path);
+   Enventor_Item *it = enventor_object_sub_item_add(base_enventor_get(), path);
    EINA_SAFETY_ON_NULL_RETURN_VAL(it, NULL);
 
    file_tab_it_add(it);
@@ -39,7 +39,7 @@ Enventor_Item *facade_sub_file_add(const char *path)
 
 Enventor_Item *facade_main_file_set(const char *path)
 {
-   Enventor_Item *it = enventor_object_main_file_set(base_enventor_get(), 
path);
+   Enventor_Item *it = enventor_object_main_item_set(base_enventor_get(), 
path);
    EINA_SAFETY_ON_NULL_RETURN_VAL(it, NULL);
 
    file_tab_clear();
diff --git a/src/bin/goto.c b/src/bin/goto.c
index 4862591..b16c21e 100644
--- a/src/bin/goto.c
+++ b/src/bin/goto.c
@@ -230,7 +230,7 @@ Eina_Bool
 goto_close(void)
 {
    goto_data *gd = g_gd;
-   EINA_SAFETY_ON_NULL_RETURN_VAL(gd, EINA_FALSE);
+   if (!gd) return EINA_FALSE;
 
    //Save last state
    evas_object_geometry_get(gd->win, NULL, NULL, &win_w, &win_h);
diff --git a/src/bin/search.c b/src/bin/search.c
index 9517014..efe3658 100644
--- a/src/bin/search.c
+++ b/src/bin/search.c
@@ -455,7 +455,7 @@ Eina_Bool
 search_close(void)
 {
    search_data *sd = g_sd;
-   EINA_SAFETY_ON_NULL_RETURN_VAL(sd, EINA_FALSE);
+   if (!sd) return EINA_FALSE;
 
    Enventor_Object *enventor = base_enventor_get();
 
diff --git a/src/bin/setting.c b/src/bin/setting.c
index dd5a9dd..099b6c7 100644
--- a/src/bin/setting.c
+++ b/src/bin/setting.c
@@ -265,7 +265,6 @@ Eina_Bool
 setting_is_opened(void)
 {
    setting_data *sd = g_sd;
-   EINA_SAFETY_ON_NULL_RETURN_VAL(sd, EINA_FALSE);
-
+   if (!sd) return EINA_FALSE;
    return EINA_TRUE;
 }
diff --git a/src/lib/Enventor_Legacy.h b/src/lib/Enventor_Legacy.h
index 577e0e3..0f8afc1 100644
--- a/src/lib/Enventor_Legacy.h
+++ b/src/lib/Enventor_Legacy.h
@@ -3,8 +3,9 @@ typedef struct _Enventor_Item_Data Enventor_Item;
 EAPI Evas_Object *enventor_object_add(Evas_Object *parent);
 
 //FIXME: Should be eofied.
-EAPI Enventor_Item *enventor_object_main_file_set(Evas_Object *obj, const char 
*file);
-EAPI Enventor_Item *enventor_object_sub_file_add(Evas_Object *obj, const char 
*file);
+EAPI Enventor_Item *enventor_object_main_item_set(Evas_Object *obj, const char 
*file);
+EAPI Enventor_Item *enventor_object_sub_item_add(Evas_Object *obj, const char 
*file);
+EAPI Enventor_Item *enventor_object_main_item_get(const Evas_Object *obj);
 EAPI const Eina_List *enventor_object_sub_items_get(const Evas_Object *obj);
 EAPI Evas_Object *enventor_item_editor_get(const Enventor_Item *it);
 EAPI const char *enventor_item_file_get(const Enventor_Item *it);
diff --git a/src/lib/edc_editor.c b/src/lib/edc_editor.c
index 4d63d08..4f0e190 100644
--- a/src/lib/edc_editor.c
+++ b/src/lib/edc_editor.c
@@ -62,6 +62,7 @@ struct editor_s
    Eina_Bool ctrl_pressed : 1;
    Eina_Bool on_select_recover : 1;
    Eina_Bool on_save : 1;
+   Eina_Bool main : 1;
 };
 
 /*****************************************************************************/
@@ -755,8 +756,9 @@ edit_cursor_double_clicked_cb(void *data, Evas_Object *obj,
 }
 
 static void
-cur_name_get_cb(void *data, Eina_Stringshare *state_name, double state_value,
-                Eina_Stringshare *part_name, Eina_Stringshare *group_name)
+cur_context_name_get_cb(void *data, Eina_Stringshare *state_name,
+                        double state_value, Eina_Stringshare *part_name,
+                        Eina_Stringshare *group_name)
 {
    edit_data *ed = data;
 
@@ -1257,7 +1259,8 @@ edit_syntax_color_partial_apply(edit_data *ed, double 
interval)
 void
 edit_view_sync(edit_data *ed)
 {
-   parser_cur_state_get(ed->pd, ed->en_edit, cur_name_get_cb, ed);
+   parser_cur_context_get(ed->pd, ed->en_edit, cur_context_name_get_cb, ed,
+                          ed->main);
 }
 
 void
@@ -1333,7 +1336,7 @@ edit_cur_indent_depth_get(edit_data *ed)
 }
 
 edit_data *
-edit_init(Enventor_Object *enventor)
+edit_init(Enventor_Object *enventor, Eina_Bool main)
 {
    edit_data *ed = calloc(1, sizeof(edit_data));
    if (!ed)
@@ -1509,13 +1512,13 @@ edit_cur_paragh_get(edit_data *ed)
 Eina_Stringshare *
 edit_cur_prog_name_get(edit_data *ed)
 {
-   return parser_cur_name_fast_get(ed->en_edit, "program");
+   return parser_cur_context_fast_get(ed->en_edit, "program");
 }
 
 Eina_Stringshare *
 edit_cur_part_name_get(edit_data *ed)
 {
-   return parser_cur_name_fast_get(ed->en_edit, "part");
+   return parser_cur_context_fast_get(ed->en_edit, "part");
 }
 
 int
diff --git a/src/lib/edc_parser.c b/src/lib/edc_parser.c
index b912117..0027a7b 100644
--- a/src/lib/edc_parser.c
+++ b/src/lib/edc_parser.c
@@ -31,7 +31,7 @@ typedef struct parser_attr_s
    attr_value value;
 } parser_attr;
 
-typedef struct cur_name_thread_data_s
+typedef struct cur_context_thread_data_s
 {
    Ecore_Thread *thread;
    char *utf8;
@@ -44,7 +44,8 @@ typedef struct cur_name_thread_data_s
               Eina_Stringshare *part_name, Eina_Stringshare *group_name);
    void *cb_data;
    parser_data *pd;
-} cur_name_td;
+   Eina_Bool collections: 1;  //It contains collections?
+} cur_context_td;
 
 typedef struct type_init_thread_data_s
 {
@@ -69,7 +70,7 @@ typedef struct bracket_thread_data_s
 struct parser_s
 {
    Eina_Inarray *attrs;
-   cur_name_td *cntd;
+   cur_context_td *cntd;
    type_init_td *titd;
    bracket_td *btd;
    Eina_List *macro_list;
@@ -300,15 +301,20 @@ macro_list_free(Eina_List *macro_list)
 }
 
 static void
-cur_state_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED)
+cur_context_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED)
 {
 #define PART_SYNTAX_CNT 14
 
    const char *GROUP = "group";
+   const int GROUP_LEN = 5;
    const char *PARTS = "parts";
+   const int PARTS_LEN = 5;
    const char *PART[PART_SYNTAX_CNT] = { "part", "image", "textblock",
         "swallow", "rect", "group", "spacer", "proxy", "text", "gradient",
         "box", "table", "external", "vector" };
+   const int PART_LEN[PART_SYNTAX_CNT] =
+     { 4, 5, 9, 6, 4, 5, 6, 5, 4, 8, 3, 5, 8, 6};
+
    const char *DESC[2] = { "desc", "description" };
    const int DESC_LEN[2] = { 4, 11 };
    const char *STATE = "state";
@@ -316,14 +322,14 @@ cur_state_thread_blocking(void *data, Ecore_Thread 
*thread EINA_UNUSED)
    const int DEF_STATE_LEN = 7;
 
 
-   cur_name_td *td = data;
+   cur_context_td *td = data;
    char *utf8 = td->utf8;
    int cur_pos = td->cur_pos;
    char *p = utf8;
    char *end = utf8 + cur_pos;
    int i;
    Eina_Bool inside_parts = EINA_FALSE;
-
+   Eina_Bool collections = td->collections;
 
    int bracket = 0;
    const char *group_name = NULL;
@@ -392,17 +398,29 @@ cur_state_thread_blocking(void *data, Ecore_Thread 
*thread EINA_UNUSED)
              bracket--;
              p++;
 
-             if (bracket == 1) group_name = NULL;
-             else if (bracket == 2 && inside_parts == EINA_TRUE) inside_parts 
= EINA_FALSE;
-             else if (bracket == 3) part_name = NULL;
-             else if (bracket == 4) desc_name = NULL;
-
+             if (collections)
+               {
+                  if (bracket == 1) group_name = NULL;
+                  else if (bracket == 2 && inside_parts == EINA_TRUE)
+                    inside_parts = EINA_FALSE;
+                  else if (bracket == 3) part_name = NULL;
+                  else if (bracket == 4) desc_name = NULL;
+               }
+             else
+               {
+                  if (bracket == 0) group_name = NULL;
+                  else if (bracket == 1 && inside_parts == EINA_TRUE)
+                    inside_parts = EINA_FALSE;
+                  else if (bracket == 2) part_name = NULL;
+                  else if (bracket == 3) desc_name = NULL;
+               }
              continue;
           }
         //check block "Parts" in
-        if (bracket == 2)
+        if ((collections && (bracket == 2)) ||
+            (!collections && (bracket == 1)))
           {
-             if (!strncmp(p, PARTS, strlen(PARTS)))
+             if (!strncmp(p, PARTS, PARTS_LEN))
                {
                  inside_parts = EINA_TRUE;
                  p = strstr(p, "{");
@@ -411,16 +429,14 @@ cur_state_thread_blocking(void *data, Ecore_Thread 
*thread EINA_UNUSED)
                }
          }
         //Check Part in
-        if (bracket == 3 && inside_parts == EINA_TRUE)
+        if ((collections && (bracket == 3)) ||
+             (!collections && (bracket == 2)))
           {
              int part_idx = -1;
-             int part_len;
-
               //part ? image ? swallow ? text ? rect ?
              for (i = 0; i < PART_SYNTAX_CNT; i++)
                 {
-                   part_len = strlen(PART[i]);
-                   if (!strncmp(p, PART[i], part_len))
+                   if (!strncmp(p, PART[i], PART_LEN[i]))
                      {
                         part_idx = i;
                         break;
@@ -430,7 +446,7 @@ cur_state_thread_blocking(void *data, Ecore_Thread *thread 
EINA_UNUSED)
               //we got a part!
               if (part_idx != -1)
                 {
-                   p += part_len;
+                   p += PART_LEN[part_idx];
                    char *name_begin = strstr(p, QUOT_UTF8);
                    if (!name_begin) goto end;
                    name_begin += QUOT_UTF8_LEN;
@@ -445,7 +461,8 @@ cur_state_thread_blocking(void *data, Ecore_Thread *thread 
EINA_UNUSED)
                 }
           }
         //Check Description in
-        if (bracket == 4)
+        if ((collections && (bracket == 4)) ||
+            (!collections && (bracket == 3)))
           {
              //description? or desc?
              int desc_idx = -1;
@@ -455,25 +472,37 @@ cur_state_thread_blocking(void *data, Ecore_Thread 
*thread EINA_UNUSED)
              //we got a description!
              if (desc_idx != -1)
                {
-                  desc_name = DEF_STATE_NAME;           /* By default state 
will be */
-                  desc_name_len = DEF_STATE_LEN;        /* recognized as 
"default" 0.0*/
+                  /* By default state will be */
+                  desc_name = DEF_STATE_NAME;
+                  /* recognized as "default" 0.0*/
+                  desc_name_len = DEF_STATE_LEN;
                   value_convert = 0;
 
-                  p += DESC_LEN[desc_idx];              /* skip keyword */
+                  /* skip keyword */
+                  p += DESC_LEN[desc_idx];
                   p = strstr(p, "{");
                   if (!p) goto end;
-                  char *end_brace = strstr(p, "}");     /*Limit size of text 
for processing*/
+                  /*Limit size of text for processing*/
+                  char *end_brace = strstr(p, "}");
                   if (!end_brace)
                      goto end;
 
-                  /* proccessing for "description" keyword with "state" 
attribute */
+                  /* proccessing for "description" keyword with "state"
+                     attribute */
                   if (desc_idx == 1)
                     {
                        char *state = strstr(p, STATE);
-                       if (!state || state > end_brace) /* if name of state 
didn't find, */
-                          continue;                     /* description will 
recognized as default 0.0*/
+                       /* if name of state didn't find, */
+                       if (!state || state > end_brace)
+                         {
+                            /* description will recognized as default 0.0*/
+                            continue;
+                         }
                        else
-                          p += 5;                       /*5 is 
strlen("state");*/
+                         {
+                            /*5 is strlen("state");*/
+                            p += 5;
+                         }
                     }
 
                   char *name_begin = strstr(p, QUOT_UTF8);
@@ -482,15 +511,16 @@ cur_state_thread_blocking(void *data, Ecore_Thread 
*thread EINA_UNUSED)
                   char *end_range = strstr(p, ";");
                   if (!end_range) goto end;
 
-                  if ((name_begin > end_brace) ||     /* if string placed 
outside desc block*/
-                      (name_begin > end_range) ||
+                  /* if string placed outside desc block*/
+                  if ((name_begin > end_brace) || (name_begin > end_range) ||
                       (end_range > end_brace))
-                        continue;
+                    continue;
 
                   /* Exception cases like: desc {image.normal: "img";} */
                   int alpha_present = 0;
                   char *string_itr;
-                  for (string_itr = name_begin; (string_itr > p) && 
(!alpha_present); string_itr--)
+                  for (string_itr = name_begin;
+                       (string_itr > p) && (!alpha_present); string_itr--)
                     alpha_present = isalpha((int)*string_itr);
 
                   if (alpha_present && desc_idx == 0)
@@ -529,11 +559,12 @@ cur_state_thread_blocking(void *data, Ecore_Thread 
*thread EINA_UNUSED)
                }
           }
         //Check Group in. Probably inside of collections or the most outside.
-        if (bracket < 2)
+        if ((collections && (bracket == 1)) ||
+            (!collections && (bracket == 0)))
           {
-             if (!strncmp(p, GROUP, strlen(GROUP)))
+             if (!strncmp(p, GROUP, GROUP_LEN))
                {
-                  p += strlen(GROUP);
+                  p += GROUP_LEN;
 
                   char *name_end = strstr(p, SEMICOL_UTF8);
                   if (!name_end) goto end;
@@ -568,7 +599,6 @@ cur_state_thread_blocking(void *data, Ecore_Thread *thread 
EINA_UNUSED)
           }
         p++;
      }
-
    if (part_name)
      part_name = eina_stringshare_add_length(part_name, part_name_len);
    if (desc_name)
@@ -598,9 +628,9 @@ end:
 }
 
 static void
-cur_name_thread_end(void *data, Ecore_Thread *thread EINA_UNUSED)
+cur_context_thread_end(void *data, Ecore_Thread *thread EINA_UNUSED)
 {
-   cur_name_td *td = data;
+   cur_context_td *td = data;
    td->cb(td->cb_data, td->state_name, td->state_value,  td->part_name, 
td->group_name);
    td->pd->cntd = NULL;
    eina_stringshare_del(td->state_name);
@@ -610,9 +640,9 @@ cur_name_thread_end(void *data, Ecore_Thread *thread 
EINA_UNUSED)
 }
 
 static void
-cur_name_thread_cancel(void *data, Ecore_Thread *thread EINA_UNUSED)
+cur_context_thread_cancel(void *data, Ecore_Thread *thread EINA_UNUSED)
 {
-   cur_name_td *td = data;
+   cur_context_td *td = data;
    if (td->pd) td->pd->cntd = NULL;
    eina_stringshare_del(td->state_name);
    eina_stringshare_del(td->part_name);
@@ -1290,7 +1320,7 @@ group_beginning_pos_get(const char* source, const char 
*group_name)
       name += quot_len;
       pos = strstr(name, quot);
       if (!pos) return NULL;
-      if (!strncmp(name, group_name, strlen(group_name)))
+      if (!strncmp(name, group_name, 5))
         return pos;
       pos = strstr(++pos,  GROUP_SYNTAX_NAME);
    }
@@ -1720,7 +1750,7 @@ parser_paragh_name_get(parser_data *pd EINA_UNUSED, 
Evas_Object *entry)
 }
 
 Eina_Stringshare*
-parser_cur_name_fast_get(Evas_Object *entry, const char *scope)
+parser_cur_context_fast_get(Evas_Object *entry, const char *scope)
 {
    const char *quot = QUOT_UTF8;
    const int quot_len = QUOT_UTF8_LEN;
@@ -1794,11 +1824,12 @@ end:
    return name;
 }
 
-
 void
-parser_cur_state_get(parser_data *pd, Evas_Object *entry,
-                     void (*cb)(void *data, Eina_Stringshare *state_name, 
double state_value,
-                     Eina_Stringshare *part_name, Eina_Stringshare 
*group_name), void *data)
+parser_cur_context_get(parser_data *pd, Evas_Object *entry,
+                       void (*cb)(void *data, Eina_Stringshare *state_name,
+                       double state_value, Eina_Stringshare *part_name,
+                       Eina_Stringshare *group_name), void *data,
+                       Eina_Bool collections)
 {
    if (pd->cntd) ecore_thread_cancel(pd->cntd->thread);
 
@@ -1808,7 +1839,7 @@ parser_cur_state_get(parser_data *pd, Evas_Object *entry,
    char *utf8 = elm_entry_markup_to_utf8(text);
    if (!utf8) return;
 
-   cur_name_td *td = calloc(1, sizeof(cur_name_td));
+   cur_context_td *td = calloc(1, sizeof(cur_context_td));
    if (!td)
      {
         free(utf8);
@@ -1822,10 +1853,11 @@ parser_cur_state_get(parser_data *pd, Evas_Object 
*entry,
    td->cur_pos = elm_entry_cursor_pos_get(entry);
    td->cb = cb;
    td->cb_data = data;
+   td->collections = collections;
 
-   td->thread = ecore_thread_run(cur_state_thread_blocking,
-                                 cur_name_thread_end,
-                                 cur_name_thread_cancel,
+   td->thread = ecore_thread_run(cur_context_thread_blocking,
+                                 cur_context_thread_end,
+                                 cur_context_thread_cancel,
                                  td);
 }
 
diff --git a/src/lib/edj_viewer.c b/src/lib/edj_viewer.c
index b7c1108..624fcd9 100644
--- a/src/lib/edj_viewer.c
+++ b/src/lib/edj_viewer.c
@@ -705,7 +705,6 @@ view_part_highlight_set(view_data *vd, const char 
*part_name)
         if (vd->idler) vd->part_name = eina_stringshare_add(part_name);
         return;
      }
-
    if (!part_name)
      {
         if (vd->part_highlight)
diff --git a/src/lib/enventor_private.h b/src/lib/enventor_private.h
index b9b19f3..87c7c96 100644
--- a/src/lib/enventor_private.h
+++ b/src/lib/enventor_private.h
@@ -106,8 +106,8 @@ Eina_Bool color_ready(color_data *cd);
 parser_data *parser_init(void);
 void parser_term(parser_data *pd);
 Eina_Stringshare *parser_first_group_name_get(parser_data *pd, Evas_Object 
*entry);
-void parser_cur_state_get(parser_data *pd, Evas_Object *entry, void (*cb)(void 
*data, Eina_Stringshare *state_name, double state_value, Eina_Stringshare 
*part_name, Eina_Stringshare *group_name), void *data);
-Eina_Stringshare *parser_cur_name_fast_get(Evas_Object *entry, const char 
*scope);
+void parser_cur_context_get(parser_data *pd, Evas_Object *entry, void 
(*cb)(void *data, Eina_Stringshare *state_name, double state_value, 
Eina_Stringshare *part_name, Eina_Stringshare *group_name), void *data, 
Eina_Bool collections);
+Eina_Stringshare *parser_cur_context_fast_get(Evas_Object *entry, const char 
*scope);
 Eina_Bool parser_type_name_compare(parser_data *pd, const char *str);
 attr_value *parser_attribute_get(parser_data *pd, const char *text, const char 
*cur, const char *selected);
 void parser_attribute_value_set(attr_value *attr, char *cur);
@@ -236,7 +236,7 @@ void ctxpopup_img_preview_reload(Evas_Object *ctxpopup, 
const char *imgpath);
 void edit_font_update(edit_data *ed);
 Eina_Bool edit_key_down_event_dispatch(edit_data *ed, const char *key);
 Eina_Bool edit_key_up_event_dispatch(edit_data *ed, const char *key);
-edit_data *edit_init(Enventor_Object *enventor);
+edit_data *edit_init(Enventor_Object *enventor, Eina_Bool main);
 void edit_term(edit_data *ed);
 Evas_Object *edit_obj_get(edit_data *ed);
 Eina_Bool edit_changed_get(edit_data *ed);
diff --git a/src/lib/enventor_smart.c b/src/lib/enventor_smart.c
index f0ee8e5..e12341a 100644
--- a/src/lib/enventor_smart.c
+++ b/src/lib/enventor_smart.c
@@ -123,6 +123,7 @@ edit_view_sync_cb(void *data, Eina_Stringshare *state_name, 
double state_value,
 
    edj_mgr_all_views_reload();
 
+   //Switch group!
    if (pd->group_name != group_name)
      {
         view_data *vd = edj_mgr_view_get(group_name);
@@ -132,6 +133,8 @@ edit_view_sync_cb(void *data, Eina_Stringshare *state_name, 
double state_value,
              vd = edj_mgr_view_new(group_name);
              if (!vd) return;
           }
+        view_dummy_set(vd, pd->dummy_parts);
+        view_outline_set(vd, pd->outline);
         eina_stringshare_del(pd->group_name);
         pd->group_name = eina_stringshare_add(group_name);
         evas_object_smart_callback_call(pd->obj, SIG_CURSOR_GROUP_CHANGED,
@@ -260,7 +263,7 @@ EOLIAN static void
 _enventor_object_efl_canvas_group_group_del(Evas_Object *obj EINA_UNUSED, 
Enventor_Object_Data *pd)
 {
    eina_stringshare_del(pd->font_name);
-   eina_stringshare_del(pd->font_style);   
+   eina_stringshare_del(pd->font_style);
    eina_stringshare_del(pd->group_name);
    autocomp_term();
    ecore_event_handler_del(pd->key_down_handler);
@@ -413,7 +416,7 @@ _enventor_object_linenumber_set(Eo *obj EINA_UNUSED, 
Enventor_Object_Data *pd,
    if (pd->linenumber == linenumber) return;
 
    //Main Item
-   edit_linenumber_set(pd->main_it.ed, linenumber);
+   edit_linenumber_set(pd->focused_it->ed, linenumber);
 
    pd->linenumber = linenumber;
 }
@@ -950,7 +953,7 @@ enventor_object_add(Enventor_Object *parent)
 }
 
 EAPI Enventor_Item *
-enventor_object_sub_file_add(Enventor_Object *obj, const char *file)
+enventor_object_sub_item_add(Enventor_Object *obj, const char *file)
 {
    Enventor_Object_Data *pd = eo_data_scope_get(obj, ENVENTOR_OBJECT_CLASS);
 
@@ -970,24 +973,17 @@ enventor_object_sub_file_add(Enventor_Object *obj, const 
char *file)
    pd->sub_its = eina_list_append(pd->sub_its, it);
 
    it->enventor = obj;
-   it->ed = edit_init(obj);
+   it->ed = edit_init(obj, EINA_FALSE);
 
    autocomp_target_set(it->ed);
    edit_load(it->ed, file);
    edit_changed_set(it->ed, EINA_FALSE);
 
-   //Update Editor State
-   if (pd->linenumber != DEFAULT_LINENUMBER)
-     edit_linenumber_set(it->ed, pd->linenumber);
-   if (pd->font_scale != DEFAULT_FONT_SCALE)
-     edit_font_scale_set(it->ed, pd->font_scale);
-   if (pd->disabled) edit_disabled_set(it->ed, EINA_TRUE);
-
    return it;
 }
 
 EAPI Enventor_Item *
-enventor_object_main_file_set(Enventor_Object *obj, const char *file)
+enventor_object_main_item_set(Enventor_Object *obj, const char *file)
 {
    Enventor_Object_Data *pd = eo_data_scope_get(obj, ENVENTOR_OBJECT_CLASS);
 
@@ -997,21 +993,20 @@ enventor_object_main_file_set(Enventor_Object *obj, const 
char *file)
    _enventor_main_item_free(pd);
 
    pd->main_it.enventor = obj;
-   pd->main_it.ed = edit_init(obj);
+   pd->main_it.ed = edit_init(obj, EINA_TRUE);
    edit_view_sync_cb_set(pd->main_it.ed, edit_view_sync_cb, pd);
    pd->focused_it = &pd->main_it;
 
    Eina_Bool ret = efl_file_set(obj, file, NULL);
    if (!ret) return NULL;
 
-   //Update Editor State
-   if (pd->linenumber != DEFAULT_LINENUMBER)
-     edit_linenumber_set(pd->main_it.ed, pd->linenumber);
-   if (pd->font_scale != DEFAULT_FONT_SCALE)
-     edit_font_scale_set(pd->main_it.ed, pd->font_scale);
-   if (pd->disabled)
-     edit_disabled_set(pd->main_it.ed, EINA_TRUE);
+   return &pd->main_it;
+}
 
+EAPI Enventor_Item *
+enventor_object_main_item_get(const Enventor_Object *obj)
+{
+   Enventor_Object_Data *pd = eo_data_scope_get(obj, ENVENTOR_OBJECT_CLASS);
    return &pd->main_it;
 }
 
@@ -1044,6 +1039,11 @@ enventor_item_focus_set(Enventor_Item *it)
 
    pd->focused_it = it;
 
+   //Update Editor State
+   edit_linenumber_set(it->ed, pd->linenumber);
+   edit_font_scale_set(it->ed, pd->font_scale);
+   edit_disabled_set(it->ed, pd->disabled);
+
    return EINA_TRUE;
 }
 

-- 


Reply via email to