raster pushed a commit to branch efl-1.22.

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

commit 85491a6847517ba4d05b09a74e67ad9e18e97a29
Author: Carsten Haitzler (Rasterman) <[email protected]>
Date:   Sat Jun 15 09:38:06 2019 +0100

    evas optimization - fix the "start in list middle" case
    
    i missed 1 rare case where we start in the middle of the list and have
    to walk to the end. testing didnt show it up. fix. this fixes up that
    case in b5ed76ba9f22ea659e9e6a3daa32c68354920455
---
 src/lib/evas/canvas/evas_events.c | 29 +++++++++++++++++------------
 1 file changed, 17 insertions(+), 12 deletions(-)

diff --git a/src/lib/evas/canvas/evas_events.c 
b/src/lib/evas/canvas/evas_events.c
index 19bcf2811c..ee31ef5ac2 100644
--- a/src/lib/evas/canvas/evas_events.c
+++ b/src/lib/evas/canvas/evas_events.c
@@ -369,7 +369,8 @@ _evas_event_object_list_raw_in_get(Evas *eo_e, Eina_List 
*in,
                                    const Eina_Inlist *ilist,
                                    const Eina_List *list,
                                    Evas_Object *stop,
-                                   int x, int y, int *no_rep, Eina_Bool source)
+                                   int x, int y, int *no_rep, Eina_Bool source,
+                                   Eina_Bool must_walk_last)
 {
    Evas_Object_Protected_Data *obj = NULL;
    DDD_STATIC int spaces = 0;
@@ -379,7 +380,11 @@ _evas_event_object_list_raw_in_get(Evas *eo_e, Eina_List 
*in,
    spaces++;
    if (ilist)
      {
-        for (obj = _EINA_INLIST_CONTAINER(obj, ilist->last);
+        Eina_Inlist *last;
+
+        if (must_walk_last) last = eina_inlist_last(ilist);
+        else last = ilist->last;
+        for (obj = _EINA_INLIST_CONTAINER(obj, last);
              obj;
              obj = _EINA_INLIST_CONTAINER(obj, EINA_INLIST_GET(obj)->prev))
           {
@@ -500,14 +505,14 @@ _evas_event_source_mouse_down_events(Evas_Object *eo_obj, 
Evas *eo_e,
                   proxy_write->src_event_in = 
_evas_event_object_list_raw_in_get
                      (eo_e, proxy_write->src_event_in,
                       evas_object_smart_members_get_direct(eo_src), NULL,
-                      NULL, ev->cur.x, ev->cur.y, &no_rep, EINA_TRUE);
+                      NULL, ev->cur.x, ev->cur.y, &no_rep, EINA_TRUE, 
EINA_FALSE);
                }
              else if (src->is_event_parent)
                {
                   proxy_write->src_event_in = 
_evas_event_object_list_raw_in_get
                      (eo_e, proxy_write->src_event_in,
                       NULL, evas_object_event_grabber_members_list(eo_src),
-                      NULL, ev->cur.x, ev->cur.y, &no_rep, EINA_TRUE);
+                      NULL, ev->cur.x, ev->cur.y, &no_rep, EINA_TRUE, 
EINA_FALSE);
                }
              else
                proxy_write->src_event_in = 
eina_list_append(proxy_write->src_event_in, eo_src);
@@ -699,14 +704,14 @@ _evas_event_source_mouse_move_events(Evas_Object *eo_obj, 
Evas *eo_e,
           {
              int no_rep = 0;
              ins = _evas_event_object_list_raw_in_get(eo_e, ins, 
evas_object_smart_members_get_direct(eo_src),
-                                                      NULL, NULL, ev->cur.x, 
ev->cur.y, &no_rep, EINA_TRUE);
+                                                      NULL, NULL, ev->cur.x, 
ev->cur.y, &no_rep, EINA_TRUE, EINA_FALSE);
           }
         else if (src->is_event_parent)
           {
              int no_rep = 0;
              ins = _evas_event_object_list_raw_in_get(eo_e, ins, NULL,
                                                       
evas_object_event_grabber_members_list(eo_src),
-                                                      NULL, ev->cur.x, 
ev->cur.y, &no_rep, EINA_TRUE);
+                                                      NULL, ev->cur.x, 
ev->cur.y, &no_rep, EINA_TRUE, EINA_FALSE);
           }
         else
           ins = eina_list_append(ins, eo_src);
@@ -1147,14 +1152,14 @@ 
_evas_event_source_multi_move_events(Evas_Object_Protected_Data *obj, Evas_Publi
              int no_rep = 0;
              ins = _evas_event_object_list_raw_in_get
                    (eo_e, ins, evas_object_smart_members_get_direct(eo_src), 
NULL, NULL,
-                    ev->cur.x, ev->cur.y, &no_rep, EINA_TRUE);
+                    ev->cur.x, ev->cur.y, &no_rep, EINA_TRUE, EINA_FALSE);
           }
         if (src->is_event_parent)
           {
              int no_rep = 0;
              ins = _evas_event_object_list_raw_in_get
                    (eo_e, ins, NULL, 
evas_object_event_grabber_members_list(eo_src), NULL,
-                    ev->cur.x, ev->cur.y, &no_rep, EINA_TRUE);
+                    ev->cur.x, ev->cur.y, &no_rep, EINA_TRUE, EINA_FALSE);
           }
         else
           ins = eina_list_append(ins, eo_src);
@@ -1233,14 +1238,14 @@ _evas_event_source_mouse_in_events(Evas_Object *eo_obj, 
Evas *eo_e,
      {
         int no_rep = 0;
         ins = _evas_event_object_list_raw_in_get(eo_e, ins, 
evas_object_smart_members_get_direct(eo_src),
-                                                 NULL, NULL, ev->cur.x, 
ev->cur.y, &no_rep, EINA_TRUE);
+                                                 NULL, NULL, ev->cur.x, 
ev->cur.y, &no_rep, EINA_TRUE, EINA_FALSE);
 
      }
    else if (src->is_event_parent)
      {
         int no_rep = 0;
         ins = _evas_event_object_list_raw_in_get(eo_e, ins, NULL, 
evas_object_event_grabber_members_list(eo_src),
-                                                 NULL, ev->cur.x, ev->cur.y, 
&no_rep, EINA_TRUE);
+                                                 NULL, ev->cur.x, ev->cur.y, 
&no_rep, EINA_TRUE, EINA_FALSE);
 
      }
    else
@@ -1358,7 +1363,7 @@ _evas_event_object_list_in_get(Evas *eo_e, Eina_List *in,
                                int x, int y, int *no_rep, Eina_Bool source)
 {
    return _evas_event_object_list_raw_in_get(eo_e, in, ilist, list, stop, x, y,
-                                             no_rep, source);
+                                             no_rep, source, EINA_FALSE);
 }
 
 static Eina_List *
@@ -2397,7 +2402,7 @@ nogrep:
              ins = _evas_event_object_list_raw_in_get(eo_e, NULL,
                                                       
EINA_INLIST_GET(below_obj), NULL, NULL,
                                                       pdata->seat->x, 
pdata->seat->y,
-                                                      &norep, EINA_FALSE);
+                                                      &norep, EINA_FALSE, 
EINA_TRUE);
           }
 
         EINA_LIST_FOREACH(copy, l, eo_obj)

-- 


Reply via email to