Dnd is relative to the background evas/modules, so feed a new drag

with container, not zone.


SVN revision: 14701
This commit is contained in:
sebastid 2005-05-10 22:05:02 +00:00 committed by sebastid
parent eb907d88ac
commit 6fd2d5fe41
5 changed files with 24 additions and 30 deletions

View File

@ -2492,7 +2492,7 @@ _e_border_cb_mouse_move(void *data, int type, void *event)
E_Drag *drag; E_Drag *drag;
Evas_Coord w, h; Evas_Coord w, h;
drag = e_drag_new(bd->zone, drag = e_drag_new(bd->zone->container,
"enlightenment/border", bd, "enlightenment/border", bd,
NULL, NULL,
a->path, "icon"); a->path, "icon");

View File

@ -3,11 +3,6 @@
*/ */
#include "e.h" #include "e.h"
/*
* TODO:
* - check with multiple zones!
*/
/* local subsystem functions */ /* local subsystem functions */
static void _e_drag_free(E_Drag *drag); static void _e_drag_free(E_Drag *drag);
@ -120,7 +115,7 @@ e_dnd_shutdown(void)
} }
E_Drag* E_Drag*
e_drag_new(E_Zone *zone, e_drag_new(E_Container *container,
const char *type, void *data, const char *type, void *data,
void (*finished_cb)(E_Drag *drag, int dropped), void (*finished_cb)(E_Drag *drag, int dropped),
const char *icon_path, const char *icon) const char *icon_path, const char *icon)
@ -135,14 +130,14 @@ e_drag_new(E_Zone *zone,
drag->w = 24; drag->w = 24;
drag->h = 24; drag->h = 24;
drag->layer = 250; drag->layer = 250;
drag->zone = zone; drag->container = container;
e_object_ref(E_OBJECT(drag->container));
if (e_canvas_engine_decide(e_config->evas_engine_drag) == if (e_canvas_engine_decide(e_config->evas_engine_drag) ==
E_EVAS_ENGINE_GL_X11) E_EVAS_ENGINE_GL_X11)
{ {
drag->ecore_evas = ecore_evas_gl_x11_new(NULL, drag->ecore_evas = ecore_evas_gl_x11_new(NULL,
drag->zone->container->win, drag->container->win,
drag->zone->x + drag->x, drag->x, drag->y,
drag->zone->y + drag->y,
drag->w, drag->h); drag->w, drag->h);
ecore_evas_gl_x11_direct_resize_set(drag->ecore_evas, 1); ecore_evas_gl_x11_direct_resize_set(drag->ecore_evas, 1);
drag->evas_win = ecore_evas_gl_x11_window_get(drag->ecore_evas); drag->evas_win = ecore_evas_gl_x11_window_get(drag->ecore_evas);
@ -150,24 +145,22 @@ e_drag_new(E_Zone *zone,
else else
{ {
drag->ecore_evas = ecore_evas_software_x11_new(NULL, drag->ecore_evas = ecore_evas_software_x11_new(NULL,
drag->zone->container->win, drag->container->win,
drag->zone->x + drag->x, drag->x, drag->y,
drag->zone->y + drag->y,
drag->w, drag->h); drag->w, drag->h);
ecore_evas_software_x11_direct_resize_set(drag->ecore_evas, 1); ecore_evas_software_x11_direct_resize_set(drag->ecore_evas, 1);
drag->evas_win = ecore_evas_software_x11_window_get(drag->ecore_evas); drag->evas_win = ecore_evas_software_x11_window_get(drag->ecore_evas);
} }
e_canvas_add(drag->ecore_evas); e_canvas_add(drag->ecore_evas);
drag->shape = e_container_shape_add(drag->zone->container); drag->shape = e_container_shape_add(drag->container);
e_container_shape_move(drag->shape, drag->zone->x + drag->x, drag->zone->y + drag->y); e_container_shape_move(drag->shape, drag->x, drag->y);
e_container_shape_resize(drag->shape, drag->w, drag->h); e_container_shape_resize(drag->shape, drag->w, drag->h);
drag->evas = ecore_evas_get(drag->ecore_evas); drag->evas = ecore_evas_get(drag->ecore_evas);
e_container_window_raise(drag->zone->container, drag->evas_win, drag->layer); e_container_window_raise(drag->container, drag->evas_win, drag->layer);
ecore_x_window_shape_events_select(drag->evas_win, 1); ecore_x_window_shape_events_select(drag->evas_win, 1);
ecore_evas_name_class_set(drag->ecore_evas, "E", "_e_drag_window"); ecore_evas_name_class_set(drag->ecore_evas, "E", "_e_drag_window");
ecore_evas_title_set(drag->ecore_evas, "E Drag"); ecore_evas_title_set(drag->ecore_evas, "E Drag");
e_object_ref(E_OBJECT(drag->zone));
ecore_evas_shaped_set(drag->ecore_evas, 1); ecore_evas_shaped_set(drag->ecore_evas, 1);
@ -211,11 +204,11 @@ e_drag_move(E_Drag *drag, int x, int y)
drag->x = x; drag->x = x;
drag->y = y; drag->y = y;
ecore_evas_move(drag->ecore_evas, ecore_evas_move(drag->ecore_evas,
drag->zone->x + drag->x, drag->x,
drag->zone->y + drag->y); drag->y);
e_container_shape_move(drag->shape, e_container_shape_move(drag->shape,
drag->zone->x + drag->x, drag->x,
drag->zone->y + drag->y); drag->y);
} }
void void
@ -239,9 +232,9 @@ e_drag_start(E_Drag *drag)
{ {
Evas_List *l; Evas_List *l;
_drag_win = ecore_x_window_input_new(drag->zone->container->win, _drag_win = ecore_x_window_input_new(drag->container->win,
drag->zone->container->x, drag->zone->container->y, drag->container->x, drag->container->y,
drag->zone->container->w, drag->zone->container->h); drag->container->w, drag->container->h);
ecore_x_window_show(_drag_win); ecore_x_window_show(_drag_win);
ecore_x_pointer_confine_grab(_drag_win); ecore_x_pointer_confine_grab(_drag_win);
ecore_x_keyboard_grab(_drag_win); ecore_x_keyboard_grab(_drag_win);
@ -405,7 +398,7 @@ _e_drag_free(E_Drag *drag)
{ {
_draggies = evas_list_remove(_draggies, drag); _draggies = evas_list_remove(_draggies, drag);
e_object_unref(E_OBJECT(drag->zone)); e_object_unref(E_OBJECT(drag->container));
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);

View File

@ -26,7 +26,7 @@ struct _E_Drag
struct { struct {
void (*finished)(E_Drag *drag, int dropped); void (*finished)(E_Drag *drag, int dropped);
} cb; } cb;
E_Zone *zone; E_Container *container;
Ecore_Evas *ecore_evas; Ecore_Evas *ecore_evas;
Evas *evas; Evas *evas;
Ecore_X_Window evas_win; Ecore_X_Window evas_win;
@ -85,7 +85,7 @@ EAPI int e_dnd_shutdown(void);
EAPI int e_dnd_active(void); EAPI int e_dnd_active(void);
EAPI E_Drag* e_drag_new(E_Zone *zone, const char *type, void *data, EAPI E_Drag* e_drag_new(E_Container *container, const char *type, void *data,
void (*finished_cb)(E_Drag *drag, int dropped), void (*finished_cb)(E_Drag *drag, int dropped),
const char *icon_path, const char *icon); const char *icon_path, const char *icon);
EAPI void e_drag_show(E_Drag *drag); EAPI void e_drag_show(E_Drag *drag);

View File

@ -16,7 +16,8 @@ static Evas_List *_e_popup_list = NULL;
int int
e_popup_init(void) e_popup_init(void)
{ {
_e_popup_window_shape_handler = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_SHAPE, _e_popup_cb_window_shape, NULL); _e_popup_window_shape_handler = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_SHAPE,
_e_popup_cb_window_shape, NULL);
return 1; return 1;
} }

View File

@ -1249,7 +1249,7 @@ _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(e_zone_current_get(ic->ibb->con), d = e_drag_new(ic->ibb->con,
"enlightenment/eapp", ic->app, _ibar_bar_cb_finished, "enlightenment/eapp", ic->app, _ibar_bar_cb_finished,
ic->app->path, "icon"); ic->app->path, "icon");
e_drag_resize(d, ic->ibb->ibar->conf->iconsize, ic->ibb->ibar->conf->iconsize); e_drag_resize(d, ic->ibb->ibar->conf->iconsize, ic->ibb->ibar->conf->iconsize);