forked from enlightenment/enlightenment
parent
e72ac08b35
commit
4697bedac1
|
@ -6,6 +6,7 @@
|
||||||
/* local subsystem functions */
|
/* local subsystem functions */
|
||||||
|
|
||||||
static void _e_drag_free(E_Drag *drag);
|
static void _e_drag_free(E_Drag *drag);
|
||||||
|
static int _e_dnd_cb_window_shape(void *data, int type, void *event);
|
||||||
|
|
||||||
static int _e_dnd_cb_mouse_up(void *data, int type, void *event);
|
static int _e_dnd_cb_mouse_up(void *data, int type, void *event);
|
||||||
static int _e_dnd_cb_mouse_move(void *data, int type, void *event);
|
static int _e_dnd_cb_mouse_move(void *data, int type, void *event);
|
||||||
|
@ -22,7 +23,7 @@ static Evas_List *_drop_handlers = NULL;
|
||||||
|
|
||||||
static Ecore_X_Window _drag_win = 0;
|
static Ecore_X_Window _drag_win = 0;
|
||||||
|
|
||||||
static Evas_List *_draggies = NULL;
|
static Evas_List *_drag_list = NULL;
|
||||||
static E_Drag *_drag_current = NULL;
|
static E_Drag *_drag_current = NULL;
|
||||||
|
|
||||||
/* externally accessible functions */
|
/* externally accessible functions */
|
||||||
|
@ -40,6 +41,9 @@ e_dnd_init(void)
|
||||||
_event_handlers = evas_list_append(_event_handlers,
|
_event_handlers = evas_list_append(_event_handlers,
|
||||||
ecore_event_handler_add(ECORE_X_EVENT_MOUSE_MOVE,
|
ecore_event_handler_add(ECORE_X_EVENT_MOUSE_MOVE,
|
||||||
_e_dnd_cb_mouse_move, NULL));
|
_e_dnd_cb_mouse_move, NULL));
|
||||||
|
_event_handlers = evas_list_append(_event_handlers,
|
||||||
|
ecore_event_handler_add(ECORE_X_EVENT_WINDOW_SHAPE,
|
||||||
|
_e_dnd_cb_window_shape, NULL));
|
||||||
|
|
||||||
for (l = e_manager_list(); l; l = l->next)
|
for (l = e_manager_list(); l; l = l->next)
|
||||||
{
|
{
|
||||||
|
@ -80,7 +84,7 @@ e_dnd_shutdown(void)
|
||||||
{
|
{
|
||||||
Evas_List *l;
|
Evas_List *l;
|
||||||
|
|
||||||
for (l = _draggies; l;)
|
for (l = _drag_list; l;)
|
||||||
{
|
{
|
||||||
E_Drag *drag;
|
E_Drag *drag;
|
||||||
|
|
||||||
|
@ -88,8 +92,8 @@ e_dnd_shutdown(void)
|
||||||
l = l->next;
|
l = l->next;
|
||||||
e_object_del(E_OBJECT(drag));
|
e_object_del(E_OBJECT(drag));
|
||||||
}
|
}
|
||||||
evas_list_free(_draggies);
|
evas_list_free(_drag_list);
|
||||||
_draggies = NULL;
|
_drag_list = NULL;
|
||||||
|
|
||||||
for (l = _event_handlers; l; l = l->next)
|
for (l = _event_handlers; l; l = l->next)
|
||||||
{
|
{
|
||||||
|
@ -170,11 +174,13 @@ e_drag_new(E_Container *container,
|
||||||
evas_object_move(drag->object, 0, 0);
|
evas_object_move(drag->object, 0, 0);
|
||||||
evas_object_resize(drag->object, drag->w, drag->h);
|
evas_object_resize(drag->object, drag->w, drag->h);
|
||||||
ecore_evas_resize(drag->ecore_evas, drag->w, drag->h);
|
ecore_evas_resize(drag->ecore_evas, drag->w, drag->h);
|
||||||
|
|
||||||
drag->type = strdup(type);
|
drag->type = strdup(type);
|
||||||
drag->data = data;
|
drag->data = data;
|
||||||
drag->cb.finished = finished_cb;
|
drag->cb.finished = finished_cb;
|
||||||
|
|
||||||
|
_drag_list = evas_list_append(_drag_list, drag);
|
||||||
|
|
||||||
return drag;
|
return drag;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -189,6 +195,7 @@ e_drag_object_set(E_Drag *drag, Evas_Object *object)
|
||||||
{
|
{
|
||||||
if (drag->object) evas_object_del(drag->object);
|
if (drag->object) evas_object_del(drag->object);
|
||||||
drag->object = object;
|
drag->object = object;
|
||||||
|
evas_object_resize(drag->object, drag->w, drag->h);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -196,6 +203,7 @@ e_drag_show(E_Drag *drag)
|
||||||
{
|
{
|
||||||
if (drag->visible) return;
|
if (drag->visible) return;
|
||||||
drag->visible = 1;
|
drag->visible = 1;
|
||||||
|
evas_object_show(drag->object);
|
||||||
ecore_evas_show(drag->ecore_evas);
|
ecore_evas_show(drag->ecore_evas);
|
||||||
e_container_shape_show(drag->shape);
|
e_container_shape_show(drag->shape);
|
||||||
}
|
}
|
||||||
|
@ -205,6 +213,7 @@ e_drag_hide(E_Drag *drag)
|
||||||
{
|
{
|
||||||
if (!drag->visible) return;
|
if (!drag->visible) return;
|
||||||
drag->visible = 0;
|
drag->visible = 0;
|
||||||
|
evas_object_hide(drag->object);
|
||||||
ecore_evas_hide(drag->ecore_evas);
|
ecore_evas_hide(drag->ecore_evas);
|
||||||
e_container_shape_hide(drag->shape);
|
e_container_shape_hide(drag->shape);
|
||||||
}
|
}
|
||||||
|
@ -229,6 +238,7 @@ e_drag_resize(E_Drag *drag, int w, int h)
|
||||||
if ((drag->w == w) && (drag->h == h)) return;
|
if ((drag->w == w) && (drag->h == h)) return;
|
||||||
drag->h = h;
|
drag->h = h;
|
||||||
drag->w = w;
|
drag->w = w;
|
||||||
|
evas_object_resize(drag->object, drag->w, drag->h);
|
||||||
ecore_evas_resize(drag->ecore_evas, drag->w, drag->h);
|
ecore_evas_resize(drag->ecore_evas, drag->w, drag->h);
|
||||||
e_container_shape_resize(drag->shape, drag->w, drag->h);
|
e_container_shape_resize(drag->shape, drag->w, drag->h);
|
||||||
}
|
}
|
||||||
|
@ -412,14 +422,45 @@ e_drop_handler_del(E_Drop_Handler *handler)
|
||||||
free(handler);
|
free(handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
e_drag_idler_before(void)
|
||||||
|
{
|
||||||
|
Evas_List *l;
|
||||||
|
|
||||||
|
for (l = _drag_list; l; l = l->next)
|
||||||
|
{
|
||||||
|
E_Drag *drag;
|
||||||
|
|
||||||
|
drag = l->data;
|
||||||
|
if (drag->need_shape_export)
|
||||||
|
{
|
||||||
|
Ecore_X_Rectangle *rects;
|
||||||
|
int num;
|
||||||
|
|
||||||
|
rects = ecore_x_window_shape_rectangles_get(drag->evas_win, &num);
|
||||||
|
if (rects)
|
||||||
|
{
|
||||||
|
e_container_shape_rects_set(drag->shape, rects, num);
|
||||||
|
free(rects);
|
||||||
|
}
|
||||||
|
drag->need_shape_export = 0;
|
||||||
|
if (drag->visible)
|
||||||
|
e_container_shape_show(drag->shape);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* local subsystem functions */
|
/* local subsystem functions */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_e_drag_free(E_Drag *drag)
|
_e_drag_free(E_Drag *drag)
|
||||||
{
|
{
|
||||||
_draggies = evas_list_remove(_draggies, drag);
|
_drag_list = evas_list_remove(_drag_list, drag);
|
||||||
|
|
||||||
e_object_unref(E_OBJECT(drag->container));
|
e_object_unref(E_OBJECT(drag->container));
|
||||||
|
e_container_shape_hide(drag->shape);
|
||||||
|
e_object_del(E_OBJECT(drag->shape));
|
||||||
evas_object_del(drag->object);
|
evas_object_del(drag->object);
|
||||||
e_canvas_del(drag->ecore_evas);
|
e_canvas_del(drag->ecore_evas);
|
||||||
ecore_evas_free(drag->ecore_evas);
|
ecore_evas_free(drag->ecore_evas);
|
||||||
|
@ -427,6 +468,25 @@ _e_drag_free(E_Drag *drag)
|
||||||
free(drag);
|
free(drag);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int
|
||||||
|
_e_dnd_cb_window_shape(void *data, int ev_type, void *ev)
|
||||||
|
{
|
||||||
|
Evas_List *l;
|
||||||
|
Ecore_X_Event_Window_Shape *e;
|
||||||
|
|
||||||
|
e = ev;
|
||||||
|
for (l = _drag_list; l; l = l->next)
|
||||||
|
{
|
||||||
|
E_Drag *drag;
|
||||||
|
|
||||||
|
drag = l->data;
|
||||||
|
if (drag->evas_win == e->win)
|
||||||
|
drag->need_shape_export = 1;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
_e_dnd_cb_mouse_up(void *data, int type, void *event)
|
_e_dnd_cb_mouse_up(void *data, int type, void *event)
|
||||||
{
|
{
|
||||||
|
|
|
@ -37,6 +37,7 @@ struct _E_Drag
|
||||||
|
|
||||||
unsigned int layer;
|
unsigned int layer;
|
||||||
unsigned char visible : 1;
|
unsigned char visible : 1;
|
||||||
|
unsigned char need_shape_export : 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _E_Drop_Handler
|
struct _E_Drop_Handler
|
||||||
|
@ -88,6 +89,7 @@ EAPI void e_drag_show(E_Drag *drag);
|
||||||
EAPI void e_drag_hide(E_Drag *drag);
|
EAPI void e_drag_hide(E_Drag *drag);
|
||||||
EAPI void e_drag_move(E_Drag *drag, int x, int y);
|
EAPI void e_drag_move(E_Drag *drag, int x, int y);
|
||||||
EAPI void e_drag_resize(E_Drag *drag, int w, int h);
|
EAPI void e_drag_resize(E_Drag *drag, int w, int h);
|
||||||
|
EAPI void e_drag_idler_before(void);
|
||||||
|
|
||||||
EAPI void e_drag_start(E_Drag *drag);
|
EAPI void e_drag_start(E_Drag *drag);
|
||||||
EAPI void e_drag_update(int x, int y);
|
EAPI void e_drag_update(int x, int y);
|
||||||
|
|
|
@ -814,6 +814,7 @@ _e_main_cb_idler_before(void *data __UNUSED__)
|
||||||
e_focus_idler_before();
|
e_focus_idler_before();
|
||||||
e_border_idler_before();
|
e_border_idler_before();
|
||||||
e_popup_idler_before();
|
e_popup_idler_before();
|
||||||
|
e_drag_idler_before();
|
||||||
for (l = _e_main_idler_before_list; l; l = l->next)
|
for (l = _e_main_idler_before_list; l; l = l->next)
|
||||||
{
|
{
|
||||||
E_Before_Idler *eb;
|
E_Before_Idler *eb;
|
||||||
|
|
|
@ -1250,8 +1250,8 @@ _ibar_icon_cb_mouse_move(void *data, Evas *e, Evas_Object *obj, void *event_info
|
||||||
drag = 1;
|
drag = 1;
|
||||||
drag_start = 0;
|
drag_start = 0;
|
||||||
|
|
||||||
d = e_drag_new(ic->ibb->con,
|
d = e_drag_new(ic->ibb->con, "enlightenment/eapp",
|
||||||
"enlightenment/eapp", ic->app, _ibar_bar_cb_finished);
|
ic->app, _ibar_bar_cb_finished);
|
||||||
o = edje_object_add(e_drag_evas_get(d));
|
o = edje_object_add(e_drag_evas_get(d));
|
||||||
edje_object_file_set(o, ic->app->path, "icon");
|
edje_object_file_set(o, ic->app->path, "icon");
|
||||||
e_drag_object_set(d, o);
|
e_drag_object_set(d, o);
|
||||||
|
|
Loading…
Reference in New Issue