diff --git a/src/lib/evas/canvas/evas_callbacks.c b/src/lib/evas/canvas/evas_callbacks.c index 35ef78aef2..1f86f63168 100644 --- a/src/lib/evas/canvas/evas_callbacks.c +++ b/src/lib/evas/canvas/evas_callbacks.c @@ -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; diff --git a/src/tests/evas/evas_test_callbacks.c b/src/tests/evas/evas_test_callbacks.c index 0b61ca55a2..58da305657 100644 --- a/src/tests/evas/evas_test_callbacks.c +++ b/src/tests/evas/evas_test_callbacks.c @@ -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); }