Fix dnd working with reference coords.

SVN revision: 54383
This commit is contained in:
Sebastian Dransfeld 2010-11-09 21:14:38 +00:00
parent 0bae6927e5
commit 32a8f5160d
5 changed files with 10 additions and 41 deletions

View File

@ -1266,21 +1266,6 @@ e_gadcon_client_viewport_geometry_get(E_Gadcon_Client *gcc, int *x, int *y, int
return 1; return 1;
} }
/*
* position x, y is in viewport coords, return is in object coords
*/
EAPI int
e_gadcon_client_object_position_get(E_Gadcon_Client *gcc, int x, int y, int *rx, int *ry)
{
int xx = 0, yy = 0;
if (gcc->o_box) evas_object_geometry_get(gcc->o_box, &xx, &yy, NULL, NULL);
else if (gcc->o_base) evas_object_geometry_get(gcc->o_base, &xx, &yy, NULL, NULL);
if (rx) *rx = x + xx;
if (ry) *ry = y + yy;
return 1;
}
EAPI E_Zone * EAPI E_Zone *
e_gadcon_client_zone_get(E_Gadcon_Client *gcc) e_gadcon_client_zone_get(E_Gadcon_Client *gcc)
{ {

View File

@ -286,7 +286,6 @@ EAPI void e_gadcon_client_autoscroll_cb_set(E_Gadcon_Client *gcc, vo
EAPI void e_gadcon_client_resizable_set(E_Gadcon_Client *gcc, int resizable); EAPI void e_gadcon_client_resizable_set(E_Gadcon_Client *gcc, int resizable);
EAPI int e_gadcon_client_geometry_get(E_Gadcon_Client *gcc, int *x, int *y, int *w, int *h); EAPI int e_gadcon_client_geometry_get(E_Gadcon_Client *gcc, int *x, int *y, int *w, int *h);
EAPI int e_gadcon_client_viewport_geometry_get(E_Gadcon_Client *gcc, int *x, int *y, int *w, int *h); EAPI int e_gadcon_client_viewport_geometry_get(E_Gadcon_Client *gcc, int *x, int *y, int *w, int *h);
EAPI int e_gadcon_client_object_position_get(E_Gadcon_Client *gcc, int x, int y, int *rx, int *ry);
EAPI E_Zone *e_gadcon_client_zone_get(E_Gadcon_Client *gcc); EAPI E_Zone *e_gadcon_client_zone_get(E_Gadcon_Client *gcc);
EAPI void e_gadcon_client_util_menu_items_append(E_Gadcon_Client *gcc, E_Menu *menu_main, E_Menu *menu_gadget, int flags); EAPI void e_gadcon_client_util_menu_items_append(E_Gadcon_Client *gcc, E_Menu *menu_main, E_Menu *menu_gadget, int flags);
EAPI void e_gadcon_client_util_menu_attach(E_Gadcon_Client *gcc); EAPI void e_gadcon_client_util_menu_attach(E_Gadcon_Client *gcc);

View File

@ -988,16 +988,13 @@ _ibar_inst_cb_scroll(void *data)
static void static void
_ibar_drop_position_update(Instance *inst, Evas_Coord x, Evas_Coord y) _ibar_drop_position_update(Instance *inst, Evas_Coord x, Evas_Coord y)
{ {
Evas_Coord xx, yy;
Evas_Coord ox, oy;
IBar_Icon *ic; IBar_Icon *ic;
inst->ibar->dnd_x = x; inst->ibar->dnd_x = x;
inst->ibar->dnd_y = y; inst->ibar->dnd_y = y;
if (inst->ibar->o_drop) e_box_unpack(inst->ibar->o_drop); if (inst->ibar->o_drop) e_box_unpack(inst->ibar->o_drop);
e_gadcon_client_object_position_get(inst->gcc, x, y, &xx, &yy); ic = _ibar_icon_at_coord(inst->ibar, x, y);
ic = _ibar_icon_at_coord(inst->ibar, xx, yy);
/* This handles autoscrolling bars that would otherwise prevent us /* This handles autoscrolling bars that would otherwise prevent us
* from dropping in the very last spot in the ibar. This is not * from dropping in the very last spot in the ibar. This is not
@ -1027,11 +1024,11 @@ _ibar_drop_position_update(Instance *inst, Evas_Coord x, Evas_Coord y)
evas_object_geometry_get(ic->o_holder, &ix, &iy, &iw, &ih); evas_object_geometry_get(ic->o_holder, &ix, &iy, &iw, &ih);
if (e_box_orientation_get(inst->ibar->o_box)) if (e_box_orientation_get(inst->ibar->o_box))
{ {
if ((x + xx) < (ix + (iw / 2))) before = 1; if (x < (ix + (iw / 2))) before = 1;
} }
else else
{ {
if ((y + yy) < (iy + (ih / 2))) before = 1; if (y < (iy + (ih / 2))) before = 1;
} }
if (before) if (before)
e_box_pack_before(inst->ibar->o_box, inst->ibar->o_drop, ic->o_holder); e_box_pack_before(inst->ibar->o_box, inst->ibar->o_drop, ic->o_holder);

View File

@ -841,7 +841,6 @@ _ibox_inst_cb_scroll(void *data)
static void static void
_ibox_drop_position_update(Instance *inst, Evas_Coord x, Evas_Coord y) _ibox_drop_position_update(Instance *inst, Evas_Coord x, Evas_Coord y)
{ {
Evas_Coord xx, yy;
IBox_Icon *ic; IBox_Icon *ic;
inst->ibox->dnd_x = x; inst->ibox->dnd_x = x;
@ -849,8 +848,7 @@ _ibox_drop_position_update(Instance *inst, Evas_Coord x, Evas_Coord y)
if (inst->ibox->o_drop) if (inst->ibox->o_drop)
e_box_unpack(inst->ibox->o_drop); e_box_unpack(inst->ibox->o_drop);
e_gadcon_client_object_position_get(inst->gcc, x, y, &xx, &yy); ic = _ibox_icon_at_coord(inst->ibox, x, y);
ic = _ibox_icon_at_coord(inst->ibox, xx, yy);
inst->ibox->ic_drop_before = ic; inst->ibox->ic_drop_before = ic;
if (ic) if (ic)
{ {
@ -860,11 +858,11 @@ _ibox_drop_position_update(Instance *inst, Evas_Coord x, Evas_Coord y)
evas_object_geometry_get(ic->o_holder, &ix, &iy, &iw, &ih); evas_object_geometry_get(ic->o_holder, &ix, &iy, &iw, &ih);
if (e_box_orientation_get(inst->ibox->o_box)) if (e_box_orientation_get(inst->ibox->o_box))
{ {
if ((x + xx) < (ix + (iw / 2))) before = 1; if (x < (ix + (iw / 2))) before = 1;
} }
else else
{ {
if ((y + yy) < (iy + (ih / 2))) before = 1; if (y < (iy + (ih / 2))) before = 1;
} }
if (before) if (before)
e_box_pack_before(inst->ibox->o_box, inst->ibox->o_drop, ic->o_holder); e_box_pack_before(inst->ibox->o_box, inst->ibox->o_drop, ic->o_holder);

View File

@ -1932,17 +1932,11 @@ static void
_pager_update_drop_position(Pager *p, Evas_Coord x, Evas_Coord y) _pager_update_drop_position(Pager *p, Evas_Coord x, Evas_Coord y)
{ {
Pager_Desk *pd, *pd2; Pager_Desk *pd, *pd2;
Evas_Coord xx, yy;
int ox, oy;
Eina_List *l; Eina_List *l;
ox = oy = 0;
p->dnd_x = x; p->dnd_x = x;
p->dnd_y = y; p->dnd_y = y;
evas_object_geometry_get(p->o_table, &xx, &yy, NULL, NULL); pd = _pager_desk_at_coord(p, x, y);
if (p->inst) e_box_align_pixel_offset_get(p->inst->gcc->o_box, &ox, &oy);
pd = _pager_desk_at_coord(p, x + xx + ox, y + yy + oy);
if (pd == p->active_drop_pd) return; if (pd == p->active_drop_pd) return;
for (l = p->desks; l; l = l->next) for (l = p->desks; l; l = l->next)
{ {
@ -2032,8 +2026,6 @@ _pager_drop_cb_drop(void *data, const char *type, void *event_info)
Eina_List *l; Eina_List *l;
int dx = 0, dy = 0; int dx = 0, dy = 0;
Pager_Win *pw = NULL; Pager_Win *pw = NULL;
Evas_Coord xx, yy;
int x = 0, y = 0;
Evas_Coord wx, wy, wx2, wy2; Evas_Coord wx, wy, wx2, wy2;
Evas_Coord nx, ny; Evas_Coord nx, ny;
Pager *p; Pager *p;
@ -2043,9 +2035,7 @@ _pager_drop_cb_drop(void *data, const char *type, void *event_info)
if (act_popup) p = act_popup->pager; if (act_popup) p = act_popup->pager;
evas_object_geometry_get(p->o_table, &xx, &yy, NULL, NULL); pd = _pager_desk_at_coord(p, ev->x, ev->y);
if (p->inst) e_box_align_pixel_offset_get(p->inst->gcc->o_box, &x, &y);
pd = _pager_desk_at_coord(p, ev->x + xx + x, ev->y + yy + y);
if (pd) if (pd)
{ {
if (!strcmp(type, "enlightenment/pager_win")) if (!strcmp(type, "enlightenment/pager_win"))
@ -2086,8 +2076,8 @@ _pager_drop_cb_drop(void *data, const char *type, void *event_info)
int zx, zy; int zx, zy;
e_layout_coord_canvas_to_virtual(pd->o_layout, e_layout_coord_canvas_to_virtual(pd->o_layout,
ev->x + xx + x + dx, ev->x + dx,
ev->y + yy + y + dy, ev->y + dy,
&nx, &ny); &nx, &ny);
e_zone_useful_geometry_get(pd->desk->zone, e_zone_useful_geometry_get(pd->desk->zone,
&zx, &zy, NULL, NULL); &zx, &zy, NULL, NULL);