Enlightenment CVS committal

Author  : sebastid
Project : e17
Module  : apps/e

Dir     : e17/apps/e/src/bin


Modified Files:
        e_border.c e_dnd.c e_dnd.h 


Log Message:
Dragging icon from border to pager now works! But since the menu
doesn't work when dragging is enabled, dragging is disabled.
For those who want dragging just remove the #if

===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_border.c,v
retrieving revision 1.154
retrieving revision 1.155
diff -u -3 -r1.154 -r1.155
--- e_border.c  25 Apr 2005 19:38:15 -0000      1.154
+++ e_border.c  25 Apr 2005 20:56:52 -0000      1.155
@@ -3,14 +3,6 @@
  */
 #include "e.h"
 
-typedef struct _E_Border_Fake_Mouse_Up_Info E_Border_Fake_Mouse_Up_Info;
-
-struct _E_Border_Fake_Mouse_Up_Info
-{
-   E_Border *border;
-   int       button;
-};
-
 //#define INOUTDEBUG 1
 
 #define RESIZE_NONE 0
@@ -114,7 +106,7 @@
 static void _e_border_reorder_after(E_Border *bd, E_Border *after);
 static void _e_border_reorder_before(E_Border *bd, E_Border *before);
 
-static void _e_border_fake_mouse_up_cb(void *data);
+static void _e_border_drag_cb(void *data, void *event);
 
 /* local subsystem globals */
 static Evas_List *handlers = NULL;
@@ -1960,12 +1952,9 @@
 _e_border_cb_signal_drag(void *data, Evas_Object *obj, const char *emission, 
const char *source)
 {
    E_Border *bd;
-   E_Border_Fake_Mouse_Up_Info *info;
 
    bd = data;
 
-#if 0
-   printf("drag_start %s %s\n", emission, source);
    if ((bd->client.icccm.name) && (bd->client.icccm.class))
      {
        E_App *a;
@@ -1974,17 +1963,11 @@
                                         bd->client.icccm.class);
        if (a)
          {
+            e_drag_callback_set(bd, _e_border_drag_cb);
             e_drag_start(bd->zone, "enlightenment/border", bd, 
                          a->path, "icon");
-
-            info = E_NEW(E_Border_Fake_Mouse_Up_Info, 1);
-            info->border = bd;
-            info->button = 1;
-            e_object_ref(E_OBJECT(info->border));
-            ecore_job_add(_e_border_fake_mouse_up_cb, info);
          }
      }
-#endif
 }
 
 static int
@@ -2763,8 +2746,10 @@
                                        _e_border_cb_signal_resize_stop, bd);
        edje_object_signal_callback_add(o, "action", "*",
                                        _e_border_cb_signal_action, bd);
+#if 0
        edje_object_signal_callback_add(o, "drag", "*",
                                        _e_border_cb_signal_drag, bd);
+#endif
        if (bd->focused)
          edje_object_signal_emit(bd->bg_object, "active", "");
        evas_object_move(o, 0, 0);
@@ -3713,7 +3698,7 @@
 
    desk = data;
    bd = e_object_data_get(E_OBJECT(m));
-   if ((bd) && (desk))
+   if ((bd) && (desk) && (bd->desk != desk))
      {
        e_border_desk_set(bd, desk);
        e_border_hide(bd, 1);
@@ -4011,15 +3996,18 @@
 }
 
 static void
-_e_border_fake_mouse_up_cb(void *data)
+_e_border_drag_cb(void *data, void *event)
 {
-   E_Border_Fake_Mouse_Up_Info *info;
-   
-   info = data;
-   if (info)
-     {
-       evas_event_feed_mouse_up(info->border->bg_evas, info->button, 
EVAS_BUTTON_NONE, NULL);
-       e_object_unref(E_OBJECT(info->border));
-       free(info);
-     }
+   E_Drag_Event *ev;
+   E_Border *bd;
+
+   ev = event;
+   bd = data;
+
+   printf("_e_border_drag_cb\n");
+
+   if (ev->drag)
+     evas_event_feed_mouse_move(bd->bg_evas, ev->x, ev->y, NULL);
+   evas_event_feed_mouse_up(bd->bg_evas, 1, EVAS_BUTTON_NONE, NULL);
 }
+
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_dnd.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- e_dnd.c     25 Apr 2005 18:02:25 -0000      1.4
+++ e_dnd.c     25 Apr 2005 20:56:52 -0000      1.5
@@ -13,6 +13,10 @@
 static char *drag_type;
 static void *drag_data;
 
+static int  drag;
+static void (*drag_cb)(void *data, void *event);
+static void *drag_cb_data;
+
 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);
 
@@ -75,7 +79,8 @@
 }
 
 void
-e_drag_start(E_Zone *zone, const char *type, void *data, const char 
*icon_path, const char *icon)
+e_drag_start(E_Zone *zone, const char *type, void *data,
+            const char *icon_path, const char *icon)
 {
    int w, h;
 
@@ -86,6 +91,8 @@
    ecore_x_pointer_confine_grab(drag_win);
    ecore_x_keyboard_grab(drag_win);
 
+   drag = 0;
+
    if (drag_ee)
      {
        e_canvas_del(drag_ee);
@@ -120,6 +127,8 @@
    int w, h;
 
    if (!drag_ee) return;
+
+   drag = 1;
    
    evas_object_geometry_get(drag_obj, NULL, NULL, &w, &h);
    evas_object_show(drag_obj);
@@ -132,9 +141,7 @@
 e_drag_end(int x, int y)
 {
    Evas_List *l;
-   E_Drop_Event *e;
-
-   printf("drag_end\n");
+   E_Drop_Event *ev;
 
    evas_object_del(drag_obj);
    if (drag_ee)
@@ -147,10 +154,11 @@
    ecore_x_keyboard_ungrab();
    ecore_x_window_del(drag_win);
 
-   e = E_NEW(E_Drop_Event, 1);
-   e->data = drag_data;
-   e->x = x;
-   e->y = y;
+   ev = E_NEW(E_Drop_Event, 1);
+   if (!ev) goto end;
+   ev->data = drag_data;
+   ev->x = x;
+   ev->y = y;
 
    for (l = drop_handlers; l; l = l->next)
      {
@@ -161,16 +169,24 @@
        if ((x >= h->x) && (x < h->x + h->w) && (y >= h->y) && (y < h->y + h->h)
            && (!strcmp(h->type, drag_type)))
          {
-            h->func(h->data, drag_type, e);
+            h->func(h->data, drag_type, ev);
          }
      }
 
-   free(e);
+   free(ev);
+end:
    free(drag_type);
    drag_type = NULL;
    drag_data = NULL;
 }
 
+void
+e_drag_callback_set(void *data, void (*func)(void *data, void *event))
+{
+   drag_cb = func;
+   drag_cb_data = data;
+} 
+
 E_Drop_Handler *
 e_drop_handler_add(void *data, void (*func)(void *data, const char *type, void 
*drop), const char *type, int x, int y, int w, int h)
 {
@@ -209,6 +225,22 @@
 
    e_drag_end(ev->x, ev->y);
 
+   if (drag_cb)
+     {
+       E_Drag_Event *e;
+       
+       e = E_NEW(E_Drag_Event, 1);
+       if (e)
+         {
+            e->drag = drag;
+            e->x = ev->x;
+            e->y = ev->y;
+            (*drag_cb)(drag_cb_data, e);
+            drag_cb = NULL;
+            free(e);
+         }
+     }
+
    return 1;
 }
 
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_dnd.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- e_dnd.h     25 Apr 2005 18:02:25 -0000      1.3
+++ e_dnd.h     25 Apr 2005 20:56:52 -0000      1.4
@@ -6,6 +6,7 @@
 
 typedef struct _E_Drop_Handler E_Drop_Handler;
 typedef struct _E_Drop_Event   E_Drop_Event;
+typedef struct _E_Drag_Event   E_Drag_Event;
 
 #else
 #ifndef E_DND_H
@@ -25,14 +26,24 @@
    int x, y;
 };
 
+struct _E_Drag_Event
+{
+   int drag;
+   int x, y;
+};
+
 EAPI int  e_dnd_init(void);
 EAPI int  e_dnd_shutdown(void);
 
-EAPI void e_drag_start(E_Zone *zone, const char *type, void *data, const char 
*icon_path, const char *icon);
+EAPI void e_drag_start(E_Zone *zone, const char *type, void *data,
+                      const char *icon_path, const char *icon);
 EAPI void e_drag_update(int x, int y);
 EAPI void e_drag_end(int x, int y);
+EAPI void e_drag_callback_set(void *data, void (*func)(void *data, void 
*event));
 
-EAPI E_Drop_Handler *e_drop_handler_add(void *data, void (*func)(void *data, 
const char *type, void *event_info), const char *type, int x, int y, int w, int 
h);
+EAPI E_Drop_Handler *e_drop_handler_add(void *data,
+                                       void (*func)(void *data, const char 
*type, void *event_info),
+                                       const char *type, int x, int y, int w, 
int h);
 EAPI void e_drop_handler_del(E_Drop_Handler *handler);
 
 #endif




-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to