From 46cca0febffefc330ec5f037c1cf8e9c1e00a6ab Mon Sep 17 00:00:00 2001 From: Hosang Kim Date: Fri, 26 Oct 2018 20:28:03 +0900 Subject: [PATCH] evas: fix backward compatibility issue. Summary: Sometimes mouse_grabbed flag can not be zero. Before version of EFL, object has just one mouse_grabbed flag. But now we have a new feature, so object has list of pointer devices and each pointer device has mouse_grabbed flag. We need to check all of pointer devices mouse_grabbed flag. And if all of mouse_grabbed flag are zero, dispatch move event. Test Plan: {F3384050} gcc -o button_example_01 button_example_01.c `pkg-config --cflags --libs elementary` Reviewers: iscaro, zmike, Hermet Reviewed By: Hermet Subscribers: cedric, #reviewers, #committers Tags: #efl Differential Revision: https://phab.enlightenment.org/D7216 --- src/lib/evas/canvas/evas_object_main.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/lib/evas/canvas/evas_object_main.c b/src/lib/evas/canvas/evas_object_main.c index e0856b7561..d8a6fb42a6 100644 --- a/src/lib/evas/canvas/evas_object_main.c +++ b/src/lib/evas/canvas/evas_object_main.c @@ -2036,14 +2036,24 @@ _hide(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj) ((obj->map->cur.map) && (obj->map->cur.map->count == 4) && (obj->map->cur.usemap))) { Evas_Object_Pointer_Data *obj_pdata; - + Eina_Bool mouse_grabbed = EINA_FALSE; EINA_INLIST_FOREACH(obj->events->pointer_grabs, obj_pdata) { - if (!obj_pdata->mouse_grabbed && - evas_object_is_in_output_rect(eo_obj, obj, obj_pdata->evas_pdata->seat->x, - obj_pdata->evas_pdata->seat->y, - 1, 1)) - _evas_canvas_event_pointer_move_event_dispatch(obj->layer->evas, obj_pdata->evas_pdata, NULL); + if (obj_pdata->mouse_grabbed > 0) + { + mouse_grabbed = EINA_TRUE; + break; + } + } + if (!mouse_grabbed) + { + EINA_INLIST_FOREACH(obj->events->pointer_grabs, obj_pdata) + { + if (evas_object_is_in_output_rect(eo_obj, obj, obj_pdata->evas_pdata->seat->x, + obj_pdata->evas_pdata->seat->y, + 1, 1)) + _evas_canvas_event_pointer_move_event_dispatch(obj->layer->evas, obj_pdata->evas_pdata, NULL); + } } /* this is at odds to handling events when an obj is moved out of the mouse * ore resized out or clipped out. if mouse is grabbed - regardless of