evas/callbacks: emit hardcoded legacy smart callbacks always

Summary:
these are not strictly related to the event callback types and should not
have their emission tied to the corresponding event

also add unit test to verify all of these

@fix

Reviewers: cedric

Reviewed By: cedric

Subscribers: bu5hm4n, cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D10353
This commit is contained in:
Mike Blumenkrantz 2019-10-14 09:29:23 -04:00
parent 4192137ba9
commit e96d18b046
2 changed files with 34 additions and 2 deletions

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, void *event_info)
_evas_smart_callback_legacy_git_er_done(Evas_Object *eo_obj, const Efl_Event_Description *efl_event_desc)
{
if (efl_event_desc == EFL_GFX_ENTITY_EVENT_POSITION_CHANGED)
evas_object_smart_callback_call(eo_obj, "move", NULL);
@ -356,8 +356,13 @@ _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);
}
static void
_evas_callback_legacy_smart_compatibility_do_it(Evas_Object *eo_obj, const Efl_Event_Description *efl_event_desc, void *event_info)
{
/* 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))
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);
else if ((efl_event_desc == EFL_GFX_IMAGE_EVENT_IMAGE_PRELOAD) || (efl_event_desc == EFL_GFX_IMAGE_EVENT_IMAGE_UNLOAD))
efl_event_callback_call(eo_obj, EFL_GFX_IMAGE_EVENT_IMAGE_PRELOAD_STATE_CHANGED, event_info);
@ -403,6 +408,8 @@ evas_object_event_callback_call(Evas_Object *eo_obj, Evas_Object_Protected_Data
type == EVAS_CALLBACK_MULTI_UP)
_efl_canvas_gesture_manager_filter_event(e->gesture_manager, eo_obj, event_info);
_evas_smart_callback_legacy_git_er_done(eo_obj, efl_event_desc);
if (!_evas_object_callback_has_by_type(obj, type))
goto nothing_here;

View File

@ -145,8 +145,33 @@ EFL_START_TEST(evas_event_callbacks_priority)
}
EFL_END_TEST
static void
_smart_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
int *called = data;
(*called)++;
}
EFL_START_TEST(evas_event_callbacks_smart)
{
int called = 0;
Eo *box;
START_CALLBACK_TEST();
box = evas_object_box_add(evas);
evas_object_smart_callback_add(box, "move", _smart_cb, &called);
evas_object_smart_callback_add(box, "resize", _smart_cb, &called);
evas_object_smart_callback_add(box, "restack", _smart_cb, &called);
evas_object_geometry_set(box, 1, 1, 10, 10);
evas_object_layer_set(box, 10);
ck_assert_int_eq(called, 3);
END_CALLBACK_TEST();
}
EFL_END_TEST
void evas_test_callbacks(TCase *tc)
{
tcase_add_test(tc, evas_object_event_callbacks_priority);
tcase_add_test(tc, evas_event_callbacks_priority);
tcase_add_test(tc, evas_event_callbacks_smart);
}