zmike pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=c001a8146bcc366780cd50fa51e8f91cfd2b1d5c

commit c001a8146bcc366780cd50fa51e8f91cfd2b1d5c
Author: Godly T.Alias <[email protected]>
Date:   Fri Jul 12 08:45:18 2019 -0400

    Evas Events: Decrement grab count on freeze state
    
    Summary:
    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.
    
    Signed-off-by: Godly T.Alias <[email protected]>
    
    Test Plan: (on scenario where proxy exists) mouse down -> freeze events -> 
mouse up -> unfreeze events
    
    Reviewers: cedric, raster, zmike, Hermet
    
    Reviewed By: zmike
    
    Subscribers: zmike, #reviewers, #committers
    
    Tags: #efl
    
    Differential Revision: https://phab.enlightenment.org/D9214
---
 src/lib/evas/canvas/evas_events.c | 32 ++++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)

diff --git a/src/lib/evas/canvas/evas_events.c 
b/src/lib/evas/canvas/evas_events.c
index 83c1f2fcd7..5ffcd1f9a2 100644
--- a/src/lib/evas/canvas/evas_events.c
+++ b/src/lib/evas/canvas/evas_events.c
@@ -1851,6 +1851,38 @@ _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;
+
+             if (src->delete_me) continue;
+             copy_events = evas_event_list_copy(src->proxy->src_event_in);
+             EINA_LIST_FREE(copy_events, eo_child)
+               {
+                  Evas_Object_Pointer_Data *obj_pdata;
+
+                  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--;
+                    }
+                }
+          }
         if (pointer_mode == EVAS_OBJECT_POINTER_MODE_NOGRAB_NO_REPEAT_UPDOWN)
           {
              if ((!cancel) && (pdata->seat->nogrep > 0)) pdata->seat->nogrep--;

-- 


Reply via email to