parent
ec95e5e0b0
commit
0922fa95c5
|
@ -261,7 +261,7 @@ e_drag_resize(E_Drag *drag, int w, int h)
|
|||
EAPI int
|
||||
e_dnd_active(void)
|
||||
{
|
||||
return (_drag_win != 0);
|
||||
return _drag_win != 0;
|
||||
}
|
||||
|
||||
EAPI int
|
||||
|
@ -317,15 +317,16 @@ e_drag_start(E_Drag *drag, int x, int y)
|
|||
EAPI int
|
||||
e_drag_xdnd_start(E_Drag *drag, int x, int y)
|
||||
{
|
||||
Ecore_X_Atom actions[] = {ECORE_X_DND_ACTION_MOVE, ECORE_X_DND_ACTION_PRIVATE,
|
||||
Ecore_X_Atom actions[] = {
|
||||
ECORE_X_DND_ACTION_MOVE, ECORE_X_DND_ACTION_PRIVATE,
|
||||
ECORE_X_DND_ACTION_COPY, ECORE_X_DND_ACTION_ASK,
|
||||
ECORE_X_DND_ACTION_LINK};
|
||||
ECORE_X_DND_ACTION_LINK
|
||||
};
|
||||
if (_drag_win) return 0;
|
||||
_drag_win = ecore_x_window_input_new(drag->container->win,
|
||||
drag->container->x, drag->container->y,
|
||||
drag->container->w, drag->container->h);
|
||||
|
||||
|
||||
ecore_x_window_show(_drag_win);
|
||||
if (!e_grabinput_get(_drag_win, 1, _drag_win))
|
||||
{
|
||||
|
@ -601,27 +602,33 @@ _e_drag_coords_update(const E_Drop_Handler *h, int *dx, int *dy)
|
|||
case E_GADCON_TYPE:
|
||||
e_gadcon_canvas_zone_geometry_get((E_Gadcon *)(h->obj), &px, &py, NULL, NULL);
|
||||
break;
|
||||
|
||||
case E_GADCON_CLIENT_TYPE:
|
||||
e_gadcon_canvas_zone_geometry_get(((E_Gadcon_Client *)(h->obj))->gadcon, &px, &py, NULL, NULL);
|
||||
break;
|
||||
|
||||
case E_WIN_TYPE:
|
||||
px = ((E_Win *)(h->obj))->x;
|
||||
py = ((E_Win *)(h->obj))->y;
|
||||
break;
|
||||
|
||||
case E_ZONE_TYPE:
|
||||
// zone based drag targets are in a container thus their coords should be
|
||||
// screen-relative as containers just cover the screen
|
||||
// px = ((E_Zone *)(h->obj))->x;
|
||||
// py = ((E_Zone *)(h->obj))->y;
|
||||
break;
|
||||
|
||||
case E_BORDER_TYPE:
|
||||
px = ((E_Border *)(h->obj))->x + ((E_Border *)(h->obj))->fx.x;
|
||||
py = ((E_Border *)(h->obj))->y + ((E_Border *)(h->obj))->fx.y;
|
||||
break;
|
||||
|
||||
case E_POPUP_TYPE:
|
||||
px = ((E_Popup *)(h->obj))->x;
|
||||
py = ((E_Popup *)(h->obj))->y;
|
||||
break;
|
||||
|
||||
/* FIXME: add more types as needed */
|
||||
default:
|
||||
break;
|
||||
|
@ -644,25 +651,31 @@ _e_drag_win_get(const E_Drop_Handler *h, int xdnd)
|
|||
if (xdnd) hwin = e_gadcon_xdnd_window_get((E_Gadcon *)(h->obj));
|
||||
else hwin = e_gadcon_dnd_window_get((E_Gadcon *)(h->obj));
|
||||
break;
|
||||
|
||||
case E_GADCON_CLIENT_TYPE:
|
||||
if (xdnd) hwin = e_gadcon_xdnd_window_get(((E_Gadcon_Client *)(h->obj))->gadcon);
|
||||
else hwin = e_gadcon_dnd_window_get(((E_Gadcon_Client *)(h->obj))->gadcon);
|
||||
break;
|
||||
|
||||
case E_WIN_TYPE:
|
||||
hwin = ((E_Win *)(h->obj))->evas_win;
|
||||
break;
|
||||
|
||||
case E_ZONE_TYPE:
|
||||
/* Not quite sure about this, probably need to set up
|
||||
* E_Container to pass DND events from event_win to bg_win. */
|
||||
// hwin = ((E_Zone *)(h->obj))->container->event_win;
|
||||
hwin = ((E_Zone *)(h->obj))->container->event_win;
|
||||
break;
|
||||
|
||||
case E_BORDER_TYPE:
|
||||
hwin = ((E_Border *)(h->obj))->event_win;
|
||||
break;
|
||||
|
||||
case E_POPUP_TYPE:
|
||||
hwin = ((E_Popup *)(h->obj))->evas_win;
|
||||
break;
|
||||
|
||||
/* FIXME: add more types as needed */
|
||||
default:
|
||||
break;
|
||||
|
@ -694,10 +707,12 @@ _e_drag_win_show(E_Drop_Handler *h)
|
|||
shelf = e_gadcon_shelf_get((E_Gadcon *)(h->obj));
|
||||
if (shelf) e_shelf_toggle(shelf, 1);
|
||||
break;
|
||||
|
||||
case E_GADCON_CLIENT_TYPE:
|
||||
shelf = e_gadcon_shelf_get(((E_Gadcon_Client *)(h->obj))->gadcon);
|
||||
if (shelf) e_shelf_toggle(shelf, 1);
|
||||
break;
|
||||
|
||||
/* FIXME: add more types as needed */
|
||||
default:
|
||||
break;
|
||||
|
@ -718,10 +733,12 @@ _e_drag_win_hide(E_Drop_Handler *h)
|
|||
shelf = e_gadcon_shelf_get((E_Gadcon *)(h->obj));
|
||||
if (shelf) e_shelf_toggle(shelf, 0);
|
||||
break;
|
||||
|
||||
case E_GADCON_CLIENT_TYPE:
|
||||
shelf = e_gadcon_shelf_get(((E_Gadcon_Client *)(h->obj))->gadcon);
|
||||
if (shelf) e_shelf_toggle(shelf, 0);
|
||||
break;
|
||||
|
||||
/* FIXME: add more types as needed */
|
||||
default:
|
||||
break;
|
||||
|
@ -1067,7 +1084,6 @@ _e_drag_free(E_Drag *drag)
|
|||
ecore_x_window_shadow_tree_flush();
|
||||
}
|
||||
|
||||
|
||||
static Eina_Bool
|
||||
_e_dnd_cb_window_shape(void *data __UNUSED__, int ev_type __UNUSED__, void *ev)
|
||||
{
|
||||
|
@ -1435,3 +1451,4 @@ _e_dnd_cb_event_dnd_selection(void *data __UNUSED__, int type __UNUSED__, void *
|
|||
E_FREE(_xdnd);
|
||||
return ECORE_CALLBACK_PASS_ON;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue