Enlightenment CVS committal Author : englebass Project : e17 Module : apps/e
Dir : e17/apps/e/src/bin Modified Files: e_border.c e_dnd.c e_dnd.h e_fm.c e_gadcon.c e_int_menus.c Log Message: Add a convert callback so that a drag can have several types. Make it possible to drag pager windows to the ibar. =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_border.c,v retrieving revision 1.564 retrieving revision 1.565 diff -u -3 -r1.564 -r1.565 --- e_border.c 29 Dec 2006 15:53:49 -0000 1.564 +++ e_border.c 3 Jan 2007 06:14:02 -0000 1.565 @@ -4705,7 +4705,7 @@ drag = e_drag_new(bd->zone->container, bd->x + bd->fx.x + x, bd->y + bd->fx.y + y, - drag_types, 1, bd, -1, NULL); + drag_types, 1, bd, -1, NULL, NULL); o = e_border_icon_add(bd, drag->evas); if (!o) { =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_dnd.c,v retrieving revision 1.54 retrieving revision 1.55 diff -u -3 -r1.54 -r1.55 --- e_dnd.c 29 Dec 2006 16:53:36 -0000 1.54 +++ e_dnd.c 3 Jan 2007 06:14:02 -0000 1.55 @@ -19,7 +19,7 @@ static void _e_drag_hide(E_Drag *drag); static void _e_drag_move(E_Drag *drag, int x, int y); static void _e_drag_coords_update(E_Drop_Handler *h, int *dx, int *dy, int *dw, int *dh); -static int _e_drag_win_matches(E_Drop_Handler *h, Ecore_X_Window win); +static int _e_drag_win_matches(E_Drop_Handler *h, Ecore_X_Window win); static void _e_drag_update(int x, int y); static void _e_drag_end(int x, int y); static void _e_drag_xdnd_end(int x, int y); @@ -141,6 +141,7 @@ e_drag_new(E_Container *container, int x, int y, const char **types, unsigned int num_types, void *data, int size, + void *(*convert_cb)(E_Drag *drag, const char *type), void (*finished_cb)(E_Drag *drag, int dropped)) { E_Drag *drag; @@ -194,6 +195,7 @@ drag->num_types = num_types; drag->data = data; drag->data_size = size; + drag->cb.convert = convert_cb; drag->cb.finished = finished_cb; _drag_list = evas_list_append(_drag_list, drag); @@ -246,7 +248,6 @@ e_drag_start(E_Drag *drag, int x, int y) { Evas_List *l; - int i; if (_drag_win) return 0; _drag_win = ecore_x_window_input_new(drag->container->win, @@ -267,14 +268,24 @@ for (l = _drop_handlers; l; l = l->next) { E_Drop_Handler *h; + int i, j; h = l->data; h->active = 0; + h->type = NULL; for (i = 0; i < h->num_types; i++) { - if (!strcmp(h->types[i], drag->types[0])) - h->active = 1; + for (j = 0; j < drag->num_types; j++) + { + if (!strcmp(h->types[i], drag->types[j])) + { + h->active = 1; + h->type = h->types[i]; + break; + } + } + if (h->active) break; } h->entered = 0; } @@ -621,18 +632,18 @@ if (!h->entered) { if (h->cb.enter) - h->cb.enter(h->cb.data, _drag_current->types[0], &enter_ev); + h->cb.enter(h->cb.data, h->type, &enter_ev); h->entered = 1; } if (h->cb.move) - h->cb.move(h->cb.data, _drag_current->types[0], &move_ev); + h->cb.move(h->cb.data, h->type, &move_ev); } else { if (h->entered) { if (h->cb.leave) - h->cb.leave(h->cb.data, _drag_current->types[0], &leave_ev); + h->cb.leave(h->cb.data, h->type, &leave_ev); h->entered = 0; } } @@ -659,18 +670,18 @@ if (!h->entered) { if (h->cb.enter) - h->cb.enter(h->cb.data, _xdnd->type, &enter_ev); + h->cb.enter(h->cb.data, h->type, &enter_ev); h->entered = 1; } if (h->cb.move) - h->cb.move(h->cb.data, _xdnd->type, &move_ev); + h->cb.move(h->cb.data, h->type, &move_ev); } else { if (h->entered) { if (h->cb.leave) - h->cb.leave(h->cb.data, _xdnd->type, &leave_ev); + h->cb.leave(h->cb.data, h->type, &leave_ev); h->entered = 0; } } @@ -684,7 +695,6 @@ E_Zone *zone; Evas_List *l; E_Event_Dnd_Drop ev; - const char *type = NULL; int dx, dy, dw, dh; Ecore_X_Window win, ignore_win[2]; @@ -715,9 +725,7 @@ ecore_x_window_del(_drag_win); _drag_win = 0; - ev.data = _drag_current->data; - type = _drag_current->types[0]; - if (ev.data) + if (_drag_current->data) { int dropped; @@ -735,7 +743,14 @@ ((h->cb.drop) && (E_INSIDE(x, y, dx, dy, dw, dh)))) { - h->cb.drop(h->cb.data, type, &ev); + if (_drag_current->cb.convert) + { + ev.data = _drag_current->cb.convert(_drag_current, + h->type); + } + else + ev.data = _drag_current->data; + h->cb.drop(h->cb.data, h->type, &ev); dropped = 1; } } @@ -765,7 +780,7 @@ if (h->entered) { if (h->cb.leave) - h->cb.leave(h->cb.data, type, &leave_ev); + h->cb.leave(h->cb.data, h->type, &leave_ev); h->entered = 0; } } @@ -777,7 +792,6 @@ { Evas_List *l; E_Event_Dnd_Drop ev; - const char *type = NULL; int dx, dy, dw, dh; Ecore_X_Window win, ignore_win[2]; @@ -793,7 +807,6 @@ win = ecore_x_window_at_xy_with_skip_get(x, y, NULL, 0); ev.data = _xdnd->data; - type = _xdnd->type; if (ev.data) { @@ -813,7 +826,7 @@ ((h->cb.drop) && (E_INSIDE(x, y, dx, dy, dw, dh)))) { - h->cb.drop(h->cb.data, type, &ev); + h->cb.drop(h->cb.data, h->type, &ev); dropped = 1; } } @@ -839,7 +852,7 @@ if (h->entered) { if (h->cb.leave) - h->cb.leave(h->cb.data, type, &leave_ev); + h->cb.leave(h->cb.data, h->type, &leave_ev); h->entered = 0; } } @@ -929,6 +942,7 @@ h = l->data; h->active = 0; + h->type = NULL; h->entered = 0; } for (i = 0; i < ev->num_types; i++) @@ -945,10 +959,15 @@ h = l->data; h->active = 0; + h->type = NULL; for (j = 0; j < h->num_types; j++) { if (!strcmp(h->types[j], _xdnd->type)) - h->active = 1; + { + h->active = 1; + h->type = _xdnd->type; + break; + } } h->entered = 0; @@ -1010,7 +1029,7 @@ if (h->entered) { if (h->cb.leave) - h->cb.leave(h->cb.data, _xdnd->type, leave_ev); + h->cb.leave(h->cb.data, h->type, leave_ev); h->entered = 0; } } =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_dnd.h,v retrieving revision 1.27 retrieving revision 1.28 diff -u -3 -r1.27 -r1.28 --- e_dnd.h 29 Dec 2006 16:53:36 -0000 1.27 +++ e_dnd.h 3 Jan 2007 06:14:02 -0000 1.28 @@ -36,7 +36,8 @@ E_Drag_Type type; struct { - void (*finished)(E_Drag *drag, int dropped); + void *(*convert)(E_Drag *drag, const char *type); + void (*finished)(E_Drag *drag, int dropped); } cb; E_Container *container; @@ -70,6 +71,7 @@ E_Object *obj; char **types; unsigned int num_types; + const char *type; int x, y, w, h; unsigned char active : 1; @@ -106,6 +108,7 @@ EAPI E_Drag *e_drag_new(E_Container *container, int x, int y, const char **types, unsigned int num_types, void *data, int size, + void *(*convert_cb)(E_Drag *drag, const char *type), void (*finished_cb)(E_Drag *drag, int dropped)); EAPI Evas *e_drag_evas_get(E_Drag *drag); EAPI void e_drag_object_set(E_Drag *drag, Evas_Object *object); =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_fm.c,v retrieving revision 1.120 retrieving revision 1.121 diff -u -3 -r1.120 -r1.121 --- e_fm.c 28 Dec 2006 14:31:00 -0000 1.120 +++ e_fm.c 3 Jan 2007 06:14:02 -0000 1.121 @@ -3518,7 +3518,7 @@ evas_list_free(sl); d = e_drag_new(con, x, y, drag_types, 1, - fsel, -1, _e_fm2_cb_drag_finished); + fsel, -1, NULL, _e_fm2_cb_drag_finished); o = edje_object_add(e_drag_evas_get(d)); if (ic->sd->config->view.mode == E_FM2_VIEW_MODE_LIST) { =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_gadcon.c,v retrieving revision 1.68 retrieving revision 1.69 diff -u -3 -r1.68 -r1.69 --- e_gadcon.c 2 Jan 2007 03:25:01 -0000 1.68 +++ e_gadcon.c 3 Jan 2007 06:14:02 -0000 1.69 @@ -1723,7 +1723,7 @@ e_object_ref(E_OBJECT(gcc)); drag = e_drag_new(gcc->gadcon->zone->container, gcc->drag.x, gcc->drag.y, - drag_types, 1, gcc, -1, _e_gadcon_cb_drag_finished); + drag_types, 1, gcc, -1, NULL, _e_gadcon_cb_drag_finished); o = gcc->client_class->func.icon(drag->evas); evas_object_geometry_get(o, NULL, NULL, &w, &h); if (!o) =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_int_menus.c,v retrieving revision 1.189 retrieving revision 1.190 diff -u -3 -r1.189 -r1.190 --- e_int_menus.c 30 Dec 2006 23:42:03 -0000 1.189 +++ e_int_menus.c 3 Jan 2007 06:14:02 -0000 1.190 @@ -639,7 +639,8 @@ evas_object_geometry_get(mi->icon_object, &x, &y, &w, &h); drag = e_drag_new(m->zone->container, x, y, - drag_types, 1, a, -1, _e_int_menus_apps_drag_finished); + drag_types, 1, a, -1, + NULL, _e_int_menus_apps_drag_finished); o = e_app_icon_add(a, e_drag_evas_get(drag)); e_drag_object_set(drag, o); ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys - and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs