discomfitor pushed a commit to branch master.

http://git.enlightenment.org/core/enlightenment.git/commit/?id=2f7e22ccf4f525d9be65921bb584771c033a253a

commit 2f7e22ccf4f525d9be65921bb584771c033a253a
Author: Mike Blumenkrantz <[email protected]>
Date:   Mon Aug 8 11:31:28 2016 -0400

    move new version of e_comp_top_window_at_xy_get() to dnd, restore old 
version
    
    this resolves pointer-based focus issues introduced while attempting to
    fix dnd-related bugs
    
    ref a4a2f6b09e88d555826a3f3b57bd8621c4b1752e
    ref 1a982fd72afc0aebaea5fd10f9acd08841291d60
---
 src/bin/e_comp.c | 17 ++++-------------
 src/bin/e_dnd.c  | 26 ++++++++++++++++++++++++--
 2 files changed, 28 insertions(+), 15 deletions(-)

diff --git a/src/bin/e_comp.c b/src/bin/e_comp.c
index 82a2c2a..7fc6a2b 100644
--- a/src/bin/e_comp.c
+++ b/src/bin/e_comp.c
@@ -1477,22 +1477,13 @@ E_API Ecore_Window
 e_comp_top_window_at_xy_get(Evas_Coord x, Evas_Coord y)
 {
    E_Client *ec;
-   Eina_List *objs, *l;
    Evas_Object *o;
 
    EINA_SAFETY_ON_NULL_RETURN_VAL(e_comp, 0);
-   objs = evas_objects_at_xy_get(e_comp->evas, x, y, 0, 0);
-   if (!objs) return e_comp->ee_win;
-   EINA_LIST_FOREACH(objs, l, o)
-     {
-        ec = evas_object_data_get(o, "E_Client");
-        if (ec)
-          {
-             eina_list_free(objs);
-             return e_client_util_pwin_get(ec);
-          }
-     }
-   eina_list_free(objs);
+   o = evas_object_top_at_xy_get(e_comp->evas, x, y, 0, 0);
+   if (!o) return e_comp->ee_win;
+   ec = evas_object_data_get(o, "E_Client");
+   if (ec) return e_client_util_pwin_get(ec);
    return e_comp->ee_win;
 }
 
diff --git a/src/bin/e_dnd.c b/src/bin/e_dnd.c
index b6ad29d..91a9735 100644
--- a/src/bin/e_dnd.c
+++ b/src/bin/e_dnd.c
@@ -829,6 +829,28 @@ _e_dnd_object_layer_get(E_Drop_Handler *h)
    return adjust;
 }
 
+static Ecore_Window
+_dnd_top_window_at_xy_get(Evas_Coord x, Evas_Coord y)
+{
+   E_Client *ec;
+   Eina_List *objs, *l;
+   Evas_Object *o;
+
+   objs = evas_objects_at_xy_get(e_comp->evas, x, y, 0, 0);
+   if (!objs) return e_comp->ee_win;
+   EINA_LIST_FOREACH(objs, l, o)
+     {
+        ec = evas_object_data_get(o, "E_Client");
+        if (ec)
+          {
+             eina_list_free(objs);
+             return e_client_util_pwin_get(ec);
+          }
+     }
+   eina_list_free(objs);
+   return e_comp->ee_win;
+}
+
 static int
 _e_drag_update(Ecore_Window root, int x, int y, unsigned int action)
 {
@@ -845,7 +867,7 @@ _e_drag_update(Ecore_Window root, int x, int y, unsigned 
int action)
 
 //   double t1 = ecore_time_get(); ////
    if (_drag_current && !_xdnd)
-     win = e_comp_top_window_at_xy_get(x, y);
+     win = _dnd_top_window_at_xy_get(x, y);
    else
      win = root;
 
@@ -969,7 +991,7 @@ _e_drag_end(int x, int y)
    int dropped = 0;
 
    if (!_drag_current) return;
-   win = e_comp_top_window_at_xy_get(x, y);
+   win = _dnd_top_window_at_xy_get(x, y);
    zone = e_comp_zone_xy_get(x, y);
    /* Pass -1, -1, so that it is possible to drop at the edge. */
    if (zone) e_zone_flip_coords_handle(zone, -1, -1);

-- 


Reply via email to