Enlightenment CVS committal

Author  : codewarrior
Project : e17
Module  : apps/e

Dir     : e17/apps/e/src/bin


Modified Files:
        e_fileman_smart.c e_fileman_smart.h 


Log Message:
- remove the E_Drag code for now, its not working
- start new xdnd implementation (not working now, but no more hangs)


===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_fileman_smart.c,v
retrieving revision 1.121
retrieving revision 1.122
diff -u -3 -r1.121 -r1.122
--- e_fileman_smart.c   22 Jan 2006 18:14:50 -0000      1.121
+++ e_fileman_smart.c   7 Feb 2006 01:52:02 -0000       1.122
@@ -128,6 +128,7 @@
 static void                _e_fm_icon_mouse_out_cb  (void *data, Evas *e, 
Evas_Object *obj, void *event_info);
 static void                _e_fm_icon_mouse_move_cb (void *data, Evas *e, 
Evas_Object *obj, void *event_info);
 static int                 _e_fm_win_mouse_up_cb    (void *data, int type, 
void *event);
+static int                 _e_fm_win_mouse_move_cb    (void *data, int type, 
void *event);
 
 static void                _e_fm_string_replace(const char *src, const char 
*key, const char *replacement, char *result, size_t resultsize);
 
@@ -139,12 +140,13 @@
 static void                _e_fm_icon_select_right(E_Fm_Smart_Data *sd);
 static void                _e_fm_icon_run(E_Fm_Smart_Data *sd);
 
-static int                 _e_fm_drop_enter_cb     (void *data, int type, void 
*event);
-static int                 _e_fm_drop_leave_cb     (void *data, int type, void 
*event);
-static int                 _e_fm_drop_position_cb  (void *data, int type, void 
*event);
-static int                 _e_fm_drop_drop_cb      (void *data, int type, void 
*event);
-static int                 _e_fm_drop_selection_cb (void *data, int type, void 
*event);
-static void                _e_fm_drop_done_cb      (E_Drag *drag, int dropped);
+static int                 _e_fm_xdnd_enter_cb     (void *data, int type, void 
*event);
+static int                 _e_fm_xdnd_leave_cb     (void *data, int type, void 
*event);
+static int                 _e_fm_xdnd_position_cb  (void *data, int type, void 
*event);
+static int                 _e_fm_xdnd_status_cb    (void *data, int type, void 
*event);
+static int                 _e_fm_xdnd_drop_cb      (void *data, int type, void 
*event);
+static int                 _e_fm_xdnd_selection_cb (void *data, int type, void 
*event);
+static int                 _e_fm_xdnd_finished_cb  (void *data, int type, void 
*event);
 
 static int                 _e_fm_files_sort_name_cb    (void *d1, void *d2);
 static int                 _e_fm_files_sort_modtime_cb (void *d1, void *d2);
@@ -162,6 +164,7 @@
 
 static int                                                              
_e_fm_init_assoc(E_Fm_Smart_Data *sd);
 static Ecore_Event_Handler *e_fm_mouse_up_handler = NULL;
+static Ecore_Event_Handler *e_fm_mouse_move_handler = NULL;
 static double               e_fm_grab_time = 0;
 static Evas_Smart          *e_fm_smart = NULL;
 static char                *meta_path = NULL;
@@ -586,24 +589,32 @@
 
    sd->event_handlers = evas_list_append(sd->event_handlers,
                                         
ecore_event_handler_add(ECORE_X_EVENT_XDND_ENTER,
-                                                                
_e_fm_drop_enter_cb,
+                                                                
_e_fm_xdnd_enter_cb,
                                                                 sd));
    sd->event_handlers = evas_list_append(sd->event_handlers,
                                         
ecore_event_handler_add(ECORE_X_EVENT_XDND_LEAVE,
-                                                                
_e_fm_drop_leave_cb,
+                                                                
_e_fm_xdnd_leave_cb,
+                                                                sd));
+   sd->event_handlers = evas_list_append(sd->event_handlers,
+                                        
ecore_event_handler_add(ECORE_X_EVENT_XDND_STATUS,
+                                                                
_e_fm_xdnd_status_cb,
                                                                 sd));
    sd->event_handlers = evas_list_append(sd->event_handlers,
                                         
ecore_event_handler_add(ECORE_X_EVENT_XDND_POSITION,
-                                                                
_e_fm_drop_position_cb,
+                                                                
_e_fm_xdnd_position_cb,
                                                                 sd));
    sd->event_handlers = evas_list_append(sd->event_handlers,
                                         
ecore_event_handler_add(ECORE_X_EVENT_XDND_DROP,
-                                                                
_e_fm_drop_drop_cb,
+                                                                
_e_fm_xdnd_drop_cb,
                                                                 sd));
    sd->event_handlers = evas_list_append(sd->event_handlers,
                                         
ecore_event_handler_add(ECORE_X_EVENT_SELECTION_NOTIFY,
-                                                                
_e_fm_drop_selection_cb,
+                                                                
_e_fm_xdnd_selection_cb,
                                                                 sd));
+   sd->event_handlers = evas_list_append(sd->event_handlers,
+                                        
ecore_event_handler_add(ECORE_X_EVENT_XDND_FINISHED,
+                                                                
_e_fm_xdnd_finished_cb,
+                                                                sd));   
    sd->monitor = NULL;
    sd->position = 0.0;
 
@@ -2412,37 +2423,51 @@
 
             if (((dx * dx) + (dy * dy)) > (100))
               {
-                 E_Drag *drag;
                  Evas_Object *o = NULL;
                  Evas_Coord x, y, w, h;
                  int cx, cy;
-                 char data[PATH_MAX];
-                 const char *drop_types[] = { "text/uri-list" };
-
-                 snprintf(data, sizeof(data), "file://%s", icon->file->path);
+                 char *data;
+                 char **drop_types;
+                 
+                 drop_types = calloc(1, sizeof(char*));
+                 drop_types[0] = strdup("text/uri-list");
+                 
+                 data = calloc(PATH_MAX, sizeof(char));
+                 snprintf(data, PATH_MAX * sizeof(char), "file://%s", 
icon->file->path);
 
                  ecore_evas_geometry_get(sd->win->ecore_evas, &cx, &cy, NULL, 
NULL);
                  evas_object_geometry_get(icon->icon_obj, &x, &y, &w, &h);
-                 drag = e_drag_new(sd->win->container, cx + x, cy + y,
-                                   drop_types, 1, strdup(data), strlen(data),
-                                   _e_fm_drop_done_cb);
+                 
+                 sd->drag.ecore_evas = ecore_evas_software_x11_new(0, 0, cx + 
x, cx + y, w, h);
+                 sd->drag.evas = ecore_evas_get(sd->drag.ecore_evas);
+                 sd->drag.win = 
ecore_evas_software_x11_window_get(sd->drag.ecore_evas);
+                 ecore_evas_shaped_set(sd->drag.ecore_evas, 1);
+                 
+                 sd->drag.image_object = e_fm_icon_add(sd->drag.evas);
+                 e_fm_icon_file_set(sd->drag.image_object, icon->file);
+                 e_fm_icon_title_set(sd->drag.image_object, "");
+                 if (!sd->drag.image_object)
+                   {
+                      sd->drag.image_object = 
evas_object_rectangle_add(sd->drag.evas);
+                      evas_object_color_set(sd->drag.image_object, 255, 255, 
255, 255);
+                   }
+                  evas_object_resize(sd->drag.image_object, w, h);
+                 evas_object_move(sd->drag.image_object, 0, 0);
+                 evas_object_show(sd->drag.image_object);
+                 
+                  e_fm_mouse_up_handler = 
ecore_event_handler_add(ECORE_X_EVENT_MOUSE_BUTTON_UP,
+                                                                 
_e_fm_win_mouse_up_cb, sd);
+                 
+                 e_fm_mouse_move_handler = 
ecore_event_handler_add(ECORE_X_EVENT_MOUSE_MOVE,
+                                                                   
_e_fm_win_mouse_move_cb, sd);
+                 
+                 ecore_x_pointer_confine_grab(sd->drag.win);
+                 ecore_x_keyboard_grab(sd->drag.win);
+                 ecore_x_dnd_aware_set(sd->drag.win, 1);
+                 ecore_x_mwm_borderless_set(sd->drag.win, 1);
+                 ecore_x_dnd_types_set(sd->drag.win, drop_types, 1);
+                 ecore_x_dnd_begin(sd->drag.win, data, PATH_MAX * 
sizeof(char));
 
-                 o = e_fm_icon_add(drag->evas);
-                 e_fm_icon_file_set(o, icon->file);
-                 e_fm_icon_title_set(o, "");
-                 evas_object_resize(o, w, h);
-
-                 if (!o)
-                   {
-                      // FIXME: fallback icon for drag
-                      o = evas_object_rectangle_add(drag->evas);
-                      evas_object_color_set(o, 255, 255, 255, 255);
-                   }
-                 e_drag_object_set(drag, o);
-
-                 e_drag_resize(drag, w, h);
-
-                 e_drag_xdnd_start(drag, sd->drag.x, sd->drag.y);
                  evas_event_feed_mouse_up(sd->evas, 1, EVAS_BUTTON_NONE, 
ev->timestamp, NULL);
                  sd->drag.start = 0;
               }
@@ -2451,36 +2476,51 @@
 }
 
 static int
-_e_fm_win_mouse_up_cb(void *data, int type, void *event)
+  _e_fm_win_mouse_move_cb(void *data, int type, void *event)
 {
-   Ecore_X_Event_Mouse_Button_Up *ev;
-   E_Fm_Icon *icon;
-   double t;
-   const char *name;
-
-   /* FIXME: DONT use ecore_x events for this. use evas callbacks! */
-   return 1;
+   Ecore_X_Event_Mouse_Move *ev;
+   E_Fm_Smart_Data *sd;
+   
+   printf("MOVE!!!\n");
+   
+   sd = data;
    ev = event;
-   icon = data;
-
-   t = ecore_time_get() - e_fm_grab_time;
-   if (t < 1.0) return 1;
-
-   name = e_entry_text_get(icon->sd->entry_obj);
-   e_fm_icon_edit_entry_set(icon->icon_obj, NULL);
-   evas_object_focus_set(icon->sd->entry_obj, 0);
-   evas_object_del(icon->sd->entry_obj);
-   icon->sd->entry_obj = NULL;
-
-   _e_fm_file_rename(icon, name);
+      
+   ecore_evas_show(sd->drag.ecore_evas);
+   ecore_evas_move(sd->drag.ecore_evas, ev->x , ev->y );
+   printf("moving window to %d %d\n", ev->x , ev->y );
+   return 1;
+}
 
+static int
+  _e_fm_win_mouse_up_cb(void *data, int type, void *event)
+{
+   Ecore_X_Event_Mouse_Button_Up *ev;
+   E_Fm_Smart_Data *sd;
+   
+   sd = data;
+   
+   printf("UP!\n");
+   
+   ecore_x_pointer_ungrab();
+   ecore_x_keyboard_ungrab();
+   
+   ecore_x_dnd_drop();
+   
    ecore_event_handler_del(e_fm_mouse_up_handler);
    e_fm_mouse_up_handler = NULL;
-
-   e_grabinput_release(icon->sd->win->evas_win, icon->sd->win->evas_win);
-   return 0;
+   
+   ecore_event_handler_del(e_fm_mouse_move_handler);
+   e_fm_mouse_move_handler = NULL;
+   
+   sd->drag.start = 0;
+   
+   ecore_evas_free(sd->drag.ecore_evas);
+   
+   return 1;
 }
 
+
 static void
 _e_fm_string_replace(const char *src, const char *key, const char 
*replacement, char *result, size_t resultsize)
 {
@@ -3162,7 +3202,7 @@
 }
 
 static int
-_e_fm_drop_enter_cb(void *data, int type, void *event)
+_e_fm_xdnd_enter_cb(void *data, int type, void *event)
 {
    Ecore_X_Event_Xdnd_Enter *ev;
    E_Fm_Smart_Data *sd;
@@ -3175,7 +3215,7 @@
 }
 
 static int
-_e_fm_drop_leave_cb(void *data, int type, void *event)
+_e_fm_xdnd_leave_cb(void *data, int type, void *event)
 {
    Ecore_X_Event_Xdnd_Leave *ev;
    E_Fm_Smart_Data *sd;
@@ -3188,7 +3228,20 @@
 }
 
 static int
-_e_fm_drop_position_cb(void *data, int type, void *event)
+_e_fm_xdnd_status_cb(void *data, int type, void *event)
+{
+   Ecore_X_Event_Xdnd_Leave *ev;
+   E_Fm_Smart_Data *sd;
+
+   ev = event;
+   sd = data;
+   if (ev->win != sd->win->evas_win) return 1;
+
+   return 1;
+}
+
+static int
+_e_fm_xdnd_position_cb(void *data, int type, void *event)
 {
    Ecore_X_Event_Xdnd_Position *ev;
    E_Fm_Smart_Data *sd;
@@ -3209,7 +3262,7 @@
 }
 
 static int
-_e_fm_drop_drop_cb(void *data, int type, void *event)
+_e_fm_xdnd_drop_cb(void *data, int type, void *event)
 {
    Ecore_X_Event_Xdnd_Drop *ev;
    E_Fm_Smart_Data *sd;
@@ -3224,7 +3277,7 @@
 }
 
 static int
-_e_fm_drop_selection_cb(void *data, int type, void *event)
+_e_fm_xdnd_selection_cb(void *data, int type, void *event)
 {
    Ecore_X_Event_Selection_Notify *ev;
    E_Fm_Smart_Data *sd;
@@ -3253,11 +3306,12 @@
    return 1;
 }
 
-static void
-_e_fm_drop_done_cb(E_Drag *drag, int dropped)
+static int
+_e_fm_xdnd_finished_cb(void *data, int type, void *event)
 {
    /* FIXME: If someone takes this internal drop, we might want to not free it 
*/
-   free(drag->data);
+
+   return 1;
 }
 
 /* sort functions */
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_fileman_smart.h,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -3 -r1.15 -r1.16
--- e_fileman_smart.h   6 Jan 2006 23:45:13 -0000       1.15
+++ e_fileman_smart.h   7 Feb 2006 01:52:03 -0000       1.16
@@ -132,6 +132,7 @@
    struct {
       unsigned char start : 1;
       int x, y;
+      int dx, dy;
       Ecore_Evas *ecore_evas;
       Evas *evas;
       Ecore_X_Window win;




-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
for problems?  Stop!  Download the new AJAX search engine that makes
searching your log files as easy as surfing the  web.  DOWNLOAD SPLUNK!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=103432&bid=230486&dat=121642
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to