From 28a99e30bf507e2e43d9de92145dd64604b0b79a Mon Sep 17 00:00:00 2001 From: Godly T Alias Date: Wed, 3 Jul 2019 14:44:11 +0000 Subject: [PATCH] Evas events: Reduce grab count even in freezed state Decrement grab count of mouse event when mouse up happen during a freeze state.Currently as grab count is not reduced in this scenario, further touches gets ignored. Change-Id: Ieb2b33efa506258d0bd685464746c65bd9e5892c --- src/lib/evas/canvas/evas_events.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/lib/evas/canvas/evas_events.c b/src/lib/evas/canvas/evas_events.c index 18075cf..19d8346 100644 --- a/src/lib/evas/canvas/evas_events.c +++ b/src/lib/evas/canvas/evas_events.c @@ -1852,6 +1852,41 @@ _canvas_event_feed_mouse_up_internal(Evas_Public_Data *e, Efl_Input_Pointer_Data _evas_event_source_mouse_up_events(eo_obj, eo_e, evt, pdata, event_id, cancel); if (e->delete_me) break; } + else if (evas_event_freezes_through(eo_obj, obj) && + (obj->proxy->is_proxy) && (obj->proxy->src_events)) + { + Evas_Object *eo_src = _evas_object_image_source_get(eo_obj); + Evas_Object_Protected_Data *src = efl_data_scope_get(eo_src, EFL_CANVAS_OBJECT_CLASS); + Evas_Object_Protected_Data *child; + Evas_Object *eo_child; + Eina_List *copy_events, *l; + Evas_Object_Pointer_Data *obj_pdata; + + copy_events = evas_event_list_copy(src->proxy->src_event_in); + EINA_LIST_FOREACH(copy, l, eo_child) + { + Evas_Object_Pointer_Data *obj_pdata; + Evas_Object_Pointer_Mode pointer_mode; + + if (src->delete_me) break; + child = efl_data_scope_get(eo_child, EFL_CANVAS_OBJECT_CLASS); + obj_pdata = _evas_object_pointer_data_get(pdata, child); + if (!obj_pdata) + { + ERR("Could not find the object pointer data for device %p", + ev->device); + continue; + } + if (((obj_pdata->pointer_mode == EVAS_OBJECT_POINTER_MODE_AUTOGRAB) || + (obj_pdata->pointer_mode == EVAS_OBJECT_POINTER_MODE_NOGRAB_NO_REPEAT_UPDOWN)) && + (obj_pdata->mouse_grabbed > 0)) + { + obj_pdata->mouse_grabbed--; + pdata->seat->mouse_grabbed--; + } + } + eina_list_free(copy_events); + } if (pointer_mode == EVAS_OBJECT_POINTER_MODE_NOGRAB_NO_REPEAT_UPDOWN) { if ((!cancel) && (pdata->seat->nogrep > 0)) pdata->seat->nogrep--; -- 2.7.4