Enlightenment CVS committal

Author  : ningerso
Project : e17
Module  : libs/ewl

Dir     : e17/libs/ewl/src/lib


Modified Files:
        ewl_dnd.c ewl_dnd.h 


Log Message:
More DND infrastructure work.

===================================================================
RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_dnd.c,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -3 -r1.17 -r1.18
--- ewl_dnd.c   5 Sep 2006 02:14:24 -0000       1.17
+++ ewl_dnd.c   5 Sep 2006 06:10:22 -0000       1.18
@@ -24,6 +24,8 @@
 static Ewl_Widget *ewl_dnd_widget = NULL;
 
 static Ecore_Hash *ewl_dnd_position_hash;
+static Ecore_Hash *ewl_dnd_provides_hash;
+static Ecore_Hash *ewl_dnd_accepts_hash;
 static int ewl_dnd_status = 0;
 
 Ecore_Event_Handler *ewl_dnd_mouse_up_handler;
@@ -31,6 +33,9 @@
 
 char *ewl_dnd_drop_types[] = { "text/uri-list", "UTF8_STRING", NULL };
 
+static char *ewl_dnd_types_encode(const char **types);
+static int ewl_dnd_types_encoded_contains(char *types, char *type);
+
 static int ewl_dnd_event_mouse_up(void *data, int type, void *event);
 static int ewl_dnd_event_dnd_move(void *data, int type, void *event);
 
@@ -56,6 +61,21 @@
        if (!ewl_dnd_position_hash)
                DRETURN_INT(FALSE, DLEVEL_STABLE);
 
+       ewl_dnd_provides_hash = ecore_hash_new(ecore_direct_hash, 
+                                               ecore_direct_compare);
+       if (!ewl_dnd_provides_hash) {
+               ecore_hash_destroy(ewl_dnd_position_hash);
+               DRETURN_INT(FALSE, DLEVEL_STABLE);
+       }
+
+       ewl_dnd_accepts_hash = ecore_hash_new(ecore_direct_hash, 
+                                               ecore_direct_compare);
+       if (!ewl_dnd_accepts_hash) {
+               ecore_hash_destroy(ewl_dnd_provides_hash);
+               ecore_hash_destroy(ewl_dnd_position_hash);
+               DRETURN_INT(FALSE, DLEVEL_STABLE);
+       }
+
        ewl_dragging_current = 0;
        ewl_dnd_status = 1;
 
@@ -73,6 +93,8 @@
        DENTER_FUNCTION(DLEVEL_STABLE);
 
        ecore_hash_destroy(ewl_dnd_position_hash);
+       ecore_hash_destroy(ewl_dnd_provides_hash);
+       ecore_hash_destroy(ewl_dnd_accepts_hash);
 
        DLEAVE_FUNCTION(DLEVEL_STABLE);
 }
@@ -95,6 +117,133 @@
 }
 
 /**
+ * @param w: The widget to set provided types
+ * @param types: A NULL terminated array of mimetypes widget provides for DND
+ * @return Returns no value
+ * @brief: Sets the mimetypes the designated widget can provide for DND
+ */
+void
+ewl_dnd_provides_types_set(Ewl_Widget *w, const char **types)
+{
+       char *type;
+
+       DENTER_FUNCTION(DLEVEL_STABLE);
+       DCHECK_PARAM_PTR("w", w);
+       DCHECK_TYPE("w", w, EWL_WIDGET_TYPE);
+
+       type = ecore_hash_get(ewl_dnd_provides_hash, w);
+       if (type) {
+               FREE(type);
+       }
+       ecore_hash_set(ewl_dnd_provides_hash, w, ewl_dnd_types_encode(types));
+
+       DLEAVE_FUNCTION(DLEVEL_STABLE);
+}
+
+/**
+ * @param w: The widget to test for an provided type
+ * @param w: The mimetype to test for provideance on a specific widget
+ * @brief: Verifies the specified widget provides the given mimetype
+ */
+int
+ewl_dnd_provides_types_contains(Ewl_Widget *w, char *type)
+{
+       char *types;
+
+       DENTER_FUNCTION(DLEVEL_STABLE);
+       DCHECK_PARAM_PTR_RET("w", w, FALSE);
+       DCHECK_TYPE_RET("w", w, EWL_WIDGET_TYPE, FALSE);
+
+       types = ecore_hash_get(ewl_dnd_provides_hash, w);
+
+       DRETURN_INT(ewl_dnd_types_encoded_contains(types, type);, 
DLEVEL_STABLE);
+}
+
+
+/**
+ * @param w: The widget to retrieve provided types
+ * @return Returns a NULL terminated array of mimetypes widget provides for DND
+ * @brief: Gets the mimetypes the designated widget can provide for DND
+ */
+const char **
+ewl_dnd_provides_types_get(Ewl_Widget *w)
+{
+       const char **types;
+
+       DENTER_FUNCTION(DLEVEL_STABLE);
+       DCHECK_PARAM_PTR_RET("w", w, NULL);
+       DCHECK_TYPE_RET("w", w, EWL_WIDGET_TYPE, NULL);
+
+       types = ecore_hash_get(ewl_dnd_provides_hash, w);
+
+       DRETURN_PTR(types, DLEVEL_STABLE);
+}
+
+/**
+ * @param w: The widget to set accepted types
+ * @param types: A NULL terminated array of mimetypes widget accepts for DND
+ * @return Returns no value
+ * @brief: Sets the mimetypes the designated widget can accept for DND
+ */
+void
+ewl_dnd_accepts_types_set(Ewl_Widget *w, const char **types)
+{
+       char *type;
+
+       DENTER_FUNCTION(DLEVEL_STABLE);
+       DCHECK_PARAM_PTR("w", w);
+       DCHECK_TYPE("w", w, EWL_WIDGET_TYPE);
+
+       type = ecore_hash_get(ewl_dnd_accepts_hash, w);
+       if (type) {
+               FREE(type);
+       }
+       ecore_hash_set(ewl_dnd_accepts_hash, w, ewl_dnd_types_encode(types));
+
+
+       DLEAVE_FUNCTION(DLEVEL_STABLE);
+}
+
+/**
+ * @param w: The widget to test for an accepted type
+ * @param w: The mimetype to test for acceptance on a specific widget
+ * @brief: Verifies the specified widget accepts the given mimetype
+ */
+int
+ewl_dnd_accepts_types_contains(Ewl_Widget *w, char *type)
+{
+       char *types;
+
+       DENTER_FUNCTION(DLEVEL_STABLE);
+       DCHECK_PARAM_PTR_RET("w", w, FALSE);
+       DCHECK_TYPE_RET("w", w, EWL_WIDGET_TYPE, FALSE);
+
+       types = ecore_hash_get(ewl_dnd_provides_hash, w);
+
+       DRETURN_INT(ewl_dnd_types_encoded_contains(types, type);, 
DLEVEL_STABLE);
+}
+
+/**
+ * @param w: The widget to retrieve accepted types
+ * @return Returns a NULL terminated array of mimetypes widget accepts for DND
+ * @brief: Gets the mimetypes the designated widget can accept for DND
+ */
+const char **
+ewl_dnd_accepts_types_get(Ewl_Widget *w)
+{
+       const char **types;
+
+       DENTER_FUNCTION(DLEVEL_STABLE);
+       DCHECK_PARAM_PTR_RET("w", w, NULL);
+       DCHECK_TYPE_RET("w", w, EWL_WIDGET_TYPE, NULL);
+
+       types = ecore_hash_get(ewl_dnd_provides_hash, w);
+
+       DRETURN_PTR(types, DLEVEL_STABLE);
+}
+
+
+/**
  * @param widget: The widget to get the types for
  * @return Returns the Ewl_Dnd_Types for the given widget
  * @brief Get the Ewl_Dnd_Types for the given widget
@@ -284,6 +433,52 @@
        ewl_dnd_widget = NULL;
 
        DLEAVE_FUNCTION(DLEVEL_STABLE);
+}
+
+static int
+ewl_dnd_types_encoded_contains(char *types, char *type)
+{
+       DENTER_FUNCTION(DLEVEL_STABLE);
+
+       while (*types) {
+               int len;
+
+               len = strlen(types);
+               if (!(strcmp(types, type)))
+                       DRETURN_INT(TRUE, DLEVEL_STABLE);
+               types += len + 1;
+       }
+
+       DRETURN_INT(FALSE, DLEVEL_STABLE);
+}
+
+
+static char *
+ewl_dnd_types_encode(const char **types)
+{
+       char *tmptype;
+       int count, i = 0;
+       int len = 0;
+
+       DENTER_FUNCTION(DLEVEL_STABLE);
+
+       /*
+        * Determine the length of all types.
+        */
+       for (tmptype = (char *)types[0]; tmptype; tmptype = (char *)types[i]) {
+               len += strlen(tmptype) + 1;
+               i++;
+       }
+
+       tmptype = NEW(char, len + 1);
+       count = i;
+       for (i = 0; i < count; i++) {
+               tmptype = strcpy(tmptype, types[i]);
+               tmptype++;
+       }
+       *tmptype = '\0';
+
+       DRETURN_PTR(tmptype, DLEVEL_STABLE);
 }
 
 static int
===================================================================
RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_dnd.h,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -3 -r1.14 -r1.15
--- ewl_dnd.h   5 Sep 2006 02:14:24 -0000       1.14
+++ ewl_dnd.h   5 Sep 2006 06:10:22 -0000       1.15
@@ -26,6 +26,14 @@
 Ewl_Dnd_Types  *ewl_dnd_types_for_widget_get(Ewl_Widget *widget);
 int              ewl_dnd_type_supported(char *type);
 
+void            ewl_dnd_provides_types_set(Ewl_Widget *w, const char **types);
+int             ewl_dnd_provides_types_contains(Ewl_Widget *w, char *type);
+const char     **ewl_dnd_provides_types_get(Ewl_Widget *w);
+
+void            ewl_dnd_accepts_types_set(Ewl_Widget *w, const char **types);
+int             ewl_dnd_accepts_types_contains(Ewl_Widget *w, char *type);
+const char     **ewl_dnd_accepts_types_get(Ewl_Widget *w);
+
 void            ewl_dnd_disable(void);
 void            ewl_dnd_enable(void);
 



-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to