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

Reply via email to