efl.gfx.entity: combine show/hide events into visibility,changed

Summary:
this requires some internal hackery to preserve legacy compatibility
and correctly translate the single new event into two legacy events

ref T7558

Depends on D8018

Reviewers: segfaultxavi, bu5hm4n

Reviewed By: segfaultxavi

Subscribers: bu5hm4n, segfaultxavi, cedric, #reviewers, #committers

Tags: #efl_api

Maniphest Tasks: T7558

Differential Revision: https://phab.enlightenment.org/D8019
This commit is contained in:
Mike Blumenkrantz 2019-02-25 13:59:49 -05:00
parent d16adf8d82
commit 5da43b2aa7
7 changed files with 34 additions and 30 deletions

View File

@ -101,8 +101,7 @@ interface @beta Efl.Gfx.Entity {
}
}
events {
show: void; [[Object just became visible.]]
hide: void; [[Object just became invisible.]]
visibility,changed: bool; [[Object's visibility state changed, the event value is the new state.]]
position,changed: Eina.Position2D; [[Object was moved, its position during the event is the new one.]]
size,changed: Eina.Size2D; [[Object was resized, its size during the event is the new one.]]
}

View File

@ -258,10 +258,13 @@ _efl_ui_stack_push(Eo *obj, Efl_Ui_Stack_Data *pd, Eo *content)
}
static void
_pop_content_hide_cb(void *data, const Efl_Event *event EINA_UNUSED)
_pop_content_hide_cb(void *data, const Efl_Event *event)
{
Content_Data *cd = data;
/* object is being shown */
if (event->info) return;
cd->popped_hidden = EINA_TRUE;
_content_data_del(cd);
@ -297,7 +300,7 @@ _efl_ui_stack_pop(Eo *obj, Efl_Ui_Stack_Data *pd)
top_cd->on_popping = EINA_TRUE;
//Deallocate content data when hide animation is finished.
efl_event_callback_add(top_content, EFL_GFX_ENTITY_EVENT_HIDE,
efl_event_callback_add(top_content, EFL_GFX_ENTITY_EVENT_VISIBILITY_CHANGED,
_pop_content_hide_cb, top_cd);
_hide_content_with_anim(obj, pd, top_cd);

View File

@ -3908,8 +3908,7 @@ _track_obj_view_del(void *data, const Efl_Event *event);
EFL_CALLBACKS_ARRAY_DEFINE(tracker_callbacks,
{ EFL_GFX_ENTITY_EVENT_SIZE_CHANGED, _track_obj_view_update },
{ EFL_GFX_ENTITY_EVENT_POSITION_CHANGED, _track_obj_view_update },
{ EFL_GFX_ENTITY_EVENT_SHOW, _track_obj_view_update },
{ EFL_GFX_ENTITY_EVENT_HIDE, _track_obj_view_update },
{ EFL_GFX_ENTITY_EVENT_VISIBILITY_CHANGED, _track_obj_view_update },
{ EFL_EVENT_DEL, _track_obj_view_del });
static void
@ -5804,8 +5803,7 @@ EFL_CALLBACKS_ARRAY_DEFINE(widget_shadow_cb,
{ EFL_GFX_ENTITY_EVENT_POSITION_CHANGED, _widget_shadow_event_cb },
{ EFL_GFX_ENTITY_EVENT_SIZE_CHANGED, _widget_shadow_event_cb },
{ EFL_GFX_ENTITY_EVENT_STACKING_CHANGED, _widget_shadow_event_cb },
{ EFL_GFX_ENTITY_EVENT_HIDE, _widget_shadow_event_cb },
{ EFL_GFX_ENTITY_EVENT_SHOW, _widget_shadow_event_cb })
{ EFL_GFX_ENTITY_EVENT_VISIBILITY_CHANGED, _widget_shadow_event_cb });
static Widget_Shadow *
_widget_shadow_part_get(const Eo *part_obj)

View File

@ -348,7 +348,7 @@ evas_event_callback_call(Evas *eo_e, Evas_Callback_Type type, void *event_info)
}
static void
_evas_callback_legacy_smart_compatibility_do_it(Evas_Object *eo_obj, const Efl_Event_Description *efl_event_desc)
_evas_callback_legacy_smart_compatibility_do_it(Evas_Object *eo_obj, const Efl_Event_Description *efl_event_desc, void *event_info)
{
if (efl_event_desc == EFL_GFX_ENTITY_EVENT_POSITION_CHANGED)
evas_object_smart_callback_call(eo_obj, "move", NULL);
@ -356,6 +356,9 @@ _evas_callback_legacy_smart_compatibility_do_it(Evas_Object *eo_obj, const Efl_E
evas_object_smart_callback_call(eo_obj, "resize", NULL);
else if (efl_event_desc == EFL_GFX_ENTITY_EVENT_STACKING_CHANGED)
evas_object_smart_callback_call(eo_obj, "restack", NULL);
/* this is inverted: the base call is the legacy compat and this is the new event */
else if ((efl_event_desc == EFL_GFX_ENTITY_EVENT_SHOW) || (efl_event_desc == EFL_GFX_ENTITY_EVENT_HIDE))
efl_event_callback_call(eo_obj, EFL_GFX_ENTITY_EVENT_VISIBILITY_CHANGED, event_info);
}
@ -422,7 +425,7 @@ evas_object_event_callback_call(Evas_Object *eo_obj, Evas_Object_Protected_Data
e->current_event = type;
efl_event_callback_legacy_call(eo_obj, efl_event_desc, event_info);
_evas_callback_legacy_smart_compatibility_do_it(eo_obj, efl_event_desc);
_evas_callback_legacy_smart_compatibility_do_it(eo_obj, efl_event_desc, event_info);
/* multi events with finger 0 - only for eo callbacks */
if (type == EVAS_CALLBACK_MOUSE_DOWN)

View File

@ -3,14 +3,10 @@
#include "evas_private.h"
/* BEGIN: events to maintain compatibility with legacy */
EWAPI const Efl_Event_Description _EFL_GFX_ENTITY_EVENT_MOVE =
EFL_EVENT_DESCRIPTION("move");
EWAPI const Efl_Event_Description _EFL_GFX_ENTITY_EVENT_RESIZE =
EFL_EVENT_DESCRIPTION("resize");
EWAPI extern const Efl_Event_Description _EFL_GFX_ENTITY_EVENT_MOVE;
#define EFL_GFX_ENTITY_EVENT_MOVE (&(_EFL_GFX_ENTITY_EVENT_MOVE))
EWAPI extern const Efl_Event_Description _EFL_GFX_ENTITY_EVENT_RESIZE;
#define EFL_GFX_ENTITY_EVENT_RESIZE (&(_EFL_GFX_ENTITY_EVENT_RESIZE))
EWAPI const Efl_Event_Description _EFL_GFX_ENTITY_EVENT_SHOW =
EFL_EVENT_DESCRIPTION("show");
EWAPI const Efl_Event_Description _EFL_GFX_ENTITY_EVENT_HIDE =
EFL_EVENT_DESCRIPTION("hide");
/* END: events to maintain compatibility with legacy */
/* local calls */
@ -20,7 +16,7 @@ evas_object_inform_call_show(Evas_Object *eo_obj, Evas_Object_Protected_Data *ob
{
int event_id = _evas_object_event_new();
evas_object_event_callback_call(eo_obj, obj, EVAS_CALLBACK_SHOW, NULL, event_id, EFL_GFX_ENTITY_EVENT_SHOW);
evas_object_event_callback_call(eo_obj, obj, EVAS_CALLBACK_SHOW, (void*)1, event_id, EFL_GFX_ENTITY_EVENT_SHOW);
_evas_post_event_callback_call(obj->layer->evas->evas, obj->layer->evas, event_id);
}

View File

@ -1928,6 +1928,13 @@ extern Eina_Cow *evas_object_events_cow;
} \
while (0);
/* BEGIN: events to maintain compatibility with legacy */
EWAPI extern const Efl_Event_Description _EFL_GFX_ENTITY_EVENT_SHOW;
#define EFL_GFX_ENTITY_EVENT_SHOW (&(_EFL_GFX_ENTITY_EVENT_SHOW))
EWAPI extern const Efl_Event_Description _EFL_GFX_ENTITY_EVENT_HIDE;
#define EFL_GFX_ENTITY_EVENT_HIDE (&(_EFL_GFX_ENTITY_EVENT_HIDE))
/* END: events to maintain compatibility with legacy */
/****************************************************************************/
/*****************************************/
/********************/

View File

@ -159,16 +159,15 @@ _win_hide(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void *e
}
static void
_ui_win_show(void *data EINA_UNUSED, const Efl_Event *ev)
_ui_win_visibility_change(void *data EINA_UNUSED, const Efl_Event *ev)
{
_win_show(NULL, NULL, ev->object, NULL);
}
static void
_ui_win_hide(void *data EINA_UNUSED, const Efl_Event *ev)
{
_win_hide(NULL, NULL, ev->object, NULL);
efl_key_data_set(ev->object, "timer", NULL);
if (ev->info)
_win_show(NULL, NULL, ev->object, NULL);
else
{
_win_hide(NULL, NULL, ev->object, NULL);
efl_key_data_set(ev->object, "timer", NULL);
}
}
EFL_CLASS_SIMPLE_CLASS(efl_loop, "Efl.Loop", EFL_LOOP_CLASS)
@ -201,8 +200,7 @@ _elm_suite_win_create()
}
else
{
efl_event_callback_add(win, EFL_GFX_ENTITY_EVENT_SHOW, _ui_win_show, NULL);
efl_event_callback_add(win, EFL_GFX_ENTITY_EVENT_HIDE, _ui_win_hide, NULL);
efl_event_callback_add(win, EFL_GFX_ENTITY_EVENT_VISIBILITY_CHANGED, _ui_win_visibility_change, NULL);
}
return win;
}