jaehyun pushed a commit to branch master.

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

commit 0b27fd8dfddd5c305d6d186dda8cef0dc6b8c172
Author: Jaehyun Cho <jae_hyun....@samsung.com>
Date:   Thu Aug 2 18:16:46 2018 +0900

    evas_events: Fix to set mouse_in state to all pointers in the seat.
    
    Summary:
    mouse coordinate is set by seat.
    Therefore, mouse_in state should be set based on seat.
    As a result, mouse_in state of all pointers in the seat should be
    updated at the same time.
    
    Reviewers: eagleeye, devilhorns, zmike
    
    Reviewed By: eagleeye, devilhorns, zmike
    
    Subscribers: devilhorns, Hermet, kimcinoo, cedric, iscaro, zmike, 
#committers
    
    Tags: #efl
    
    Differential Revision: https://phab.enlightenment.org/D6699
---
 src/lib/evas/canvas/evas_events.c | 45 +++++++++++++++++++++++++++------------
 1 file changed, 31 insertions(+), 14 deletions(-)

diff --git a/src/lib/evas/canvas/evas_events.c 
b/src/lib/evas/canvas/evas_events.c
index 3a27cf5b65..b670c60e02 100644
--- a/src/lib/evas/canvas/evas_events.c
+++ b/src/lib/evas/canvas/evas_events.c
@@ -555,6 +555,23 @@ _evas_event_source_mouse_down_events(Evas_Object *eo_obj, 
Evas *eo_e,
 }
 
 static void
+_evas_event_mouse_in_set(Evas_Pointer_Seat *pseat,
+                         Evas_Object_Protected_Data *obj, Eina_Bool mouse_in)
+{
+   Evas_Pointer_Data *pdata;
+   Evas_Object_Pointer_Data *obj_pdata;
+
+   if ((!pseat) || (!obj)) return;
+
+   EINA_INLIST_FOREACH(pseat->pointers, pdata)
+     {
+        obj_pdata = _evas_object_pointer_data_get(pdata, obj);
+        if (obj_pdata)
+          obj_pdata->mouse_in = mouse_in;
+     }
+}
+
+static void
 _evas_event_source_mouse_move_events(Evas_Object *eo_obj, Evas *eo_e,
                                      Efl_Input_Pointer *parent_ev,
                                      Evas_Pointer_Data *pdata,
@@ -639,7 +656,7 @@ _evas_event_source_mouse_move_events(Evas_Object *eo_obj, 
Evas *eo_e,
              if ((obj_pdata->mouse_grabbed == 0) && (!e->delete_me))
                {
                   if (obj_pdata->mouse_in) continue; /* FIXME: dubious logic! 
*/
-                  obj_pdata->mouse_in = 0;
+                  _evas_event_mouse_in_set(pdata->seat, child, 0);
                   if (e->is_frozen) continue;
                   ev->cur = curpt_real;
                   _evas_event_havemap_adjust_f(eo_child, child, &ev->cur, 
obj_pdata->mouse_grabbed);
@@ -702,7 +719,7 @@ _evas_event_source_mouse_move_events(Evas_Object *eo_obj, 
Evas *eo_e,
                }
              else if (obj_pdata->mouse_in)
                {
-                  obj_pdata->mouse_in = 0;
+                  _evas_event_mouse_in_set(pdata->seat, child, 0);
                   if (e->is_frozen) continue;
                   ev->cur = curpt;
                   _evas_event_havemap_adjust_f(eo_child, child, &ev->cur, 
obj_pdata->mouse_grabbed);
@@ -731,7 +748,7 @@ _evas_event_source_mouse_move_events(Evas_Object *eo_obj, 
Evas *eo_e,
                 {
                    if (!obj_pdata->mouse_in)
                      {
-                        obj_pdata->mouse_in = 1;
+                        _evas_event_mouse_in_set(pdata->seat, child, 1);
                         if (e->is_frozen) continue;
                         ev->cur = curpt;
                         _evas_event_havemap_adjust_f(eo_child, child, 
&ev->cur, obj_pdata->mouse_grabbed);
@@ -1222,7 +1239,7 @@ _evas_event_source_mouse_in_events(Evas_Object *eo_obj, 
Evas *eo_e,
         if (!eina_list_data_find(src->proxy->src_event_in, eo_child))
           {
              if (obj_pdata->mouse_in) continue;
-             obj_pdata->mouse_in = 1;
+             _evas_event_mouse_in_set(pdata->seat, child, 1);
              ev->cur = point;
              _evas_event_havemap_adjust_f(eo_child, child, &ev->cur, 
obj_pdata->mouse_grabbed);
              ev->action = EFL_POINTER_ACTION_IN;
@@ -1292,7 +1309,7 @@ _evas_event_source_mouse_out_events(Evas_Object *eo_obj, 
Evas *eo_e,
           }
 
         if (!obj_pdata->mouse_in) continue;
-        obj_pdata->mouse_in = 0;
+        _evas_event_mouse_in_set(pdata->seat, child, 0);
         if (child->delete_me) continue;
 
         ev->cur = point;
@@ -1620,7 +1637,7 @@ _post_up_handle(Evas_Public_Data *e, Efl_Input_Pointer 
*parent_ev,
                   continue;
                }
              if (!obj_pdata->mouse_in) continue;
-             obj_pdata->mouse_in = 0;
+             _evas_event_mouse_in_set(pdata->seat, obj, 0);
              if (!e->is_frozen)
                {
                   ev->cur.x = pdata->seat->x;
@@ -1658,7 +1675,7 @@ _post_up_handle(Evas_Public_Data *e, Efl_Input_Pointer 
*parent_ev,
                        continue;
                     }
                   if (obj_pdata->mouse_in) continue;
-                  obj_pdata->mouse_in = 1;
+                  _evas_event_mouse_in_set(pdata->seat, obj_itr, 1);
                   if (e->is_frozen) continue;
                   ev->cur.x = pdata->seat->x;
                   ev->cur.y = pdata->seat->y;
@@ -2199,7 +2216,7 @@ _canvas_event_feed_mouse_move_internal(Evas_Public_Data 
*e, Efl_Input_Pointer_Da
              if ((obj_pdata->mouse_grabbed == 0) && (!e->delete_me))
                {
                   if (!obj_pdata->mouse_in) continue;
-                  obj_pdata->mouse_in = 0;
+                  _evas_event_mouse_in_set(pdata->seat, obj, 0);
                   if (obj->delete_me || e->is_frozen) continue;
                   pdata->seat->object.in = 
eina_list_remove(pdata->seat->object.in, eo_obj);
                   ev->cur = point;
@@ -2259,7 +2276,7 @@ _canvas_event_feed_mouse_move_internal(Evas_Public_Data 
*e, Efl_Input_Pointer_Da
              /* otherwise it has left the object */
              else if (obj_pdata->mouse_in)
                {
-                  obj_pdata->mouse_in = 0;
+                  _evas_event_mouse_in_set(pdata->seat, obj, 0);
                   if (e->is_frozen) continue;
                   ev->cur = point;
                   _evas_event_havemap_adjust_f(eo_obj, obj, &ev->cur, 
obj_pdata->mouse_grabbed);
@@ -2293,7 +2310,7 @@ _canvas_event_feed_mouse_move_internal(Evas_Public_Data 
*e, Efl_Input_Pointer_Da
                     }
                   if (!obj_pdata->mouse_in)
                     {
-                       obj_pdata->mouse_in = 1;
+                       _evas_event_mouse_in_set(pdata->seat, obj, 1);
                        if (e->is_frozen) continue;
                        ev->cur = point;
                        _evas_event_havemap_adjust_f(eo_obj, obj, &ev->cur, 
obj_pdata->mouse_grabbed);
@@ -2404,7 +2421,7 @@ nogrep:
                {
                   /* otherwise it has left the object */
                   if (!obj_pdata->mouse_in) continue;
-                  obj_pdata->mouse_in = 0;
+                  _evas_event_mouse_in_set(pdata->seat, obj, 0);
                   if (e->is_frozen) continue;
                   ev->cur = point;
                   _evas_event_havemap_adjust_f(eo_obj, obj, &ev->cur, 
obj_pdata->mouse_grabbed);
@@ -2436,7 +2453,7 @@ nogrep:
                        continue;
                     }
                   if (obj_pdata->mouse_in) continue;
-                  obj_pdata->mouse_in = 1;
+                  _evas_event_mouse_in_set(pdata->seat, obj, 1);
                   if (e->is_frozen) continue;
                   ev->cur = point;
                   _evas_event_havemap_adjust_f(eo_obj, obj, &ev->cur, 
obj_pdata->mouse_grabbed);
@@ -2575,7 +2592,7 @@ _canvas_event_feed_mouse_in_internal(Evas *eo_e, 
Efl_Input_Pointer_Data *ev)
                   continue;
                }
              if (obj_pdata->mouse_in) continue;
-             obj_pdata->mouse_in = 1;
+             _evas_event_mouse_in_set(pdata->seat, obj, 1);
              ev->cur.x = pdata->seat->x;
              ev->cur.y = pdata->seat->y;
              _evas_event_havemap_adjust_f(eo_obj, obj, &ev->cur, 
obj_pdata->mouse_grabbed);
@@ -2672,7 +2689,7 @@ _canvas_event_feed_mouse_out_internal(Evas *eo_e, 
Efl_Input_Pointer_Data *ev)
              continue;
           }
         if (!obj_pdata->mouse_in) continue;
-        obj_pdata->mouse_in = 0;
+        _evas_event_mouse_in_set(pdata->seat, obj, 0);
         ev->cur.x = pdata->seat->x;
         ev->cur.y = pdata->seat->y;
         _evas_event_havemap_adjust_f(eo_obj, obj, &ev->cur, 
obj_pdata->mouse_grabbed);

-- 


Reply via email to