From 97a34c9ad8b9a0ec3465f7d6917bf6ee09d47667 Mon Sep 17 00:00:00 2001 From: Jaehyun Cho Date: Wed, 23 Feb 2022 21:16:35 +0900 Subject: [PATCH] evas_object_smart: Set child_has_map flag to parent when parent is set Previously, parent's child_has_map flag was set only when evas_object_map_enable_set was called for its child. This causes an issue that mouse touch may not be caught by the parent. Because the parent's child_has_map is supposed to be true but it is actually false. So the bounding_box of the parent may not be updated properly but mouse touch is checked by the intersection of the bounding_box since child_has_map flag is false. Now, parent's child_has_map flag is set when parent is set. So child_has_map flag is set to parent and mouse touch is caught correctly. Change-Id: I2ed8e57e3a929a6d37f65c319e4306d58f4d88e0 --- src/lib/evas/canvas/evas_map.c | 28 ++++++++++++++++++++-------- src/lib/evas/canvas/evas_object_smart.c | 6 ++++++ src/lib/evas/include/evas_private.h | 3 +++ 3 files changed, 29 insertions(+), 8 deletions(-) diff --git a/src/lib/evas/canvas/evas_map.c b/src/lib/evas/canvas/evas_map.c index e7423ac..61d85e4 100644 --- a/src/lib/evas/canvas/evas_map.c +++ b/src/lib/evas/canvas/evas_map.c @@ -450,6 +450,22 @@ _evas_object_map_parent_check(Evas_Object *eo_parent) } #endif +// TIZEN_ONLY(20220223): Set child_has_map flag to parent when parent is set +void +_evas_object_parent_child_has_map_set(Evas_Object_Protected_Data *obj) +{ + Evas_Object *eo_parents; + Evas_Object_Protected_Data *parents = NULL; + + for (eo_parents = obj->smart.parent; eo_parents; eo_parents = parents->smart.parent) + { + parents = efl_data_scope_get(eo_parents, EFL_CANVAS_OBJECT_CLASS); + if (!parents) break; + parents->child_has_map = EINA_TRUE; + } +} +// + void _evas_object_map_enable_set(Eo *eo_obj, Evas_Object_Protected_Data *obj, Eina_Bool enabled) @@ -502,14 +518,10 @@ _evas_object_map_enable_set(Eo *eo_obj, Evas_Object_Protected_Data *obj, if (enabled) { - Evas_Object *eo_parents; - Evas_Object_Protected_Data *parents = NULL; - for (eo_parents = obj->smart.parent; eo_parents; eo_parents = parents->smart.parent) - { - parents = efl_data_scope_get(eo_parents, EFL_CANVAS_OBJECT_CLASS); - if (!parents) break; - parents->child_has_map = EINA_TRUE; - } + // TIZEN_ONLY(20220223): Set child_has_map flag to parent when parent is set + // Update parent's child_has_map flag + _evas_object_parent_child_has_map_set(obj); + // evas_object_update_bounding_box(eo_obj, obj, NULL); } else diff --git a/src/lib/evas/canvas/evas_object_smart.c b/src/lib/evas/canvas/evas_object_smart.c index 406f5ed..43ac159 100644 --- a/src/lib/evas/canvas/evas_object_smart.c +++ b/src/lib/evas/canvas/evas_object_smart.c @@ -342,6 +342,12 @@ _efl_canvas_group_group_member_add(Eo *smart_obj, Evas_Smart_Data *o, Evas_Objec evas_object_update_bounding_box(eo_obj, obj, member_o); if (o->cb_member_added) efl_event_callback_call(smart_obj, EFL_CANVAS_GROUP_EVENT_MEMBER_ADDED, eo_obj); + + // TIZEN_ONLY(20220223): Set child_has_map flag to parent when parent is set + // Update parent's child_has_map flag if it is necessary + if (obj->child_has_map || (obj->map && obj->map->cur.usemap)) + _evas_object_parent_child_has_map_set(obj); + // } EAPI void diff --git a/src/lib/evas/include/evas_private.h b/src/lib/evas/include/evas_private.h index a824517..e26e3f2 100755 --- a/src/lib/evas/include/evas_private.h +++ b/src/lib/evas/include/evas_private.h @@ -1424,6 +1424,9 @@ void evas_render_proxy_subrender(Evas *eo_e, void *output, Evas_Object *eo_sourc Eina_Bool evas_map_inside_get(const Evas_Map *m, Evas_Coord x, Evas_Coord y); Eina_Bool evas_map_coords_get(const Evas_Map *m, double x, double y, double *mx, double *my, int grab); +// TIZEN_ONLY(20220223): Set child_has_map flag to parent when parent is set +void _evas_object_parent_child_has_map_set(Evas_Object_Protected_Data *obj); +// Eina_Bool evas_object_map_update(Evas_Object *obj, int x, int y, int imagew, int imageh, int uvw, int uvh); void evas_map_object_move_diff_set(Evas_Map *m, Evas_Coord diff_x, Evas_Coord diff_y); -- 2.7.4