summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Blumenkrantz <zmike@osg.samsung.com>2016-08-08 11:31:28 -0400
committerMike Blumenkrantz <zmike@osg.samsung.com>2016-08-08 11:31:28 -0400
commit2f7e22ccf4f525d9be65921bb584771c033a253a (patch)
tree4c8c78afc069d9201341704b999274c78ee157a9
parentb2d8803b95d138c6cde8c603eceaf1cbe90db2ff (diff)
downloadenlightenment-2f7e22ccf4f525d9be65921bb584771c033a253a.tar.gz
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
-rw-r--r--src/bin/e_comp.c17
-rw-r--r--src/bin/e_dnd.c26
2 files changed, 28 insertions, 15 deletions
diff --git a/src/bin/e_comp.c b/src/bin/e_comp.c
index 82a2c2a757..7fc6a2b7dd 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 b6ad29dc0a..91a97356c5 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);