file_browser: stabilizing switching main edc file function.

This commit is contained in:
Hermet Park 2016-08-08 23:58:08 +09:00
parent 997b878fa8
commit b3afcc4810
7 changed files with 108 additions and 12 deletions

View File

@ -859,6 +859,17 @@ file_browser_selected_file_main_set(void)
return;
}
//Same to previous item
if (it == bd->main_it)
{
char buf[1024];
brows_file *file = elm_object_item_data_get(it);
if (!file) return;
snprintf(buf, sizeof(buf), "\"%s\" is already set to main", file->name);
stats_info_msg_update(buf);
return;
}
brows_file *file = elm_object_item_data_get(it);
if (!file)
{

View File

@ -233,6 +233,14 @@ file_mgr_term(void)
free(fmd);
}
void
file_mgr_file_del(Enventor_Item *it)
{
if (!it) return;
file_tab_it_remove(it);
enventor_item_del(it);
}
Enventor_Item *
file_mgr_sub_file_add(const char *path)
{
@ -249,15 +257,61 @@ file_mgr_sub_file_add(const char *path)
Enventor_Item *
file_mgr_main_file_set(const char *path)
{
Enventor_Item *it = enventor_object_main_item_set(base_enventor_get(), path);
EINA_SAFETY_ON_NULL_RETURN_VAL(it, NULL);
if (!path)
{
EINA_LOG_ERR("No path??");
return NULL;
}
file_tab_clear();
file_tab_it_add(it);
file_mgr_file_focus(it);
char *realpath = ecore_file_realpath(path);
//Same with previous?
Enventor_Item *main_it = file_mgr_main_item_get();
if (main_it)
{
const char *prev_path = enventor_item_file_get(main_it);
if (prev_path)
{
if (!strcmp(prev_path, realpath)) return main_it;
}
}
Eina_List *list;
Enventor_Item *it;
//If this file is already openend with sub file, remove it.
Eina_List *sub_its =
(Eina_List *) enventor_object_sub_items_get(base_enventor_get());
Eina_List *l;
EINA_LIST_FOREACH(sub_its, l, it)
{
const char *path2 = enventor_item_file_get(it);
if (!path2) continue;
if (strcmp(realpath, path2)) continue;
file_tab_it_remove(it);
enventor_item_del(it);
break;
}
//If main file is already openend, set it sub file first.
if (main_it)
{
const char *file_path = NULL;
file_path = enventor_item_file_get(main_it);
file_mgr_sub_file_add(file_path);
file_mgr_file_del(main_it);
}
main_it = enventor_object_main_item_set(base_enventor_get(), realpath);
EINA_SAFETY_ON_NULL_RETURN_VAL(main_it, NULL);
file_tab_it_add(main_it);
file_mgr_file_focus(main_it);
base_console_reset();
return it;
free(realpath);
return main_it;
}
void

View File

@ -108,6 +108,27 @@ close_btn_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED,
/*****************************************************************************/
/* Externally accessible calls */
/*****************************************************************************/
void
file_tab_it_remove(Enventor_Item *enventor_it)
{
file_data *fd = g_fd;
EINA_SAFETY_ON_NULL_RETURN(fd);
Eina_List *list = (Eina_List*) elm_list_items_get(fd->list);
Eina_List *l;
Elm_Object_Item *it;
EINA_LIST_FOREACH(list, l, it)
{
file_tab_it *fti = elm_object_item_data_get(it);
if (fti->enventor_it == enventor_it)
{
elm_object_item_del(it);
break;
}
}
}
Eina_Bool
file_tab_it_select(Enventor_Item *enventor_it)
{
@ -206,8 +227,6 @@ file_tab_it_add(Enventor_Item *enventor_it)
evas_object_smart_callback_add(btn, "clicked", close_btn_clicked_cb, fti);
free(filename);
return EINA_TRUE;
err:
@ -319,3 +338,4 @@ file_tab_term(void)
free(fd);
g_fd = NULL;
}

View File

@ -14,4 +14,5 @@ Eina_Bool file_mgr_save_all(void);
Enventor_Item *file_mgr_main_item_get(void);
Eina_Bool file_mgr_modified_get(void);
Eina_Bool file_mgr_file_open(const char *file_path);
void file_mgr_file_del(Enventor_Item *it);

View File

@ -1,6 +1,7 @@
Evas_Object *file_tab_init(Evas_Object *parent);
void file_tab_term(void);
Eina_Bool file_tab_it_add(Enventor_Item *it);
void file_tab_it_remove(Enventor_Item *enventor_it);
Eina_Bool file_tab_it_select(Enventor_Item *enventor_it);
void file_tab_disabled_set(Eina_Bool disabled);
void file_tab_clear(void);

View File

@ -1791,13 +1791,14 @@ edit_error_set(edit_data *ed, int line, const char *target)
Eina_Bool
edit_ctxpopup_visible_get(edit_data *ed)
{
if (!ed) return EINA_FALSE;
return (ed->ctxpopup ? EINA_TRUE : EINA_FALSE);
}
void
edit_ctxpopup_dismiss(edit_data *ed)
{
if (ed->ctxpopup) elm_ctxpopup_dismiss(ed->ctxpopup);
if (ed && ed->ctxpopup) elm_ctxpopup_dismiss(ed->ctxpopup);
}
Eina_Bool

View File

@ -104,6 +104,8 @@ key_up_cb(void *data, int type EINA_UNUSED, void *ev)
Enventor_Object_Data *pd = data;
Ecore_Event_Key *event = ev;
if (!pd->focused_it) return ECORE_CALLBACK_PASS_ON;
edit_key_up_event_dispatch(pd->focused_it->ed, event->key);
return ECORE_CALLBACK_DONE;
@ -114,6 +116,9 @@ key_down_cb(void *data, int type EINA_UNUSED, void *ev)
{
Enventor_Object_Data *pd = data;
Ecore_Event_Key *event = ev;
if (!pd->focused_it) return ECORE_CALLBACK_PASS_ON;
Eina_Bool ret = edit_focus_get(pd->focused_it->ed);
if (!ret) return ECORE_CALLBACK_PASS_ON;
@ -594,14 +599,16 @@ EOLIAN static Eina_Bool
_enventor_object_ctxpopup_visible_get(Eo *obj EINA_UNUSED,
Enventor_Object_Data *pd)
{
return edit_ctxpopup_visible_get(pd->main_it->ed);
if (!pd->focused_it) return;
return edit_ctxpopup_visible_get(pd->focused_it->ed);
}
EOLIAN static void
_enventor_object_ctxpopup_dismiss(Eo *obj EINA_UNUSED,
Enventor_Object_Data *pd)
{
edit_ctxpopup_dismiss(pd->main_it->ed);
if (!pd->focused_it) return;
edit_ctxpopup_dismiss(pd->focused_it->ed);
}
EOLIAN static Eina_Bool
@ -742,7 +749,8 @@ _enventor_object_syntax_color_set(Eo *obj EINA_UNUSED,
pd->text_color_val[color_type] = eina_stringshare_add(val);
//Main Item
edit_syntax_color_set(pd->main_it->ed, color_type, val);
if (pd->main_it)
edit_syntax_color_set(pd->main_it->ed, color_type, val);
//Sub Items
Eina_List *l;