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