Enlightenment CVS committal

Author  : moom16
Project : e17
Module  : apps/eclair

Dir     : e17/apps/eclair/src


Modified Files:
        eclair.c eclair_callbacks.c eclair_callbacks.h eclair_cover.c 
        eclair_private.h 


Log Message:

* Start drag and drop support


===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -3 -r1.10 -r1.11
--- eclair.c    5 May 2005 18:10:39 -0000       1.10
+++ eclair.c    7 May 2005 12:42:17 -0000       1.11
@@ -1,5 +1,7 @@
 #include "eclair.h"
 #include "../config.h"
+#include <Ecore.h>
+#include <Ecore_X.h>
 #include <Ecore_Evas.h>
 #include <Edje.h>
 #include <Emotion.h>
@@ -30,6 +32,7 @@
    if (!eclair)
       return 0;
 
+       ecore_init();
    ecore_evas_init();
    edje_init();
    gtk_init(argc, &argv);
@@ -500,15 +503,26 @@
       return;
 
    if (eclair->gui_engine == ECLAIR_GL)
+   {
       eclair->gui_window = ecore_evas_gl_x11_new(NULL, 0, 0, 0, 32, 32);
+      eclair->gui_x_window = ecore_evas_gl_x11_window_get(eclair->gui_window);
+   }
    else
+   {
       eclair->gui_window = ecore_evas_software_x11_new(NULL, 0, 0, 0, 32, 32);
+      eclair->gui_x_window = 
ecore_evas_software_x11_window_get(eclair->gui_window);
+   }
    ecore_evas_title_set(eclair->gui_window, "eclair");
    ecore_evas_name_class_set(eclair->gui_window, "eclair", "eclair");
+       ecore_evas_layer_set(eclair->gui_window, 999);
    ecore_evas_borderless_set(eclair->gui_window, 1);
    ecore_evas_shaped_set(eclair->gui_window, 1);
    ecore_evas_hide(eclair->gui_window);
 
+   eclair->gui_x_window = 
ecore_evas_software_x11_window_get(eclair->gui_window);
+       ecore_x_dnd_aware_set(eclair->gui_x_window, 1);
+       ecore_x_dnd_type_set(eclair->gui_x_window, "*", 1);
+
    evas = ecore_evas_get(eclair->gui_window);
    eclair->gui_object = edje_object_add(evas);
    edje_object_file_set(eclair->gui_object, PACKAGE_DATA_DIR 
"/themes/default.edj", "eclair_body");
@@ -569,6 +583,9 @@
    edje_object_signal_callback_add(eclair->gui_object, 
"playlist_scroll_down_stop", "", eclair_gui_playlist_scroll_cb, eclair);
    edje_object_signal_callback_add(eclair->gui_object, 
"playlist_scroll_up_start", "", eclair_gui_playlist_scroll_cb, eclair);
    edje_object_signal_callback_add(eclair->gui_object, 
"playlist_scroll_up_stop", "", eclair_gui_playlist_scroll_cb, eclair);
+       ecore_event_handler_add(ECORE_X_EVENT_XDND_POSITION, 
eclair_gui_dnd_position_cb, eclair);
+       ecore_event_handler_add(ECORE_X_EVENT_SELECTION_NOTIFY, 
eclair_gui_dnd_selection_cb, eclair);
+       ecore_event_handler_add(ECORE_X_EVENT_XDND_DROP, 
eclair_gui_dnd_drop_cb, eclair);
    edje_object_message_handler_set(eclair->gui_object, eclair_gui_message_cb, 
eclair);
 }
 
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair_callbacks.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -3 -r1.8 -r1.9
--- eclair_callbacks.c  4 May 2005 21:36:50 -0000       1.8
+++ eclair_callbacks.c  7 May 2005 12:42:17 -0000       1.9
@@ -320,6 +320,74 @@
    eclair_playlist_container_scroll(eclair, event->z);
 }
 
+//Called when an object is dragged over the gui
+int eclair_gui_dnd_position_cb(void *data, int type, void *event)
+{
+   Evas *evas;
+   Evas_Coord gui_window_x, gui_window_y, x, y;
+   Evas_Object *top_object;
+   Ecore_X_Rectangle rect;
+   Ecore_X_Event_Xdnd_Position *ev = (Ecore_X_Event_Xdnd_Position *)event;
+   Eclair *eclair = (Eclair *)data;
+
+   if (!eclair || !eclair->gui_window)
+      return 1;
+
+   evas = ecore_evas_get(eclair->gui_window);
+   ecore_evas_geometry_get(eclair->gui_window, &gui_window_x, &gui_window_y, 
NULL, NULL);
+   x = ev->position.x - gui_window_x;
+   y = ev->position.y - gui_window_y;
+   top_object = evas_object_top_at_xy_get(evas, x, y, 1, 1);
+   if (top_object &&
+      (top_object == eclair->gui_cover || top_object == 
eclair->gui_previous_cover || top_object == eclair->playlist_container))
+   {
+      evas_object_geometry_get(top_object, &rect.x, &rect.y, &rect.width, 
&rect.height);
+      rect.x += gui_window_x;
+      rect.y += gui_window_y;
+      ecore_x_dnd_send_status(1, 1, rect, ECORE_X_DND_ACTION_PRIVATE);
+      return 1;
+   }
+
+   ecore_evas_geometry_get(eclair->gui_window, &rect.x, &rect.y, &rect.width, 
&rect.height);
+   rect.x += gui_window_x;
+   rect.y += gui_window_y;
+   ecore_x_dnd_send_status(0, 1, rect, ECORE_X_DND_ACTION_PRIVATE);
+   return 1;
+}
+
+int eclair_gui_dnd_selection_cb(void *data, int type, void *event)
+{
+   Eclair *eclair = (Eclair *)data;
+   Ecore_X_Event_Selection_Notify *ev = (Ecore_X_Event_Selection_Notify 
*)event;
+   Ecore_X_Selection_Data_Files *files;
+   int i;
+
+   if (!eclair || ev->selection != ECORE_X_SELECTION_XDND)
+     return 1;
+
+   files = ev->data;
+   for (i = 0; i < files->num_files; i++)
+   {
+      printf("%s\n", files->files[i]);
+   }
+
+   ecore_x_dnd_send_finished();
+
+   return 1;
+}
+
+//Called when an object is dropped on the gui
+int eclair_gui_dnd_drop_cb(void *data, int type, void *event)
+{
+   Eclair *eclair = (Eclair *)data;
+
+   if (!eclair)
+      return 1;
+
+   ecore_x_selection_xdnd_request(eclair->gui_x_window, "text/uri-list");
+   return 1;
+}
+
 //Called when the gui send a message
 void eclair_gui_message_cb(void *data, Evas_Object *obj, Edje_Message_Type 
type, int id, void *msg)
 {
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair_callbacks.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- eclair_callbacks.h  2 May 2005 16:06:50 -0000       1.4
+++ eclair_callbacks.h  7 May 2005 12:42:17 -0000       1.5
@@ -26,6 +26,9 @@
 void eclair_gui_playlist_scrollbar_button_drag_cb(void *data, Evas_Object 
*edje_object, const char *emission, const char *source);
 void eclair_gui_playlist_container_wheel_cb(void *data, Evas *evas, 
Evas_Object *playlist_container, void *event_info);
 void eclair_gui_playlist_scroll_cb(void *data, Evas_Object *edje_object, const 
char *emission, const char *source);
+int eclair_gui_dnd_position_cb(void *data, int type, void *event);
+int eclair_gui_dnd_selection_cb(void *data, int type, void *event);
+int eclair_gui_dnd_drop_cb(void *data, int type, void *event);
 void eclair_gui_message_cb(void *data, Evas_Object *obj, Edje_Message_Type 
type, int id, void *msg);
 
 #endif
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair_cover.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -3 -r1.8 -r1.9
--- eclair_cover.c      6 May 2005 18:52:26 -0000       1.8
+++ eclair_cover.c      7 May 2005 12:42:17 -0000       1.9
@@ -421,7 +421,7 @@
       return -1;
    }
    
-   sprintf(request, "GET %s HTTP/1.0\r\nHost: %s\r\nUser-Agent: 
eclair\r\n\r\n", url_abs_path, host);
+   sprintf(request, "GET %s HTTP/1.0\r\nHost: %s\r\n\r\n", url_abs_path, host);
    if (send(socket_fd, request, strlen(request), 0) <= 0)
    {
       fprintf(stderr, "Cover: Unable to send request to host: %s\n", host);
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair_private.h,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -3 -r1.9 -r1.10
--- eclair_private.h    5 May 2005 18:10:39 -0000       1.9
+++ eclair_private.h    7 May 2005 12:42:17 -0000       1.10
@@ -2,6 +2,7 @@
 #define _ECLAIR_PRIVATE_H_
 
 #include <Ecore.h>
+#include <Ecore_X.h>
 #include <Ecore_Evas.h>
 #include <Edje.h>
 #include <gtk/gtk.h>
@@ -118,6 +119,7 @@
    pthread_t video_create_thread;
 
    //Gui related vars
+   Ecore_X_Window gui_x_window;
    Ecore_Evas *gui_window;
    Evas_Object *gui_object;
    Evas_Object *gui_draggies;




-------------------------------------------------------
This SF.Net email is sponsored by: NEC IT Guy Games.
Get your fingers limbered up and give it your best shot. 4 great events, 4
opportunities to win big! Highest score wins.NEC IT Guy Games. Play to
win an NEC 61 plasma display. Visit http://www.necitguy.com/?r=20
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to