diff --git a/src/lib/evas/canvas/evas_main.c b/src/lib/evas/canvas/evas_main.c index 84854cddf7..d246bdc60b 100644 --- a/src/lib/evas/canvas/evas_main.c +++ b/src/lib/evas/canvas/evas_main.c @@ -357,9 +357,8 @@ _evas_canvas_efl_object_constructor(Eo *eo_obj, Evas_Public_Data *e) EAPI void evas_free(Evas *eo_e) { - MAGIC_CHECK(eo_e, Evas, MAGIC_EVAS); - return; - MAGIC_CHECK_END(); + if (!eo_e) return; + EVAS_TYPE_CHECK(eo_e); if (efl_parent_get(eo_e)) efl_del(eo_e); else @@ -1230,9 +1229,7 @@ _evas_canvas_efl_canvas_scene_image_max_size_get(const Eo *eo_e EINA_UNUSED, Eva EAPI void evas_output_framespace_set(Evas *eo_e, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h) { - MAGIC_CHECK(eo_e, Evas, MAGIC_EVAS); - return; - MAGIC_CHECK_END(); + EVAS_TYPE_CHECK(eo_e); Evas_Public_Data *e = efl_data_scope_get(eo_e, EVAS_CANVAS_CLASS); @@ -1251,9 +1248,7 @@ evas_output_framespace_set(Evas *eo_e, Evas_Coord x, Evas_Coord y, Evas_Coord w, EAPI void evas_output_framespace_get(const Evas *eo_e, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h) { - MAGIC_CHECK(eo_e, Evas, MAGIC_EVAS); - return; - MAGIC_CHECK_END(); + EVAS_TYPE_CHECK(eo_e); Evas_Public_Data *e = efl_data_scope_get(eo_e, EVAS_CANVAS_CLASS); @@ -1266,9 +1261,7 @@ evas_output_framespace_get(const Evas *eo_e, Evas_Coord *x, Evas_Coord *y, Evas_ EAPI void evas_output_method_set(Evas *eo_e, int render_method) { - MAGIC_CHECK(eo_e, Evas, MAGIC_EVAS); - return; - MAGIC_CHECK_END(); + EVAS_TYPE_CHECK(eo_e); Evas_Public_Data *e = efl_data_scope_get(eo_e, EVAS_CANVAS_CLASS); @@ -1340,9 +1333,7 @@ evas_output_method_set(Evas *eo_e, int render_method) EAPI int evas_output_method_get(const Evas *eo_e) { - MAGIC_CHECK(eo_e, Evas, MAGIC_EVAS); - return RENDER_METHOD_INVALID; - MAGIC_CHECK_END(); + EVAS_TYPE_CHECK(eo_e, RENDER_METHOD_INVALID); Evas_Public_Data *e = efl_data_scope_get(eo_e, EVAS_CANVAS_CLASS); @@ -1352,9 +1343,7 @@ evas_output_method_get(const Evas *eo_e) EAPI void evas_output_size_set(Evas *eo_e, int w, int h) { - MAGIC_CHECK(eo_e, Evas, MAGIC_EVAS); - return; - MAGIC_CHECK_END(); + EVAS_TYPE_CHECK(eo_e); Evas_Public_Data *e = efl_data_scope_get(eo_e, EVAS_CANVAS_CLASS); @@ -1382,9 +1371,7 @@ evas_output_size_set(Evas *eo_e, int w, int h) EAPI void evas_output_size_get(const Evas *eo_e, int *w, int *h) { - MAGIC_CHECK(eo_e, Evas, MAGIC_EVAS); - return; - MAGIC_CHECK_END(); + EVAS_TYPE_CHECK(eo_e); Evas_Public_Data *e = efl_data_scope_get(eo_e, EVAS_CANVAS_CLASS); @@ -1395,9 +1382,7 @@ evas_output_size_get(const Evas *eo_e, int *w, int *h) EAPI void evas_output_viewport_set(Evas *eo_e, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h) { - MAGIC_CHECK(eo_e, Evas, MAGIC_EVAS); - return; - MAGIC_CHECK_END(); + EVAS_TYPE_CHECK(eo_e); Evas_Public_Data *e = efl_data_scope_get(eo_e, EVAS_CANVAS_CLASS); @@ -1425,9 +1410,7 @@ evas_output_viewport_set(Evas *eo_e, Evas_Coord x, Evas_Coord y, Evas_Coord w, E EAPI void evas_output_viewport_get(const Evas *eo_e, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h) { - MAGIC_CHECK(eo_e, Evas, MAGIC_EVAS); - return; - MAGIC_CHECK_END(); + EVAS_TYPE_CHECK(eo_e); Evas_Public_Data *e = efl_data_scope_get(eo_e, EVAS_CANVAS_CLASS); @@ -1961,9 +1944,7 @@ evas_font_hinting_can_hint(const Evas *eo_e, Evas_Font_Hinting_Flags hinting) EAPI void evas_font_available_list_free(Evas *eo_e, Eina_List *available) { - MAGIC_CHECK(eo_e, Evas, MAGIC_EVAS); - return; - MAGIC_CHECK_END(); + EVAS_TYPE_CHECK(eo_e); evas_font_dir_available_list_free(available); } @@ -1978,7 +1959,7 @@ _evas_canvas_efl_canvas_scene_group_objects_calculate(Eo *eo_e, Evas_Public_Data EAPI void evas_smart_objects_calculate(Eo *eo_e) { - EINA_SAFETY_ON_NULL_RETURN(eo_e); + EVAS_TYPE_CHECK(eo_e); evas_call_smarts_calculate(eo_e); } @@ -1991,6 +1972,7 @@ _evas_canvas_efl_canvas_scene_group_objects_calculating_get(const Eo *eo_e EINA_ EAPI Eina_Bool evas_smart_objects_calculating_get(const Eo *obj) { + EVAS_TYPE_CHECK(obj, EINA_FALSE); return efl_canvas_scene_group_objects_calculating_get(obj); } @@ -2004,18 +1986,21 @@ _evas_canvas_smart_objects_calculate_count_get(const Eo *eo_e EINA_UNUSED, Evas_ EAPI Eina_Bool evas_pointer_inside_get(const Evas *obj) { + EVAS_TYPE_CHECK(obj, EINA_FALSE); return efl_canvas_pointer_inside_get(obj, NULL); } EAPI Eina_Bool evas_pointer_inside_by_device_get(const Evas *obj, Eo *dev) { + EVAS_TYPE_CHECK(obj, EINA_FALSE); return efl_canvas_pointer_inside_get(obj, dev); } EAPI Eina_List* evas_objects_at_xy_get(Eo *eo_e, int x, int y, Eina_Bool include_pass_events_objects, Eina_Bool include_hidden_objects) { + EVAS_TYPE_CHECK(eo_e, NULL); return _efl_canvas_evas_canvas_objects_at_xy_get_helper(eo_e, efl_data_scope_get(eo_e, EVAS_CANVAS_CLASS), x, y, include_pass_events_objects, include_hidden_objects); } /* Internal EO APIs */ diff --git a/src/lib/evas/canvas/evas_render.c b/src/lib/evas/canvas/evas_render.c index 074dc1d618..0a8d8a6748 100644 --- a/src/lib/evas/canvas/evas_render.c +++ b/src/lib/evas/canvas/evas_render.c @@ -2864,7 +2864,7 @@ evas_render_pre(Evas *eo_e, Evas_Public_Data *evas) EAPI void evas_render_pending_objects_flush(Evas *eo_e) { - Evas_Public_Data *evas = efl_data_scope_get(eo_e, EVAS_CANVAS_CLASS); + Evas_Public_Data *evas = efl_data_scope_safe_get(eo_e, EVAS_CANVAS_CLASS); EINA_SAFETY_ON_NULL_RETURN(evas); evas_render_pre(eo_e, evas); } diff --git a/src/lib/evas/include/evas_private.h b/src/lib/evas/include/evas_private.h index 751f81cd07..2c6dcdd990 100644 --- a/src/lib/evas/include/evas_private.h +++ b/src/lib/evas/include/evas_private.h @@ -517,7 +517,19 @@ OPAQUE_TYPE(Evas_Font_Instance); /* General type for RGBA_Font_Int */ #define MAGIC_MAP 0x7575177d #define MAGIC_DEV 0x7d773738 +#define EVAS_TYPE_CHECK(obj, ...) \ + do { \ + if (!efl_isa((obj), EVAS_CANVAS_CLASS)) \ + { \ + CRI("non-Evas passed to %s", __func__); \ + return __VA_ARGS__; \ + } \ + } \ + while (0) + #ifdef EINA_MAGIC_DEBUG + + # define MAGIC_CHECK_FAILED(o, t, m) \ {evas_debug_error(); \ if (!o) evas_debug_input_null(); \