summaryrefslogtreecommitdiff
path: root/ug-efl-engine
diff options
context:
space:
mode:
authorSemun Lee <sm79.lee@samsung.com>2014-02-25 20:06:26 +0900
committerSemun Lee <sm79.lee@samsung.com>2014-02-25 20:06:26 +0900
commit92210284ef62357b7a08fbd973d291ee1afe04ec (patch)
treee219cc5a2c18ba8914b427df1f0660cfc264f36e /ug-efl-engine
parentf0e0a08562a88cac22640384e1f8cadbec9f4ce1 (diff)
parentc7bb89ae628988e1555a950c8b478c9de85ef2c6 (diff)
downloadui-gadget-1-92210284ef62357b7a08fbd973d291ee1afe04ec.tar.gz
ui-gadget-1-92210284ef62357b7a08fbd973d291ee1afe04ec.tar.bz2
ui-gadget-1-92210284ef62357b7a08fbd973d291ee1afe04ec.zip
Merge branches 'HEAD' and 'tizen_2.2' into tizen
Conflicts: CMakeLists.txt client/CMakeLists.txt client/ug-client.c include/ui-gadget.h packaging/ui-gadget-1.spec src/manager.c ui-gadget-1.manifest
Diffstat (limited to 'ug-efl-engine')
-rwxr-xr-xug-efl-engine/ug-efl-engine.c155
1 files changed, 71 insertions, 84 deletions
diff --git a/ug-efl-engine/ug-efl-engine.c b/ug-efl-engine/ug-efl-engine.c
index 1faefb8..88ff163 100755
--- a/ug-efl-engine/ug-efl-engine.c
+++ b/ug-efl-engine/ug-efl-engine.c
@@ -36,49 +36,39 @@ static Evas_Object *conform = NULL;
static void on_show_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
static void (*show_end_cb)(void* data) = NULL;
static void (*hide_end_cb)(void* data) = NULL;
+static void __show_finished(void *data, Evas_Object *obj, void *event_info);
-static void _layout_del_cb(void *data, Evas_Object *obj, void *event_info)
+static Evas_Object *_get_win_conformant(Evas_Object *win)
{
- ui_gadget_h ug = (ui_gadget_h)data;
- if (!ug)
- return;
+ Evas_Object *con = NULL;
- _WRN("ug(%p) layout is deleted by abnormal path", ug);
+ if (!win) {
+ _WRN("\t Invalid param error");
+ return NULL;
+ }
- evas_object_event_callback_del(ug->layout, EVAS_CALLBACK_DEL, _layout_del_cb);
+ con = evas_object_data_get(win, "\377 elm,conformant");
+ if (con)
+ _DBG("\t success to get conformant");
+ else
+ _WRN("\t fail to get conformant");
- ug->layout_state = UG_LAYOUT_DESTROY;
- ug->layout = NULL;
+ return con;
}
-static Eina_Bool __destroy_end_cb(void *data)
+static void _layout_del_cb(void *data, Evas_Object *obj, void *event_info)
{
- GSList *child;
ui_gadget_h ug = (ui_gadget_h)data;
+ if (!ug)
+ return;
- _DBG("\t __destroy_end_cb ug=%p", ug);
-
- if (ug->children) {
- child = ug->children;
- //_DBG("\t ug(%p) has children(%p)", ug, child);
- while (child) {
- if(!child->data) {
- _ERR("child->data is null");
- return ECORE_CALLBACK_CANCEL;
- }
-
- //_DBG("\t child(%p) layout_state(%d)", child, ((ui_gadget_h)child->data)->layout_state);
+ _WRN("ug(%p) layout is deleted by abnormal path", ug);
- if( ((ui_gadget_h)child->data)->layout_state == UG_LAYOUT_HIDEEFFECT) {
- //_DBG("\t wait hideeffect child(%p)", ug);
- return ECORE_CALLBACK_RENEW;
- }
- child = g_slist_next(child);
- }
- }
+ evas_object_event_callback_del(ug->layout, EVAS_CALLBACK_DEL,
+ (Evas_Object_Event_Cb)_layout_del_cb);
- hide_end_cb(ug);
- return ECORE_CALLBACK_CANCEL;
+ ug->layout_state = UG_LAYOUT_DESTROY;
+ ug->layout = NULL;
}
static void __del_effect_end(ui_gadget_h ug)
@@ -94,12 +84,13 @@ static void __del_effect_end(ui_gadget_h ug)
}
if (ug->layout) {
evas_object_hide(ug->layout);
- evas_object_event_callback_del(ug->layout, EVAS_CALLBACK_DEL, _layout_del_cb);
+ evas_object_event_callback_del(ug->layout, EVAS_CALLBACK_DEL,
+ (Evas_Object_Event_Cb)_layout_del_cb);
}
- ecore_idler_add((Ecore_Task_Cb)__destroy_end_cb, (void *)ug);
-
ug->layout_state = UG_LAYOUT_DESTROY;
+
+ hide_end_cb(ug);
}
static void __del_finished(void *data, Evas_Object *obj, void *event_info)
@@ -131,39 +122,19 @@ static void __del_effect_top_layout(ui_gadget_h ug)
static void __del_effect_layout(ui_gadget_h ug, ui_gadget_h t_ug)
{
- GSList *child;
-
if (!ug)
return;
_DBG("\t ug=%p state=%d , t_ug=%p", ug, ug->layout_state, t_ug);
- if (ug->children) {
- child = ug->children;
- _DBG("\t ug(%p) has children(%p)", ug, child);
- while (child) {
- __del_effect_layout(child->data, t_ug);
- child = g_slist_next(child);
- }
- }
-
- if((ug == t_ug)&&(ug->layout_state != UG_LAYOUT_NOEFFECT)){
- if (ug->layout_state != UG_LAYOUT_HIDEEFFECT) {
- __del_effect_top_layout(ug);
- } else {
- _ERR("\t top ug(%p) state is hideeffect.");
- return;
- }
- } else {
- _DBG("\t remove navi item: ug=%p state=%d", ug, ug->layout_state);
- elm_object_item_del(ug->effect_layout);
- ug->effect_layout = NULL;
- }
+ _DBG("\t remove navi item: ug=%p state=%d", ug, ug->layout_state);
+ elm_object_item_del(ug->effect_layout);
+ ug->effect_layout = NULL;
__del_effect_end(ug);
}
-static void __hide_effect_end(ui_gadget_h ug)
+static void __hide_end(ui_gadget_h ug)
{
if (navi) {
Elm_Object_Item *t = elm_naviframe_top_item_get(navi);
@@ -178,6 +149,11 @@ static void __hide_effect_end(ui_gadget_h ug)
if (ug->layout) {
evas_object_hide(ug->layout);
}
+}
+
+static void __hide_effect_end(ui_gadget_h ug)
+{
+ __hide_end(ug);
ug->layout_state = UG_LAYOUT_HIDE;
}
@@ -220,7 +196,8 @@ static void __on_hideonly_cb(void *data, Evas_Object *obj)
return;
}
- if (elm_naviframe_top_item_get(navi) == ug->effect_layout) {
+ if ((elm_naviframe_top_item_get(navi) == ug->effect_layout)
+ && (ug->layout_state != UG_LAYOUT_NOEFFECT)) {
_DBG("\t cb transition add ug=%p", ug);
evas_object_smart_callback_add(navi, "transition,finished",
__hide_finished, ug);
@@ -228,7 +205,7 @@ static void __on_hideonly_cb(void *data, Evas_Object *obj)
ug->layout_state = UG_LAYOUT_HIDEEFFECT;
} else {
elm_object_item_del(ug->effect_layout);
- __hide_effect_end(ug);
+ __hide_end(ug);
}
ug->effect_layout = NULL;
@@ -239,14 +216,15 @@ static void on_destroy(ui_gadget_h ug, ui_gadget_h t_ug,
{
if (!ug)
return;
- _DBG("\t ug=%p tug=%p state=%d", ug, t_ug, ug->layout_state);
+ _DBG("\t ug=%p tug=%p layout_state=%d", ug, t_ug, ug->layout_state);
evas_object_intercept_hide_callback_del(ug->layout,
__on_hideonly_cb);
if(hide_cb == NULL) {
/* ug_destroy_all case */
- evas_object_event_callback_del(ug->layout, EVAS_CALLBACK_DEL, _layout_del_cb);
+ evas_object_event_callback_del(ug->layout, EVAS_CALLBACK_DEL,
+ (Evas_Object_Event_Cb)_layout_del_cb);
return;
}
@@ -261,29 +239,21 @@ static void on_destroy(ui_gadget_h ug, ui_gadget_h t_ug,
if(ug->layout_state == UG_LAYOUT_SHOW) {
__del_effect_top_layout(ug);
+ } else if (ug->layout_state == UG_LAYOUT_SHOWEFFECT) {
+ evas_object_smart_callback_del(navi, "transition,finished",
+ __show_finished);
+ __del_effect_top_layout(ug);
} else if (ug->layout_state == UG_LAYOUT_HIDE
- || ug->layout_state == UG_LAYOUT_NOEFFECT
- || ug->layout_state == UG_LAYOUT_SHOWEFFECT) {
+ || ug->layout_state == UG_LAYOUT_NOEFFECT) {
__del_effect_layout(ug, t_ug);
} else if (ug->layout_state == UG_LAYOUT_HIDEEFFECT) {
;
} else {
- _WRN("[UG Effect Plug-in] : layout state error!!");
+ _WRN("[UG Effect Plug-in] : layout state(%p) error!!", ug->layout_state);
__del_effect_end(ug);
}
}
-static void __update_indicator_overlap(int opt)
-{
- if (GET_OPT_OVERLAP_VAL(opt)) {
- _DBG("\t this is Overlap UG. Send overlap sig on_show_cb");
- elm_object_signal_emit(conform, "elm,state,indicator,overlap", "");
- } else {
- _DBG("\t this is no overlap UG. Send no overlap sig on_show_cb");
- elm_object_signal_emit(conform, "elm,state,indicator,nooverlap", "");
- }
-}
-
static void __show_finished(void *data, Evas_Object *obj, void *event_info)
{
ui_gadget_h ug = (ui_gadget_h)data;
@@ -330,17 +300,12 @@ static void on_show_cb(void *data, Evas *e, Evas_Object *obj,
_DBG("\t UG_LAYOUT_Init(%d) obj=%p", ug->layout_state, obj);
ug->layout_state = UG_LAYOUT_SHOWEFFECT;
- __update_indicator_overlap(ug->opt);
-
evas_object_smart_callback_add(navi, "transition,finished",
__show_finished, ug);
ug->effect_layout = elm_naviframe_item_push(navi, NULL, NULL, NULL,
ug->layout, NULL);
} else if (ug->layout_state == UG_LAYOUT_NOEFFECT) {
_DBG("\t UG_LAYOUT_NOEFFECT obj=%p", obj);
-
- __update_indicator_overlap(ug->opt);
-
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);
@@ -368,9 +333,10 @@ static void *on_create(void *win, ui_gadget_h ug,
if (con) {
conform = con;
_DBG("\t There is conformant");
+ } else {
+ _ERR("\t There is no conformant");
+ return NULL;
}
- else
- _DBG("\t There is NO conformant");
if (!navi) {
navi = elm_naviframe_add(conform);
@@ -392,13 +358,33 @@ static void *on_create(void *win, ui_gadget_h ug,
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_DEL, _layout_del_cb, ug);
+ evas_object_event_callback_add(ug->layout, EVAS_CALLBACK_DEL,
+ (Evas_Object_Event_Cb)_layout_del_cb, ug);
ug->layout_state = UG_LAYOUT_INIT;
return conform;
}
+static void *on_request(void *data, ui_gadget_h ug, int req)
+{
+ void *ret;
+
+ _DBG("on_request ug(%p) req(%d)", ug, req);
+
+ switch(req)
+ {
+ case UG_UI_REQ_GET_CONFORMANT :
+ ret = (void *)_get_win_conformant((Evas_Object *)data);
+ break;
+ default :
+ _WRN("wrong req id(%d)", req);
+ return NULL;
+ }
+
+ return ret;
+}
+
UG_ENGINE_API int UG_ENGINE_INIT(struct ug_engine_ops *ops)
{
if (!ops)
@@ -406,6 +392,7 @@ UG_ENGINE_API int UG_ENGINE_INIT(struct ug_engine_ops *ops)
ops->create = on_create;
ops->destroy = on_destroy;
+ ops->request = on_request;
return 0;
}