DnD: generalize internal functions.

They were specific to X11 and should be used for Wayland too.
This commit is contained in:
Daniel Zaoui 2015-02-25 10:36:09 +02:00 committed by Daniel Zaoui
parent 703f86dfb4
commit ed8505ea01
1 changed files with 14 additions and 17 deletions

View File

@ -1224,25 +1224,22 @@ _x11_dropable_find(Ecore_X_Window win)
return NULL;
}
static Evas *
_x11_evas_get_from_xwin(Ecore_X_Window win)
{
/* Find the Evas connected to the window */
Dropable *dropable = _x11_dropable_find(win);
return dropable ? evas_object_evas_get(dropable->obj) : NULL;
}
static Eina_List *
_x11_dropable_list_geom_find(Ecore_X_Window win, Evas_Coord px, Evas_Coord py)
_dropable_list_geom_find(Evas *evas, Evas_Coord px, Evas_Coord py)
{
Eina_List *itr, *top_objects_list = NULL, *dropable_list = NULL;
Evas *evas = NULL;
Evas_Object *top_obj;
Dropable *dropable = NULL;
if (!drops) return NULL;
/* Find the Evas connected to the window */
EINA_LIST_FOREACH(drops, itr, dropable)
{
if (_x11_elm_widget_xwin_get(dropable->obj) == win)
{
evas = evas_object_evas_get(dropable->obj);
break;
}
}
if (!evas) return NULL;
/* We retrieve the (non-smart) objects pointed by (px, py) */
top_objects_list = evas_tree_objects_at_xy_get(evas, NULL, px, py);
@ -1292,7 +1289,7 @@ _x11_dropable_list_geom_find(Ecore_X_Window win, Evas_Coord px, Evas_Coord py)
}
static void
_x11_dropable_coords_adjust(Dropable *dropable, Evas_Coord *x, Evas_Coord *y)
_dropable_coords_adjust(Dropable *dropable, Evas_Coord *x, Evas_Coord *y)
{
Ecore_Evas *ee;
int ex = 0, ey = 0, ew = 0, eh = 0;
@ -1532,14 +1529,14 @@ _x11_dnd_position(void *data EINA_UNUSED, int etype EINA_UNUSED, void *ev)
dropable = _x11_dropable_find(pos->win);
if (dropable)
{
Eina_List *dropable_list;
Evas_Coord x, y, ox = 0, oy = 0;
act = _x11_dnd_action_map(pos->action);
x = pos->position.x;
y = pos->position.y;
_x11_dropable_coords_adjust(dropable, &x, &y);
dropable_list = _x11_dropable_list_geom_find(pos->win, x, y);
_dropable_coords_adjust(dropable, &x, &y);
Evas *evas = _x11_evas_get_from_xwin(pos->win);
Eina_List *dropable_list = evas ? _dropable_list_geom_find(evas, x, y) : NULL;
/* check if there is dropable (obj) can accept this drop */
if (dropable_list)
{
@ -1664,7 +1661,7 @@ _x11_dnd_drop(void *data EINA_UNUSED, int etype EINA_UNUSED, void *ev)
// - widget position
savedtypes.x = drop->position.x;
savedtypes.y = drop->position.y;
_x11_dropable_coords_adjust(dropable, &savedtypes.x, &savedtypes.y);
_dropable_coords_adjust(dropable, &savedtypes.x, &savedtypes.y);
cnp_debug("Drop position is %d,%d\n", savedtypes.x, savedtypes.y);