hermet pushed a commit to branch master. http://git.enlightenment.org/tools/enventor.git/commit/?id=d72b0756d2a8a9381368b87f3231701a2db8c3a3
commit d72b0756d2a8a9381368b87f3231701a2db8c3a3 Author: ChunEon Park <[email protected]> Date: Tue Feb 4 22:20:40 2014 +0900 edj_mgr - refactoring. removed edj_mgr instance handling outside of the edj_mgr. edj_mgr is also singleton instance. don't need to handle the instant unnecessarily. --- src/bin/edc_editor.c | 3 +- src/bin/edj_mgr.c | 95 +++++++++++++++++++++++++++------------------------ src/bin/edj_viewer.c | 2 +- src/bin/main.c | 21 ++++++------ src/bin/menu.c | 4 +-- src/include/common.h | 1 - src/include/edj_mgr.h | 22 ++++++------ src/include/menu.h | 2 -- 8 files changed, 76 insertions(+), 74 deletions(-) diff --git a/src/bin/edc_editor.c b/src/bin/edc_editor.c index 81d949c..908c4fe 100644 --- a/src/bin/edc_editor.c +++ b/src/bin/edc_editor.c @@ -414,8 +414,7 @@ program_run(edit_data *ed, char *cur) char *program = parser_name_get(ed->pd, cur); if (program) { - edj_mgr *em = edj_mgr_get(); - view_data *vd = edj_mgr_view_get(em, NULL); + view_data *vd = edj_mgr_view_get(NULL); view_program_run(vd, program); free(program); } diff --git a/src/bin/edj_mgr.c b/src/bin/edj_mgr.c index 2f6d873..635a91c 100644 --- a/src/bin/edj_mgr.c +++ b/src/bin/edj_mgr.c @@ -3,27 +3,49 @@ const double VIEW_CACHING_TIME = 60 * 30; -static edj_mgr *g_em; - typedef struct edj_data_s { view_data *vd; Ecore_Timer *timer; } edj_data; -struct edj_mgr_s +typedef struct edj_mgr_s { Eina_List *edjs; edj_data *edj; Evas_Object *layout; Eina_Bool reload_need : 1; -}; +} edj_mgr; + +static edj_mgr *g_em = NULL; + +static void +view_del_cb(void *data) +{ + edj_mgr *em = g_em; + edj_data *edj = data; + em->edjs = eina_list_remove(em->edjs, edj); + if (edj->timer) ecore_timer_del(edj->timer); + if (em->edj == edj) em->edj = NULL; + free(edj); +} + +static Eina_Bool +view_del_timer_cb(void *data) +{ + view_data *vd = data; + edj_data *edj = view_data_get(vd); + edj->timer = NULL; + edj_mgr_view_del(vd); + return ECORE_CALLBACK_CANCEL; +} void -edj_mgr_clear(edj_mgr *em) +edj_mgr_clear() { edj_data *edj; + edj_mgr *em = g_em; EINA_LIST_FREE(em->edjs, edj) { @@ -36,36 +58,34 @@ edj_mgr_clear(edj_mgr *em) em->reload_need = EINA_FALSE; } -edj_mgr * +void edj_mgr_init(Evas_Object *parent) { edj_mgr *em = calloc(1, sizeof(edj_mgr)); + g_em = em; + Evas_Object *layout = elm_layout_add(parent); elm_layout_file_set(layout, EDJE_PATH, "viewer_layout"); evas_object_show(layout); em->layout = layout; - g_em = em; - return em; -} - -edj_mgr * -edj_mgr_get() -{ - return g_em; } void -edj_mgr_term(edj_mgr *em) +edj_mgr_term() { + edj_mgr *em = g_em; + edj_mgr_clear(em); evas_object_del(em->layout); free(em); } view_data * -edj_mgr_view_get(edj_mgr *em, Eina_Stringshare *group) +edj_mgr_view_get(Eina_Stringshare *group) { - if (!em) em = g_em; + edj_mgr *em = g_em; + if (!em) return NULL; + if (!group && em->edj) return em->edj->vd; edj_data *edj; @@ -79,8 +99,9 @@ edj_mgr_view_get(edj_mgr *em, Eina_Stringshare *group) } void -edj_mgr_view_del(edj_mgr *em, view_data *vd) +edj_mgr_view_del(view_data *vd) { + edj_mgr *em = g_em; edj_data *edj = view_data_get(vd); em->edjs = eina_list_remove(em->edjs, edj); if (edj->timer) ecore_timer_del(edj->timer); @@ -88,20 +109,11 @@ edj_mgr_view_del(edj_mgr *em, view_data *vd) free(edj); } -static void -view_del_cb(void *data) +view_data * +edj_mgr_view_new(const char *group, stats_data *sd) { edj_mgr *em = g_em; - edj_data *edj = data; - em->edjs = eina_list_remove(em->edjs, edj); - if (edj->timer) ecore_timer_del(edj->timer); - if (em->edj == edj) em->edj = NULL; - free(edj); -} -view_data * -edj_mgr_view_new(edj_mgr *em, const char *group, stats_data *sd) -{ edj_data *edj = calloc(1, sizeof(edj_data)); if (!edj) return NULL; @@ -113,26 +125,18 @@ edj_mgr_view_new(edj_mgr *em, const char *group, stats_data *sd) } edj->vd = vd; - edj_mgr_view_switch_to(em, vd); + edj_mgr_view_switch_to(vd); em->edjs = eina_list_append(em->edjs, edj); return vd; } -static Eina_Bool -view_del_timer_cb(void *data) -{ - view_data *vd = data; - edj_data *edj = view_data_get(vd); - edj->timer = NULL; - edj_mgr_view_del(g_em, vd); - return ECORE_CALLBACK_CANCEL; -} - view_data * -edj_mgr_view_switch_to(edj_mgr *em, view_data *vd) +edj_mgr_view_switch_to(view_data *vd) { + edj_mgr *em = g_em; + if (em->edj && (em->edj->vd == vd)) return vd; //Switch views @@ -178,19 +182,22 @@ edj_mgr_view_switch_to(edj_mgr *em, view_data *vd) } Evas_Object * -edj_mgr_obj_get(edj_mgr *em) +edj_mgr_obj_get() { + edj_mgr *em = g_em; return em->layout; } void -edj_mgr_reload_need_set(edj_mgr *em, Eina_Bool reload) +edj_mgr_reload_need_set(Eina_Bool reload) { + edj_mgr *em = g_em; em->reload_need = reload; } Eina_Bool -edj_mgr_reload_need_get(edj_mgr *em) +edj_mgr_reload_need_get() { + edj_mgr *em = g_em; return em->reload_need; } diff --git a/src/bin/edj_viewer.c b/src/bin/edj_viewer.c index e53781a..fbde0fc 100644 --- a/src/bin/edj_viewer.c +++ b/src/bin/edj_viewer.c @@ -44,7 +44,7 @@ file_set_timer_cb(void *data) return ECORE_CALLBACK_CANCEL; } - edj_mgr_reload_need_set(edj_mgr_get(), EINA_TRUE); + edj_mgr_reload_need_set(EINA_TRUE); return ECORE_CALLBACK_RENEW; } diff --git a/src/bin/main.c b/src/bin/main.c index a73ef62..7d02a61 100644 --- a/src/bin/main.c +++ b/src/bin/main.c @@ -6,7 +6,6 @@ typedef struct app_s { edit_data *ed; - edj_mgr *em; stats_data *sd; Eio_Monitor *edc_monitor; @@ -312,7 +311,7 @@ main_mouse_wheel_cb(void *data, int type EINA_UNUSED, void *ev) if (!ad->ctrl_pressed) return ECORE_CALLBACK_PASS_ON; //Scale up/down layout - view_data *vd = edj_mgr_view_get(ad->em, NULL); + view_data *vd = edj_mgr_view_get(NULL); double scale = config_view_scale_get(); if (event->z < 0) scale += 0.1; @@ -332,9 +331,9 @@ main_mouse_wheel_cb(void *data, int type EINA_UNUSED, void *ev) static void edc_view_set(app_data *ad, stats_data *sd, Eina_Stringshare *group) { - view_data *vd = edj_mgr_view_get(ad->em, group); - if (vd) edj_mgr_view_switch_to(ad->em, vd); - else vd = edj_mgr_view_new(ad->em, group, sd); + view_data *vd = edj_mgr_view_get(group); + if (vd) edj_mgr_view_switch_to(vd); + else vd = edj_mgr_view_new(group, sd); if (!vd) return; @@ -385,11 +384,11 @@ config_update_cb(void *data) view_dummy_toggle(VIEW_DATA, EINA_FALSE); //previous build was failed, Need to rebuild then reload the edj. - if (edj_mgr_reload_need_get(ad->em)) + if (edj_mgr_reload_need_get()) { build_edc(); edit_changed_set(ad->ed, EINA_FALSE); - edj_mgr_clear(ad->em); + edj_mgr_clear(); edc_view_set(ad, ad->sd, stats_group_name_get(ad->sd)); if (ad->edc_monitor) eio_monitor_del(ad->edc_monitor); ad->edc_monitor = eio_monitor_add(config_edc_path_get()); @@ -400,7 +399,7 @@ config_update_cb(void *data) edit_changed_set(ad->ed, EINA_FALSE); } - view_scale_set(edj_mgr_view_get(ad->em, NULL), config_view_scale_get()); + view_scale_set(edj_mgr_view_get(NULL), config_view_scale_get()); } static void @@ -511,8 +510,8 @@ elm_setup() static void edj_mgr_set(app_data *ad) { - ad->em = edj_mgr_init(base_layout_get()); - base_left_view_set(edj_mgr_obj_get(ad->em)); + edj_mgr_init(base_layout_get()); + base_left_view_set(edj_mgr_obj_get()); } static void @@ -559,7 +558,7 @@ term(app_data *ad) build_term(); menu_term(); edit_term(ad->ed); - edj_mgr_term(ad->em); + edj_mgr_term(); stats_term(ad->sd); base_gui_term(); config_term(); diff --git a/src/bin/menu.c b/src/bin/menu.c index b979a80..079e25e 100644 --- a/src/bin/menu.c +++ b/src/bin/menu.c @@ -675,7 +675,7 @@ edc_reload(menu_data *md, const char *edc_path) { config_edc_path_set(edc_path); edit_new(md->ed); - edj_mgr_reload_need_set(edj_mgr_get(), EINA_TRUE); + edj_mgr_reload_need_set(EINA_TRUE); config_apply(); } @@ -769,7 +769,7 @@ fileselector_save_done_cb(void *data, Evas_Object *obj, void *event_info) return; } - edj_mgr_reload_need_set(edj_mgr_get(), EINA_TRUE); + edj_mgr_reload_need_set(EINA_TRUE); config_apply(); fileselector_close(md); diff --git a/src/include/common.h b/src/include/common.h index e8b2073..921e2c2 100644 --- a/src/include/common.h +++ b/src/include/common.h @@ -9,7 +9,6 @@ typedef struct parser_s parser_data; typedef struct attr_value_s attr_value; typedef struct syntax_helper_s syntax_helper; typedef struct indent_s indent_data; -typedef struct edj_mgr_s edj_mgr; #include "edc_editor.h" #include "menu.h" diff --git a/src/include/edj_mgr.h b/src/include/edj_mgr.h index 5034397..ab33df1 100644 --- a/src/include/edj_mgr.h +++ b/src/include/edj_mgr.h @@ -1,14 +1,14 @@ -edj_mgr *edj_mgr_get(); -edj_mgr *edj_mgr_init(Evas_Object *parent); -void edj_mgr_term(edj_mgr *em); -view_data * edj_mgr_view_new(edj_mgr *em, const char *group, stats_data *sd); -view_data *edj_mgr_view_get(edj_mgr *em, Eina_Stringshare *group); -Evas_Object * edj_mgr_obj_get(edj_mgr *em); -view_data *edj_mgr_view_switch_to(edj_mgr *em, view_data *vd); -void edj_mgr_view_del(edj_mgr *em, view_data *vd); +#define VIEW_DATA edj_mgr_view_get(NULL) -void edj_mgr_reload_need_set(edj_mgr *em, Eina_Bool reload); -Eina_Bool edj_mgr_reload_need_get(edj_mgr *em); -void edj_mgr_clear(edj_mgr *em); +void edj_mgr_init(Evas_Object *parent); +void edj_mgr_term(); +view_data * edj_mgr_view_new(const char *group, stats_data *sd); +view_data *edj_mgr_view_get(Eina_Stringshare *group); +Evas_Object * edj_mgr_obj_get(); +view_data *edj_mgr_view_switch_to(view_data *vd); +void edj_mgr_view_del(view_data *vd); +void edj_mgr_reload_need_set(Eina_Bool reload); +Eina_Bool edj_mgr_reload_need_get(); +void edj_mgr_clear(); diff --git a/src/include/menu.h b/src/include/menu.h index 9a6373c..bf48b14 100644 --- a/src/include/menu.h +++ b/src/include/menu.h @@ -1,5 +1,3 @@ -#define VIEW_DATA edj_mgr_view_get(NULL, NULL) - void menu_init(edit_data *ed); void menu_term(); void menu_toggle(); --
