From 4e2ef1cbf4151280b00b5f9504a3160feb534d6d Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Sat, 30 Jan 2016 00:47:38 +0100 Subject: [PATCH] naviframe: switch to use animator,tick. --- legacy/elementary/src/lib/elc_naviframe.c | 33 +++++++++++++------ .../elementary/src/lib/elm_widget_naviframe.h | 2 +- 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/legacy/elementary/src/lib/elc_naviframe.c b/legacy/elementary/src/lib/elc_naviframe.c index dd53d87474..9b616e32c1 100644 --- a/legacy/elementary/src/lib/elc_naviframe.c +++ b/legacy/elementary/src/lib/elc_naviframe.c @@ -1419,7 +1419,10 @@ _send_signal(Elm_Naviframe_Item_Data *it, const char *sig) } static Eina_Bool -_deferred(void *data) +_deferred(void *data, + Eo *o EINA_UNUSED, + const Eo_Event_Description *desc EINA_UNUSED, + void *event_info EINA_UNUSED) { Elm_Naviframe_Data *nfd = data; Elm_Naviframe_Op *nfo; @@ -1444,8 +1447,9 @@ _deferred(void *data) free(nfo); } - nfd->animator = NULL; - return ECORE_CALLBACK_CANCEL; + eo_do(nfd->obj, + eo_event_callback_del(EFL_CORE_ANIMATOR_EVENT_ANIMATOR_TICK, _deferred, nfd)); + return EO_CALLBACK_CONTINUE; } EOLIAN static void @@ -1462,8 +1466,7 @@ _elm_naviframe_evas_object_smart_del(Eo *obj, Elm_Naviframe_Data *sd) eo_do(EO_OBJ(it), elm_wdg_item_del()); } - //All popping items which are not called yet by animator. - if (sd->animator) ecore_animator_del(sd->animator); + // No need to cleanup animator as it is an event on myself EINA_LIST_FREE(sd->ops, nfo) free(nfo); EINA_LIST_FREE(sd->popping, it) @@ -1526,6 +1529,16 @@ _elm_naviframe_elm_widget_access(Eo *obj EINA_UNUSED, Elm_Naviframe_Data *sd, Ei _access_obj_process(it, is_access); } +static void +_schedule_deferred(Elm_Naviframe_Op *nfo, Elm_Naviframe_Data *sd) +{ + if (!sd->ops) + eo_do(sd->obj, + eo_event_callback_add(EFL_CORE_ANIMATOR_EVENT_ANIMATOR_TICK, _deferred, sd)); + + sd->ops = eina_list_append(sd->ops, nfo); +} + static void _item_push_helper(Elm_Naviframe_Item_Data *item) { @@ -1559,8 +1572,7 @@ _item_push_helper(Elm_Naviframe_Item_Data *item) nfo->related = top_item; nfo->push = EINA_TRUE; - sd->ops = eina_list_append(sd->ops, nfo); - if (!sd->animator) sd->animator = ecore_animator_add(_deferred, sd); + _schedule_deferred(nfo, sd); item->pushing = EINA_TRUE; } else @@ -1588,9 +1600,10 @@ elm_naviframe_add(Evas_Object *parent) } EOLIAN static Eo * -_elm_naviframe_eo_base_constructor(Eo *obj, Elm_Naviframe_Data *sd EINA_UNUSED) +_elm_naviframe_eo_base_constructor(Eo *obj, Elm_Naviframe_Data *sd) { obj = eo_do_super_ret(obj, MY_CLASS, obj, eo_constructor()); + sd->obj = obj; eo_do(obj, evas_obj_type_set(MY_CLASS_NAME_LEGACY), evas_obj_smart_callbacks_descriptions_set(_smart_callbacks), @@ -1778,8 +1791,8 @@ _elm_naviframe_item_pop(Eo *obj, Elm_Naviframe_Data *sd) nfo->push = EINA_FALSE; sd->popping = eina_list_append(sd->popping, it); - sd->ops = eina_list_append(sd->ops, nfo); - if (!sd->animator) sd->animator = ecore_animator_add(_deferred, sd); + + _schedule_deferred(nfo, sd); } else eo_do(eo_item, elm_wdg_item_del()); diff --git a/legacy/elementary/src/lib/elm_widget_naviframe.h b/legacy/elementary/src/lib/elm_widget_naviframe.h index 0bc5264736..249bf08973 100644 --- a/legacy/elementary/src/lib/elm_widget_naviframe.h +++ b/legacy/elementary/src/lib/elm_widget_naviframe.h @@ -26,11 +26,11 @@ typedef struct _Elm_Naviframe_Data Elm_Naviframe_Data; struct _Elm_Naviframe_Data { + Evas_Object *obj; /* the object itself */ Eina_Inlist *stack; /* top item is the list's LAST item */ Eina_List *popping; Eina_List *ops; Evas_Object *dummy_edje; - Ecore_Animator *animator; Evas_Display_Mode dispmode; Eina_Bool preserve : 1;