call start cb after transition
authorHyungdeuk Kim <hd3.kim@samsung.com>
Tue, 15 Jan 2013 00:48:36 +0000 (09:48 +0900)
committerHyungdeuk Kim <hd3.kim@samsung.com>
Tue, 15 Jan 2013 00:48:36 +0000 (09:48 +0900)
include/SLP_UI_Gadget_PG.h
include/ug-dbg.h
include/ui-gadget-engine.h
include/ui-gadget.h
packaging/ui-gadget-1.spec
src/manager.c
ug-efl-engine/ug-efl-engine.c

index be7ed75c2e6d61ebd8336cad6eeafc86585ed734..a45ba6dc16e82d870226d5da5bd3f5c88abb34af 100755 (executable)
@@ -189,6 +189,8 @@ UG_OPT_INDICATOR_LANDSCAPE_ONLY
 UG_OPT_INDICATOR_DISABLE
 // current indicator status will be held
 UG_OPT_INDICATOR_MANUAL
+// Enable indicator overlap
+UG_OPT_OVERLAP_ENABLE
 @endcode
 
 \note <b>struct ug_data</b> is a user defined private data structure describing base layout, own UI gadget handler, and whatever you need:
@@ -506,6 +508,8 @@ Available options are as following:
 - UG_OPT_INDICATOR_POTRAIT_ONLY
 - UG_OPT_LANDSCAPE_ONLY
 - UG_OPT_INDICATOR_DISABLE
+- UG_OPT_INDICATOR_MANUAL
+- UG_OPT_OVERLAP_ENABLE
 
 And we used UG_OPT_INDICATOR_POTRAIT_ONLY in "helloUG-efl"
 
index 65e42c34c8ebda7420b5d61ff3fad14ec7315b36..749c8ac14401805954f094ea32ced9bdd9c37397 100755 (executable)
@@ -30,8 +30,8 @@
 
 #define LOG_TAG "UI_GADGET"
 
-#define _ERR(fmt, arg...) LOGE("\x1b[33m" fmt "\x1b[0m", ##arg);
-#define _DBG(fmt, arg...) LOGD("\x1b[32m" fmt "\x1b[0m", ##arg);
-#define _INFO(fmt, arg...) LOGI("\x1b[31m" fmt "\x1b[0m", ##arg);
+#define _ERR(fmt, arg...) LOGE("\x1b[33m" fmt "\x1b[0m", ##arg)
+#define _DBG(fmt, arg...) LOGD("\x1b[32m" fmt "\x1b[0m", ##arg)
+#define _INFO(fmt, arg...) LOGI("\x1b[31m" fmt "\x1b[0m", ##arg)
 
 #endif                         /* __UG_DBG_H__ */
index e5c999c3579758ac9b43d5f42a6506c0fd7a376c..035bf20fa9ff64c6eef7fdd731606e0694bf6d3e 100755 (executable)
@@ -51,7 +51,7 @@ extern "C" {
  */
 struct ug_engine_ops {
        /** create operation */
-       void *(*create)(void *win, ui_gadget_h ug);
+       void *(*create)(void *win, ui_gadget_h ug, void(*show_end_cb)(void *data));
        /** destroy operation */
        void (*destroy)(ui_gadget_h ug, ui_gadget_h fv_top, void(*hide_end_cb)(ui_gadget_h ug));
        /** reserved operations */
index 1e2bf7b27bfd0be63035c9ea700bd7aba07dd063..0ebcc38c510ec1e8233aa49521bdb6fcef0dd279 100755 (executable)
@@ -508,17 +508,47 @@ void *ug_get_parent_layout(ui_gadget_h ug);
  * ...
  * Evas_Object *win;
  * // get default window
- * win = (Evas_Object *)ug_get_window(ug);
+ * win = (Evas_Object *)ug_get_window();
  * ...
  * \endcode
  */
 void *ug_get_window(void);
 
-
+/**
+ * \par Description:
+ * This function gets ug conformant
+ *
+ * \par Purpose:
+ * This function is used for getting ug conformant
+ *
+ * \par Typical use case:
+ * Anyone who want to get ug conformant could use the function.
+ *
+ * \par Method of function operation:
+ * This function returns ug conformant pointer
+ *
+ * \par Context of function:
+ * This function supposed to be called after successful initialization with ug_init()
+ *
+ * @return The pointer of default window, NULL on error. The result value is void pointer for supporting both GTK (GtkWidget *) and EFL (Evas_Object *)
+ *
+ * \pre ug_init()
+ * \post None
+ * \see None
+ * \remarks None
+ *
+ * \par Sample code:
+ * \code
+ * #include <ui-gadget.h>
+ * ...
+ * Evas_Object *conform;
+ * // get default window
+ * conform = (Evas_Object *)ug_get_conformant();
+ * ...
+ * \endcode
+ */
 void *ug_get_conformant(void);
 
-
-
 /**
  * \par Description:
  * This function gets mode of the given UI gadget instance
index 14930a189acf3db34b25afc63914eb7a1886e06c..42a688eb0d67f8ea7225ffec19a4df007cdadd7d 100755 (executable)
@@ -1,7 +1,7 @@
 
 Name:       ui-gadget-1
 Summary:    UI Gadget Library
-Version:    0.1.10
+Version:    0.1.11
 Release:    1
 Group:      System/Libraries
 License:    Apache License, Version 2.0
index dfc0c1259a14de0f5046840a976c2ee18a0512e8..435b466742bc13f487ce322a6eca4aa22a0e4caf 100755 (executable)
@@ -25,7 +25,9 @@
 #include <errno.h>
 #include <glib.h>
 #include <utilX.h>
+
 #include <Elementary.h>
+#include <Ecore.h>
 
 #include "ug.h"
 #include "ug-manager.h"
@@ -172,6 +174,8 @@ static int ugman_ug_start(void *data)
            || ug->state == UG_STATE_RUNNING)
                return 0;
 
+       _DBG("ug=%p", ug);
+
        ug->state = UG_STATE_RUNNING;
 
        if (ug->module)
@@ -263,7 +267,7 @@ static int ugman_indicator_update(enum ug_option opt, enum ug_event event)
        int cur_state;
 
        if (!ug_man.win) {
-               _ERR("ugman_indicator_update failed: no window");
+               _ERR("indicator update failed: no window");
                return -1;
        }
 
@@ -296,7 +300,7 @@ static int ugman_indicator_update(enum ug_option opt, enum ug_event event)
        case UG_OPT_INDICATOR_MANUAL:
                return 0;
        default:
-               _ERR("ugman_indicator_update failed: Invalid opt");
+               _ERR("update failed: Invalid opt(%d)", opt);
                return -1;
        }
 
@@ -347,13 +351,13 @@ static int ugman_ug_destroy(void *data)
        struct ug_module_ops *ops = NULL;
        GSList *child, *trail;
 
-       _DBG("\t ug=%p state=%d", ug, ug->layout_state);
-
        job_start();
 
        if (!ug)
                goto end;
 
+       _DBG("ugman_ug_destroy start ug(%p)", ug);
+
        switch (ug->state) {
        case UG_STATE_CREATED:
        case UG_STATE_RUNNING:
@@ -403,8 +407,6 @@ static int ugman_ug_destroy(void *data)
  end:
        job_end();
 
-       _DBG("ugman_ug_destroy end ug(%p)", ug);
-
        return 0;
 }
 
@@ -439,7 +441,7 @@ static int ugman_ug_create(void *data)
                }
                if (ug->mode == UG_MODE_FULLVIEW) {
                        if (eng_ops && eng_ops->create)
-                               ug_man.conform = eng_ops->create(ug_man.win, ug);
+                               ug_man.conform = eng_ops->create(ug_man.win, ug, ugman_ug_start);
                }
                cbs = &ug->cbs;
 
@@ -450,7 +452,6 @@ static int ugman_ug_create(void *data)
        }
 
        ugman_ug_event(ug, ug_man.last_rotate_evt);
-       ugman_ug_start(ug);
        ugman_tree_dump(ug_man.root);
 
        return 0;
@@ -565,8 +566,6 @@ int ugman_ug_destroying(ui_gadget_h ug)
 
 int ugman_ug_del(ui_gadget_h ug)
 {
-       _DBG("\t ug=%p state=%d", ug, ug->layout_state);
-
        struct ug_engine_ops *eng_ops = NULL;
 
        if (!ug || !ugman_ug_exist(ug) || ug->state == UG_STATE_DESTROYED) {
@@ -575,6 +574,8 @@ int ugman_ug_del(ui_gadget_h ug)
                return -1;
        }
 
+       _DBG("ugman_ug_del start ug(%p)", ug);
+
        if (ug->destroy_me) {
                _ERR("ugman_ug_del failed: ug is alreay on destroying");
                return -1;
index 366c77b4525a740a0aed3781fd9916d3814e91f9..3d68843c8e5384f50190d57a658111aca7e925eb 100755 (executable)
@@ -35,7 +35,7 @@ static Evas_Object *navi = NULL;
 static Evas_Object *conform = NULL;
 struct cb_data {
        ui_gadget_h ug;
-       void (*hide_end_cb)(ui_gadget_h ug);
+       void (*transition_cb)(ui_gadget_h ug);
 };
 static void __hide_finished(void *data, Evas_Object *obj, void *event_info);
 
@@ -96,7 +96,7 @@ static void _del_effect_layout(ui_gadget_h ug)
        /* effect_layout of frameview is null */
        /* remove navi item */
        if (ug->effect_layout) {
-               _DBG("\t remove navi tiem: ug=%p", ug);
+               _DBG("\t remove navi item: ug=%p", ug);
                if (ug->layout_state == UG_LAYOUT_HIDEEFFECT) {
                        _DBG("\t del cb, ug=%p", ug);
                        evas_object_smart_callback_del(navi, "transition,finished",
@@ -133,7 +133,7 @@ static void __hide_finished(void *data, Evas_Object *obj, void *event_info)
 
        ug->effect_layout = NULL;
        _del_effect_layout(ug);
-       cb_d->hide_end_cb(ug);
+       cb_d->transition_cb(ug);
        free(cb_d);
 }
 
@@ -179,10 +179,12 @@ static void on_destroy(ui_gadget_h ug, ui_gadget_h t_ug,
                struct cb_data *cb_d;
                cb_d = (struct cb_data *)calloc(1, sizeof(struct cb_data));
                cb_d->ug = ug;
-               cb_d->hide_end_cb = hide_end_cb;
+               cb_d->transition_cb = hide_end_cb;
 
                _DBG("\t cb add ug=%p", ug);
 
+               /* overlap update does not needed because manager will do that at on_destroy scenario */
+
                evas_object_smart_callback_add(navi, "transition,finished",
                                        __hide_finished, cb_d);
                elm_naviframe_item_pop(navi);
@@ -201,10 +203,15 @@ static void on_destroy(ui_gadget_h ug, ui_gadget_h t_ug,
 
 static void __show_finished(void *data, Evas_Object *obj, void *event_info)
 {
-       ui_gadget_h ug = (ui_gadget_h) data;
+       struct cb_data *cb_d = (struct cb_data *)data;
+       if (!cb_d)
+               return;
+
+       ui_gadget_h ug = cb_d->ug;
        if (!ug)
                return;
-       _DBG("\t obj=%p ug=%p state=%d", obj, ug, ug->layout_state);
+
+       _DBG("\tobj=%p ug=%p state=%d", obj, ug, ug->layout_state);
 
        evas_object_smart_callback_del(obj, "transition,finished",
                                        __show_finished);
@@ -216,15 +223,21 @@ static void __show_finished(void *data, Evas_Object *obj, void *event_info)
                ;
        else
                ug->layout_state = UG_LAYOUT_SHOW;
+
+       cb_d->transition_cb(ug);
+       free(cb_d);
 }
 
 static void on_show_cb(void *data, Evas *e, Evas_Object *obj,
                       void *event_info)
 {
-       ui_gadget_h ug = (ui_gadget_h)data;
+       struct cb_data *cb_d = (struct cb_data *)data;
+       if (!cb_d)
+               return;
+       ui_gadget_h ug = cb_d->ug;
        if (!ug)
                return;
-       _DBG("\t obj=%p ug=%p state=%d", obj, ug, ug->layout_state);
+       _DBG("\tobj=%p ug=%p state=%d", obj, ug, ug->layout_state);
 
        evas_object_intercept_hide_callback_add(ug->layout,
                                                _on_hideonly_cb, ug);
@@ -242,7 +255,7 @@ static void on_show_cb(void *data, Evas *e, Evas_Object *obj,
                }
 
                evas_object_smart_callback_add(navi, "transition,finished",
-                                               __show_finished, ug);
+                                               __show_finished, cb_d);
                ug->effect_layout = elm_naviframe_item_push(navi, NULL, NULL, NULL,
                                                    ug->layout, NULL);
        } else if (ug->layout_state == UG_LAYOUT_NOEFFECT) {
@@ -252,16 +265,22 @@ static void on_show_cb(void *data, Evas *e, Evas_Object *obj,
                        _DBG("\t this is Overlap UG. Send overlap sig on_show_cb");
                        elm_object_signal_emit(conform, "elm,state,indicator,overlap", "");
                }
-               
+
                Elm_Object_Item *navi_top = elm_naviframe_top_item_get(navi);
                ug->effect_layout = elm_naviframe_item_insert_after(navi,
                                navi_top, NULL, NULL, NULL, ug->layout, NULL);
+
+               //ug start cb
+               cb_d->transition_cb(ug);
+               free(cb_d);
        } else {
-               _ERR("\t layout state error!! state=%d\n", ug->layout_state);
+               _ERR("\tlayout state error!! state=%d\n", ug->layout_state);
+               free(cb_d);
        }
 }
 
-static void *on_create(void *win, ui_gadget_h ug)
+static void *on_create(void *win, ui_gadget_h ug,
+                                       void (*show_end_cb) (void* data))
 {
        const Eina_List *l;
        Evas_Object *subobj;
@@ -269,6 +288,8 @@ static void *on_create(void *win, ui_gadget_h ug)
        Evas_Object *con = NULL;
        static const char *ug_effect_edj_name = "/usr/share/edje/ug_effect.edj";
 
+       if (!ug)
+               return;
        _DBG("\t ug=%p state=%d", ug, ug->layout_state);
 
        con = evas_object_data_get(win, "\377 elm,conformant");
@@ -293,9 +314,13 @@ static void *on_create(void *win, ui_gadget_h ug)
                elm_naviframe_item_push(navi, NULL, NULL, NULL, navi_bg, NULL);
        }
 
+       struct cb_data *cb_d;
+       cb_d = (struct cb_data *)calloc(1, sizeof(struct cb_data));
+       cb_d->ug = ug;
+       cb_d->transition_cb = show_end_cb;
+
        evas_object_hide(ug->layout);
-       evas_object_event_callback_add(ug->layout, EVAS_CALLBACK_SHOW,
-                                      on_show_cb, ug);
+       evas_object_event_callback_add(ug->layout, EVAS_CALLBACK_SHOW, on_show_cb, cb_d);
 
        ug->layout_state = UG_LAYOUT_INIT;