Enlightenment CVS committal

Author  : codewarrior
Project : e17
Module  : proto

Dir     : e17/proto/etk/src/lib


Modified Files:
        Etk.h Makefile.am etk_main.c etk_types.h etk_widget.c 
        etk_widget.h 
Added Files:
        etk_dnd.c etk_dnd.h 


Log Message:
create new files for xdnd stuff and implement paste support for selections.
===================================================================
RCS file: /cvsroot/enlightenment/e17/proto/etk/src/lib/Etk.h,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -3 -r1.17 -r1.18
--- Etk.h       8 Feb 2006 12:49:38 -0000       1.17
+++ Etk.h       9 Feb 2006 22:41:20 -0000       1.18
@@ -58,5 +58,6 @@
 #include "etk_notebook.h"
 #include "etk_progress_bar.h"
 #include "etk_spin_button.h"
+#include "etk_dnd.h"
 
 #endif
===================================================================
RCS file: /cvsroot/enlightenment/e17/proto/etk/src/lib/Makefile.am,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -3 -r1.20 -r1.21
--- Makefile.am 8 Feb 2006 12:49:38 -0000       1.20
+++ Makefile.am 9 Feb 2006 22:41:20 -0000       1.21
@@ -41,7 +41,8 @@
 etk_filechooser_widget.h \
 etk_notebook.h \
 etk_progress_bar.h \
-etk_spin_button.h
+etk_spin_button.h \
+etk_dnd.h
 
 libetk_la_SOURCES = \
 etk_main.c etk_utils.c \
@@ -70,6 +71,7 @@
 etk_notebook.c \
 etk_progress_bar.c \
 etk_spin_button.c \
+etk_dnd.c \
 $(ETKHEADERS)
 
 installed_headersdir = $(prefix)/include/etk
===================================================================
RCS file: /cvsroot/enlightenment/e17/proto/etk/src/lib/etk_main.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -3 -r1.12 -r1.13
--- etk_main.c  9 Feb 2006 01:52:19 -0000       1.12
+++ etk_main.c  9 Feb 2006 22:41:20 -0000       1.13
@@ -1,5 +1,6 @@
 /** @file etk_main.c */
 #include "etk_main.h"
+#include "etk_dnd.h"
 #include <locale.h>
 #include <string.h>
 #include <stdlib.h>
@@ -27,18 +28,9 @@
 static void _etk_main_size_request_recursive(Etk_Widget *widget);
 static void _etk_main_size_allocate_recursive(Etk_Widget *widget, Etk_Bool 
is_top_level);
 
-#if HAVE_ECORE_X
-static int _etk_xdnd_enter_handler(void *data, int type, void *event);
-static int _etk_xdnd_position_handler(void *data, int type, void *event);
-static int _etk_xdnd_drop_handler(void *data, int type, void *event);
-static int _etk_xdnd_leave_handler(void *data, int type, void *event);
-static int _etk_xdnd_selection_handler(void *data, int type, void *event);
-
-static Etk_Widget *_etk_dnd_widget = NULL;
-Evas_List  *_etk_dnd_widgets = NULL;
-#endif   
+/* we need this in etk_dnd */
+Evas_List *_etk_main_toplevel_widgets = NULL;
 
-static Evas_List *_etk_main_toplevel_widgets = NULL;
 static Etk_Bool _etk_main_running = ETK_FALSE;
 static Etk_Bool _etk_main_initialized = ETK_FALSE;
 static Ecore_Job *_etk_main_iterate_job = NULL;
@@ -80,9 +72,9 @@
    }
    
 #if HAVE_ECORE_X
-   if (!ecore_x_init(NULL))
+   if (!etk_dnd_init())
      {
-       ETK_WARNING("Ecore_X initialzation failed!");
+       ETK_WARNING("Etk_dnd and Ecore_X initialzation failed!");
        return ETK_FALSE;
      }
 #endif   
@@ -93,14 +85,6 @@
    setlocale(LC_ALL, "");
    bindtextdomain(PACKAGE, LOCALEDIR);
    textdomain(PACKAGE);
-
-#if HAVE_ECORE_X
-   ecore_event_handler_add(ECORE_X_EVENT_XDND_ENTER, _etk_xdnd_enter_handler, 
NULL);
-   ecore_event_handler_add(ECORE_X_EVENT_XDND_POSITION, 
_etk_xdnd_position_handler, NULL);
-   ecore_event_handler_add(ECORE_X_EVENT_XDND_DROP, _etk_xdnd_drop_handler, 
NULL);
-   ecore_event_handler_add(ECORE_X_EVENT_XDND_LEAVE, _etk_xdnd_leave_handler, 
NULL);
-   ecore_event_handler_add(ECORE_X_EVENT_SELECTION_NOTIFY, 
_etk_xdnd_selection_handler, NULL);
-#endif
    
    _etk_main_initialized = ETK_TRUE;
    return ETK_TRUE;
@@ -116,6 +100,7 @@
    etk_signal_shutdown();
    etk_type_shutdown();
    etk_theme_shutdown();
+   etk_dnd_shutdown();
    edje_shutdown();
    ecore_evas_shutdown();
    ecore_shutdown();
@@ -246,216 +231,4 @@
    }
 }
 
-
-#if HAVE_ECORE_X
-#define E_INSIDE(x, y, xx, yy, ww, hh) (((x) < ((xx) + (ww))) && ((y) < ((yy) 
+ (hh))) && ((x) >= (xx)) && ((y) >= (yy)))
-
-/* Search the container recursively for the widget that accepts xdnd */
-static void _etk_xdnd_container_get_widgets_at(Etk_Toplevel_Widget *top, int 
x, int y, int offx, int offy, Evas_List **list)
-{
-   Evas_List *l;
-     
-   for(l = _etk_dnd_widgets; l; l = l->next)
-     {
-       Etk_Widget *widget;
-       
-       if(!(widget = ETK_WIDGET(l->data)))
-         continue;
-       
-       if(E_INSIDE(x, y, 
-                   widget->inner_geometry.x + offx,
-                   widget->inner_geometry.y + offy,
-                   widget->inner_geometry.w, 
-                   widget->inner_geometry.h))    
-         *list = evas_list_append(*list, widget);        
-     }   
-}
-
-static int _etk_xdnd_enter_handler(void *data, int type, void *event)
-{
-   Ecore_X_Event_Xdnd_Enter *ev;
-   int i;
-   
-   ev = event;
-   
-//   printf("enter window!\n");
-//     for (i = 0; i < ev->num_types; i++)
-//       printf("type: %s\n", ev->types[i]);   
-   
-   return 1;
-}
-
-static int _etk_xdnd_position_handler(void *data, int type, void *event)
-{
-   Ecore_X_Event_Xdnd_Position *ev;
-   Etk_Window *window;
-   Evas_List *l;
-   Evas_List *children = NULL;
-   Etk_Widget *widget;
-   int x = 0, y = 0;
-   
-   ev = event;
-   
-   /* loop top level widgets (windows) */
-   for(l = _etk_main_toplevel_widgets; l; l = l->next)
-     {   
-       if (!(window = ETK_WINDOW(l->data)))
-         continue;
-       
-       /* if this isnt the active window, dont waste time */
-       if(ev->win != window->x_window)
-         continue;       
-       
-       ecore_evas_geometry_get(window->ecore_evas, &x, &y, NULL, NULL);
-
-       /* find the widget we want to drop on */
-       _etk_xdnd_container_get_widgets_at(ETK_TOPLEVEL_WIDGET(window), 
ev->position.x, ev->position.y, x, y, &children);
-       
-       /* check if we're leaving a widget */
-       if(_etk_dnd_widget)
-         {
-            if(!E_INSIDE(ev->position.x, ev->position.y, 
-                         _etk_dnd_widget->geometry.x + x, 
_etk_dnd_widget->geometry.y + y,
-                         _etk_dnd_widget->geometry.w, 
_etk_dnd_widget->geometry.h))
-              {
-                 etk_widget_drag_leave(_etk_dnd_widget);
-                 _etk_dnd_widget = NULL;
-              }
-         }     
-       
-       break;
-     }   
-   
-   /* if we found a widget, emit signals */
-   if(children != NULL)
-     { 
-       Ecore_X_Rectangle rect;
-       
-       widget = (evas_list_last(children))->data;
-       _etk_dnd_widget = widget;
-       /* TODO: filter types according to what widget wants */
-       rect.x = widget->inner_geometry.x;
-       rect.y = widget->inner_geometry.y;
-       rect.width = widget->inner_geometry.w;
-       rect.height = widget->inner_geometry.h; 
-       ecore_x_dnd_send_status(1, 1, rect, ECORE_X_DND_ACTION_PRIVATE);
-       
-       etk_widget_drag_motion(widget);
-     }
-   
-   return 1;
-}
-
-static int _etk_xdnd_drop_handler(void *data, int type, void *event)
-{
-   Ecore_X_Event_Xdnd_Drop *ev;
-   
-   /* printf("drop\n"); */
-   ev = event;
-      
-   ecore_x_selection_xdnd_request(ev->win, "text/uri-list");
-   return 1;
-}
-
-static int _etk_xdnd_leave_handler(void *data, int type, void *event)
-{
-   //printf("leave window\n");
-      
-   return 1;
-}
-
-static int _etk_xdnd_selection_handler(void *data, int type, void *event)
-{
-   Ecore_X_Event_Selection_Notify *ev;
-   Ecore_X_Selection_Data *sel;
-   Ecore_X_Selection_Data_Files *files;
-   Ecore_X_Selection_Data_Text *text;
-   Ecore_X_Selection_Data_Targets *targets;
-   int i;
-
-   //printf("selection\n"); 
-   ev = event;
-   switch (ev->selection) 
-     {
-      case ECORE_X_SELECTION_PRIMARY:
-       if (!strcmp(ev->target, ECORE_X_SELECTION_TARGET_TARGETS)) 
-         {
-            /* printf("primary: %s\n", ev->target); */
-            targets = ev->data;
-            /* 
-            for (i = 0; i < targets->num_targets; i++)
-              printf("target: %s\n", targets->targets[i]);
-            */
-         } 
-       else 
-         {
-            text = ev->data;
-            /* printf("primary: %s %s\n", ev->target, text->text); */
-         }
-       break;
-       
-      case ECORE_X_SELECTION_SECONDARY:
-       sel = ev->data;
-        /* printf("secondary: %s %s\n", ev->target, sel->data); */
-       break;
-       
-      case ECORE_X_SELECTION_XDND:
-        /* printf("xdnd: %s\n", ev->target); */
-
-       files = ev->data;
-       
-       if(!_etk_dnd_widget || files->num_files < 1)
-         break;        
-       
-       /* free old data, should this be done here? */
-       for (i = 0; i < _etk_dnd_widget->xdnd_files_num; i++)
-         {
-            if(_etk_dnd_widget->xdnd_files[i])
-              free(_etk_dnd_widget->xdnd_files[i]);         
-         }
-       
-       if(_etk_dnd_widget->xdnd_files)
-         free(_etk_dnd_widget->xdnd_files);        
-       
-       _etk_dnd_widget->xdnd_files = calloc(files->num_files, sizeof(char*));
-               
-       /* printf("num_files: %d\n", files->num_files); */
-       
-       /* Fill in the drop data into the widget */
-       _etk_dnd_widget->xdnd_files_num = files->num_files;
-       for (i = 0; i < files->num_files; i++)
-         {
-            /* printf("file: %s\n", files->files[i]); */
-            _etk_dnd_widget->xdnd_files[i] = strdup(files->files[i]);
-         }
-       
-       /* emit the drop signal so the widget can react */
-       etk_widget_drag_drop(_etk_dnd_widget);
-       
-       ecore_x_dnd_send_finished();
-       break;
-       
-      case ECORE_X_SELECTION_CLIPBOARD:
-       if (!strcmp(ev->target, ECORE_X_SELECTION_TARGET_TARGETS)) 
-         {
-            //printf("clipboard: %s\n", ev->target);
-            targets = ev->data;
-            /*
-            for (i = 0; i < targets->num_targets; i++)
-              printf("target: %s\n", targets->targets[i]);
-            */
-         } 
-       else 
-         {
-            text = ev->data;
-            /* printf("clipboard: %s %s\n", ev->target, text->text); */
-         }
-       break;
-     }
-   
-   return 1;
-}
-
-#endif
-
 /** @} */
===================================================================
RCS file: /cvsroot/enlightenment/e17/proto/etk/src/lib/etk_types.h,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -3 -r1.23 -r1.24
--- etk_types.h 8 Feb 2006 12:49:38 -0000       1.23
+++ etk_types.h 9 Feb 2006 22:41:20 -0000       1.24
@@ -106,6 +106,8 @@
 typedef struct _Etk_Progress_Bar Etk_Progress_Bar;
 typedef enum _Etk_Progress_Bar_Orientation Etk_Progress_Bar_Orientation;
 typedef struct _Etk_Spin_Button Etk_Spin_Button;
+typedef struct _Etk_Event_Selection_Get Etk_Event_Selection_Get;
+typedef struct _Etk_Selection_Data_Targets Etk_Selection_Data_Targets;
 
 /**
  * @enum Etk_Fill_Policy_Flags
===================================================================
RCS file: /cvsroot/enlightenment/e17/proto/etk/src/lib/etk_widget.c,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -3 -r1.20 -r1.21
--- etk_widget.c        9 Feb 2006 01:52:20 -0000       1.20
+++ etk_widget.c        9 Feb 2006 22:41:20 -0000       1.21
@@ -13,6 +13,7 @@
 #include "etk_marshallers.h"
 #include "etk_signal.h"
 #include "etk_signal_callback.h"
+#include "etk_dnd.h"
 #include "config.h"
 
 /**
@@ -63,9 +64,12 @@
    ETK_WIDGET_FOCUS_SIGNAL,
    ETK_WIDGET_UNFOCUS_SIGNAL,
    ETK_WIDGET_SCROLL_SIZE_CHANGED_SIGNAL,
+#if HAVE_ECORE_X
    ETK_WIDGET_DRAG_DROP_SIGNAL,
    ETK_WIDGET_DRAG_MOTION_SIGNAL,
-   ETK_WIDGET_DRAG_LEAVE_SIGNAL,     
+   ETK_WIDGET_DRAG_LEAVE_SIGNAL,
+   ETK_WIDGET_SELECTION_GET_SIGNAL,
+#endif     
    ETK_WIDGET_NUM_SIGNALS
 };
 
@@ -176,9 +180,12 @@
       _etk_widget_signals[ETK_WIDGET_FOCUS_SIGNAL] =         
etk_signal_new("focus",         widget_type, ETK_MEMBER_OFFSET(Etk_Widget, 
focus),   etk_marshaller_VOID__VOID,    NULL, NULL);
       _etk_widget_signals[ETK_WIDGET_UNFOCUS_SIGNAL] =       
etk_signal_new("unfocus",       widget_type, ETK_MEMBER_OFFSET(Etk_Widget, 
unfocus), etk_marshaller_VOID__VOID,    NULL, NULL);
       _etk_widget_signals[ETK_WIDGET_SCROLL_SIZE_CHANGED_SIGNAL] = 
etk_signal_new("scroll_size_changed", widget_type, -1, 
etk_marshaller_VOID__VOID, NULL, NULL);
-      _etk_widget_signals[ETK_WIDGET_DRAG_DROP_SIGNAL] =     
etk_signal_new("drag_drop",     widget_type, ETK_MEMBER_OFFSET(Etk_Widget, 
drag_drop),etk_marshaller_VOID__VOID,    NULL, NULL);
-      _etk_widget_signals[ETK_WIDGET_DRAG_MOTION_SIGNAL] =     
etk_signal_new("drag_motion",     widget_type, ETK_MEMBER_OFFSET(Etk_Widget, 
drag_motion),etk_marshaller_VOID__VOID,    NULL, NULL);
-      _etk_widget_signals[ETK_WIDGET_DRAG_LEAVE_SIGNAL] =     
etk_signal_new("drag_leave",     widget_type, ETK_MEMBER_OFFSET(Etk_Widget, 
drag_leave),etk_marshaller_VOID__VOID,    NULL, NULL);
+#if HAVE_ECORE_X      
+      _etk_widget_signals[ETK_WIDGET_DRAG_DROP_SIGNAL] =      
etk_signal_new("drag_drop",      widget_type, ETK_MEMBER_OFFSET(Etk_Widget, 
drag_drop),   etk_marshaller_VOID__VOID,    NULL, NULL);
+      _etk_widget_signals[ETK_WIDGET_DRAG_MOTION_SIGNAL] =    
etk_signal_new("drag_motion",    widget_type, ETK_MEMBER_OFFSET(Etk_Widget, 
drag_motion), etk_marshaller_VOID__VOID,    NULL, NULL);
+      _etk_widget_signals[ETK_WIDGET_DRAG_LEAVE_SIGNAL] =     
etk_signal_new("drag_leave",     widget_type, ETK_MEMBER_OFFSET(Etk_Widget, 
drag_leave),  etk_marshaller_VOID__VOID,    NULL, NULL);
+      _etk_widget_signals[ETK_WIDGET_SELECTION_GET_SIGNAL] =  
etk_signal_new("selection_get",  widget_type, -1,                               
          etk_marshaller_VOID__POINTER, NULL, NULL);
+#endif      
       
       etk_type_property_add(widget_type, "name",              
ETK_WIDGET_NAME_PROPERTY,              ETK_PROPERTY_STRING,  
ETK_PROPERTY_READABLE_WRITABLE, etk_property_value_string(NULL));
       etk_type_property_add(widget_type, "parent",            
ETK_WIDGET_PARENT_PROPERTY,            ETK_PROPERTY_POINTER, 
ETK_PROPERTY_READABLE_WRITABLE, etk_property_value_pointer(NULL));
@@ -1441,6 +1448,20 @@
    etk_signal_emit(_etk_widget_signals[ETK_WIDGET_DRAG_LEAVE_SIGNAL], 
ETK_OBJECT(widget), NULL);
 }
 
+/**
+ * @brief Sends the "selection_get" signal
+ * @param widget a widget
+ */
+void etk_widget_selection_get(Etk_Widget *widget, Etk_Event_Selection_Get 
*event)
+{
+   if (!widget)
+     return;
+
+   printf("%s <=-\n", (char*)event->data);
+   
+   etk_signal_emit(_etk_widget_signals[ETK_WIDGET_SELECTION_GET_SIGNAL], 
ETK_OBJECT(widget), NULL, event);
+}
+
 #endif
 
 /**************************
@@ -1712,7 +1733,6 @@
    etk_widget_theme_object_signal_emit(widget, "drag_leave");
 }
 
-
 /* Sets the widget as visible and queues a visibility update */
 static void _etk_widget_show_handler(Etk_Widget *widget)
 {
@@ -2028,7 +2048,7 @@
    return ETK_FALSE;
 }
 
-const char ** etk_widget_xdnd_files_get(Etk_Widget *widget, int *num_files)
+const char **etk_widget_xdnd_files_get(Etk_Widget *widget, int *num_files)
 {
    if(!widget->accepts_xdnd || widget->xdnd_files == NULL)
      return NULL;
===================================================================
RCS file: /cvsroot/enlightenment/e17/proto/etk/src/lib/etk_widget.h,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -3 -r1.14 -r1.15
--- etk_widget.h        9 Feb 2006 01:52:21 -0000       1.14
+++ etk_widget.h        9 Feb 2006 22:41:20 -0000       1.15
@@ -272,6 +272,8 @@
 void          etk_widget_drag_drop(Etk_Widget *widget);
 void          etk_widget_drag_motion(Etk_Widget *widget);
 void          etk_widget_drag_leave(Etk_Widget *widget);
+
+void          etk_widget_selection_get(Etk_Widget *widget, 
Etk_Event_Selection_Get *event);
 //#endif
 
 /** @} */




-------------------------------------------------------
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