hermet pushed a commit to branch master.

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

commit 3024ee6ccaebb79dc249ecb8f710f37168eb6a15
Author: ChunEon Park <her...@hermet.pe.kr>
Date:   Wed Jan 29 21:56:29 2014 +0900

    refactoring - removed menu_opened variable from the main.
    
    it's duplicated variable to require sync.
    menu itself keeps the menu_open status.
---
 src/bin/main.c     |  26 ++++------
 src/bin/menu.c     | 141 +++++++++++++++++++----------------------------------
 src/include/menu.h |  13 ++---
 3 files changed, 67 insertions(+), 113 deletions(-)

diff --git a/src/bin/main.c b/src/bin/main.c
index d2738e2..fdc11e1 100644
--- a/src/bin/main.c
+++ b/src/bin/main.c
@@ -18,7 +18,6 @@ struct app_s
 
    Eina_Bool ctrl_pressed : 1;
    Eina_Bool shift_pressed : 1;
-   Eina_Bool menu_opened : 1;
 };
 
 int main(int argc, char **argv);
@@ -304,13 +303,13 @@ main_key_down_cb(void *data, int type EINA_UNUSED, void 
*ev)
    //Main Menu
    if (!strcmp(event->keyname, "Escape"))
      {
-        ad->menu_opened = menu_toggle();
-        if (!ad->menu_opened)
+        menu_toggle();
+        if (menu_open_depth(ad->md) == 0)
           edit_focus_set(ad->ed);
         return ECORE_CALLBACK_DONE;
      }
 
-   if (ad->menu_opened) return ECORE_CALLBACK_PASS_ON;
+   if (menu_open_depth(ad->md) > 0) return ECORE_CALLBACK_PASS_ON;
 
    //Control Key
    if (!strcmp("Control_L", event->keyname))
@@ -321,25 +320,25 @@ main_key_down_cb(void *data, int type EINA_UNUSED, void 
*ev)
    //README
    if (!strcmp(event->keyname, "F1"))
      {
-        ad->menu_opened = menu_about(ad->md);
+        menu_about(ad->md);
         return ECORE_CALLBACK_DONE;
      }
    //New
    if (!strcmp(event->keyname, "F2"))
      {
-        ad->menu_opened = menu_edc_new(ad->md);
+        menu_edc_new(ad->md);
         return ECORE_CALLBACK_DONE;
      }
    //Save
    if (!strcmp(event->keyname, "F3"))
      {
-        ad->menu_opened = menu_edc_save(ad->md);
+        menu_edc_save(ad->md);
         return ECORE_CALLBACK_DONE;
      }
    //Load
    if (!strcmp(event->keyname, "F4"))
      {
-        ad->menu_opened = menu_edc_load(ad->md);
+        menu_edc_load(ad->md);
         return ECORE_CALLBACK_DONE;
      }
    //Line Number
@@ -359,7 +358,7 @@ main_key_down_cb(void *data, int type EINA_UNUSED, void *ev)
    //Setting
    if (!strcmp(event->keyname, "F12"))
      {
-        ad->menu_opened = menu_setting(ad->md);
+        menu_setting(ad->md);
         return ECORE_CALLBACK_DONE;
      }
 
@@ -576,13 +575,6 @@ elm_setup()
 }
 
 static void
-menu_close_cb(void *data)
-{
-   app_data *ad = data;
-   ad->menu_opened = EINA_FALSE;
-}
-
-static void
 edj_mgr_set(app_data *ad, config_data *cd)
 {
    ad->em = edj_mgr_init(ad->panes, cd);
@@ -611,7 +603,7 @@ init(app_data *ad, int argc, char **argv)
    statusbar_set(ad, ad->cd);
    edc_edit_set(ad, ad->sd, ad->cd);
    edc_view_set(ad, ad->cd, ad->sd, stats_group_name_get(ad->sd));
-   ad->md = menu_init(ad->win, ad->ed, ad->cd, menu_close_cb, ad);
+   ad->md = menu_init(ad->win, ad->ed, ad->cd);
 
    ad->edc_monitor = eio_monitor_add(config_edc_path_get(ad->cd));
    ecore_event_handler_add(EIO_MONITOR_FILE_MODIFIED, edc_changed_cb, ad);
diff --git a/src/bin/menu.c b/src/bin/menu.c
index 9850330..2528f9e 100644
--- a/src/bin/menu.c
+++ b/src/bin/menu.c
@@ -20,18 +20,14 @@ struct menu_s
    Evas_Object *toggle_highlight;
    Evas_Object *toggle_swallow;
    Evas_Object *toggle_indent;
-
    Evas_Object *ctxpopup;
 
    const char *last_accessed_path;
 
-   void (*close_cb)(void *data);
-   void *close_cb_data;
+   int open_depth;
 
    config_data *cd;
    edit_data *ed;
-
-   Eina_Bool menu_open : 1;
 };
 
 static menu_data *g_md;
@@ -68,13 +64,10 @@ warning_close(menu_data *md)
 }
 
 static void
-menu_close(menu_data *md, Eina_Bool toggled)
+menu_close(menu_data *md)
 {
-   if (md->menu_layout)
-     elm_object_signal_emit(md->menu_layout, "elm,state,dismiss", "");
-
-   if (!toggled)
-     md->close_cb(md->close_cb_data);
+   if (!md->menu_layout) return;
+   elm_object_signal_emit(md->menu_layout, "elm,state,dismiss", "");
 }
 
 static void
@@ -85,6 +78,7 @@ fileselector_dismiss_done(void *data, Evas_Object *obj 
EINA_UNUSED,
    menu_data *md = data;
    evas_object_del(md->fileselector_layout);
    md->fileselector_layout = NULL;
+   md->open_depth--;
    if (md->menu_layout)
      {
         elm_object_disabled_set(md->menu_layout, EINA_FALSE);
@@ -100,6 +94,7 @@ setting_dismiss_done(void *data, Evas_Object *obj 
EINA_UNUSED,
    menu_data *md = data;
    evas_object_del(md->setting_layout);
    md->setting_layout = NULL;
+   md->open_depth--;
    if (!md->menu_layout) return;
    elm_object_disabled_set(md->menu_layout, EINA_FALSE);
    elm_object_focus_set(md->menu_layout, EINA_TRUE);
@@ -113,6 +108,7 @@ about_dismiss_done(void *data, Evas_Object *obj EINA_UNUSED,
    menu_data *md = data;
    evas_object_del(md->about_layout);
    md->about_layout = NULL;
+   md->open_depth--;
    if (!md->menu_layout) return;
    elm_object_disabled_set(md->menu_layout, EINA_FALSE);
    elm_object_focus_set(md->menu_layout, EINA_TRUE);
@@ -126,7 +122,7 @@ menu_dismiss_done(void *data, Evas_Object *obj EINA_UNUSED,
    menu_data *md = data;
    evas_object_del(md->menu_layout);
    md->menu_layout = NULL;
-   md->menu_open = EINA_FALSE;
+   md->open_depth--;
 }
 
 static void
@@ -137,6 +133,7 @@ warning_dismiss_done(void *data, Evas_Object *obj 
EINA_UNUSED,
    menu_data *md = data;
    evas_object_del(md->warning_layout);
    md->warning_layout = NULL;
+   md->open_depth--;
    if (!md->menu_layout) return;
    elm_object_disabled_set(md->menu_layout, EINA_FALSE);
    elm_object_focus_set(md->menu_layout, EINA_TRUE);
@@ -191,6 +188,7 @@ warning_layout_create(menu_data *md, Evas_Smart_Cb yes_cb,
      elm_object_disabled_set(md->menu_layout, EINA_TRUE);
 
    md->warning_layout = layout;
+   md->open_depth++;
 }
 
 static void
@@ -567,6 +565,7 @@ setting_open(menu_data *md)
    md->toggle_highlight = toggle_highlight;
    md->toggle_swallow = toggle_swallow;
    md->toggle_indent = toggle_indent;
+   md->open_depth++;
 }
 
 static void
@@ -630,6 +629,7 @@ about_open(menu_data *md)
      elm_object_disabled_set(md->menu_layout, EINA_TRUE);
 
    md->about_layout = layout;
+   md->open_depth++;
 
 err:
    if (strbuf) eina_strbuf_free(strbuf);
@@ -661,7 +661,7 @@ new_yes_btn_cb(void *data, Evas_Object *obj EINA_UNUSED,
 
    edc_reload(md, PROTO_EDC_PATH);
    warning_close(md);
-   menu_close(md, EINA_FALSE);
+   menu_close(md);
 }
 
 static void
@@ -751,7 +751,7 @@ new_save_btn_cb(void *data, Evas_Object *obj EINA_UNUSED,
    edit_save(md->ed);
    edc_reload(md, PROTO_EDC_PATH);
    warning_close(md);
-   menu_close(md, EINA_FALSE);
+   menu_close(md);
 }
 
 static void
@@ -828,7 +828,7 @@ fileselector_save_done_cb(void *data, Evas_Object *obj, 
void *event_info)
    config_apply(md->cd);
 
    fileselector_close(md);
-   menu_close(md, EINA_FALSE);
+   menu_close(md);
 }
 
 static void
@@ -889,7 +889,7 @@ fileselector_load_done_cb(void *data, Evas_Object *obj, 
void *event_info)
 
    edc_reload(md, selected);
    fileselector_close(md);
-   menu_close(md, EINA_FALSE);
+   menu_close(md);
 }
 
 static void
@@ -929,6 +929,7 @@ edc_file_save(menu_data *md)
    elm_object_focus_set(fs, EINA_TRUE);
 
    md->fileselector_layout = layout;
+   md->open_depth++;
 }
 
 static void
@@ -962,6 +963,7 @@ edc_file_load(menu_data *md)
    elm_object_focus_set(fs, EINA_TRUE);
 
    md->fileselector_layout = layout;
+   md->open_depth++;
 }
 
 static void
@@ -983,18 +985,16 @@ load_save_btn_cb(void *data EINA_UNUSED, Evas_Object *obj 
EINA_UNUSED,
    warning_close(md);
 }
 
-Eina_Bool
+void
 menu_about(menu_data *md)
 {
    about_open(md);
-   return EINA_TRUE;
 }
 
-Eina_Bool
+void
 menu_setting(menu_data *md)
 {
    setting_open(md);
-   return EINA_TRUE;
 }
 
 Eina_Bool
@@ -1006,27 +1006,24 @@ menu_edc_new(menu_data *md)
         return EINA_TRUE;
      }
    edc_reload(md, PROTO_EDC_PATH);
-   menu_close(md, EINA_FALSE);
+   menu_close(md);
 
    return EINA_FALSE;
 }
 
-Eina_Bool
+void
 menu_edc_save(menu_data *md)
 {
    edc_file_save(md);
-   return EINA_TRUE;
 }
 
-Eina_Bool
+void
 menu_edc_load(menu_data *md)
 {
    if (edit_changed_get(md->ed))
      warning_layout_create(md, load_yes_btn_cb, load_save_btn_cb);
    else
      edc_file_load(md);
-
-   return EINA_TRUE;
 }
 
 static void
@@ -1084,20 +1081,16 @@ menu_open(menu_data *md)
    ecore_timer_add(0.15, btn_effect_timer_cb, btn);
 
    md->menu_layout = layout;
-
-   md->menu_open = EINA_TRUE;
+   md->open_depth++;
 }
 
 menu_data *
-menu_init(Evas_Object *win, edit_data *ed, config_data *cd,
-          void (*close_cb)(void *data), void *data)
+menu_init(Evas_Object *win, edit_data *ed, config_data *cd)
 {
    menu_data *md = calloc(1, sizeof(menu_data));
    md->win = win;
    md->ed = ed;
    md->cd = cd;
-   md->close_cb = close_cb;
-   md->close_cb_data = data;
    g_md = md;
    return md;
 }
@@ -1109,78 +1102,40 @@ menu_term(menu_data *md)
    free(md);
 }
 
-Eina_Bool
+void
 menu_toggle()
 {
    menu_data *md = g_md;
 
-   //Level 2 Menus
-   if (md->menu_open)
-     {
-        if (md->setting_layout)
-          {
-             setting_close(md);
-             return EINA_TRUE;
-          }
-        else if (md->warning_layout)
-          {
-             warning_close(md);
-             return EINA_TRUE;
-          }
-        else if (md->fileselector_layout)
-          {
-             fileselector_close(md);
-             return EINA_TRUE;
-          }
-        else if (md->about_layout)
-          {
-             about_close(md);
-             return EINA_TRUE;
-          }
-     }
-   //Short Cut Key Open Case
-   else
+   if (md->setting_layout)
      {
-        if (md->about_layout)
-          {
-             about_close(md);
-             return EINA_FALSE;
-          }
-        if (md->fileselector_layout)
-          {
-             fileselector_close(md);
-             return EINA_FALSE;
-          }
-        if (md->setting_layout)
-          {
-             setting_close(md);
-             return EINA_FALSE;
-          }
-     }
-
-   //Ctxpopup
-   if (md->ctxpopup)
-     {
-        elm_ctxpopup_dismiss(md->ctxpopup);
-        return EINA_FALSE;
+        setting_close(md);
+        return;
      }
-   //Warning
    if (md->warning_layout)
      {
         warning_close(md);
-        return EINA_FALSE;
+        return;
      }
-   //Main Menu 
-   if (md->menu_open)
+   if (md->fileselector_layout)
+     {
+        fileselector_close(md);
+        return;
+     }
+   if (md->about_layout)
      {
-        menu_close(md, EINA_TRUE);
-        return EINA_FALSE;
+        about_close(md);
+        return;
      }
-   else
+   if (md->ctxpopup)
      {
-        menu_open(md);
-        return EINA_TRUE;
+        elm_ctxpopup_dismiss(md->ctxpopup);
+        return;
      }
+
+   //Main Menu 
+   if (md->open_depth) menu_close(md);
+   else menu_open(md);
 }
 
 static void
@@ -1208,3 +1163,9 @@ menu_ctxpopup_register(Evas_Object *ctxpopup)
    evas_object_event_callback_add(ctxpopup, EVAS_CALLBACK_DEL, ctxpopup_del_cb,
                                   md);
 }
+
+int
+menu_open_depth(menu_data *md)
+{
+   return md->open_depth;
+}
diff --git a/src/include/menu.h b/src/include/menu.h
index 2595212..c7bc7f7 100644
--- a/src/include/menu.h
+++ b/src/include/menu.h
@@ -1,13 +1,14 @@
 #define VIEW_DATA edj_mgr_view_get(NULL, NULL)
 
-menu_data *menu_init(Evas_Object *win, edit_data *ed, config_data *cd, void 
(*close_cb)(void *data), void *data);
+menu_data *menu_init(Evas_Object *win, edit_data *ed, config_data *cd);
 void menu_term(menu_data *md);
-Eina_Bool menu_toggle();
+void menu_toggle();
 void menu_ctxpopup_register(Evas_Object *ctxpopup);
 void menu_ctxpopup_unregister(Evas_Object *ctxpopup);
 Eina_Bool menu_edc_new(menu_data *md);
-Eina_Bool menu_edc_save(menu_data *md);
-Eina_Bool menu_edc_load(menu_data *md);
+void menu_edc_save(menu_data *md);
+void menu_edc_load(menu_data *md);
 void menu_exit(menu_data *md);
-Eina_Bool menu_about(menu_data *md);
-Eina_Bool menu_setting(menu_data *md);
+void menu_about(menu_data *md);
+void menu_setting(menu_data *md);
+int menu_open_depth(menu_data *md);

-- 


Reply via email to