Enlightenment CVS committal
Author : raster
Project : e17
Module : libs/edje
Dir : e17/libs/edje/src/lib
Modified Files:
Edje.h edje_main.c edje_private.h
Log Message:
more fixme's added, more fixed up. external callbakcs are now in. calling
application can emit signals now too.
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/Edje.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- Edje.h 19 Jun 2003 14:43:49 -0000 1.3
+++ Edje.h 21 Jun 2003 02:51:01 -0000 1.4
@@ -16,6 +16,9 @@
double edje_frametime_get(void);
Evas_Object *edje_add(Evas *evas);
void edje_file_set(Evas_Object *o, const char *file, const char *part);
+ void edje_signal_callback_add(Evas_Object *o, const char *emission, const
char *source, void (*func) (void *data, Evas_Object *o, const char *emission, const
char *source), void *data);
+ void *edje_signal_callback_del(Evas_Object *o, const char *emission, const
char *source, void (*func) (void *data, Evas_Object *o, const char *emission, const
char *source));
+ void edje_signal_emit(Evas_Object *o, const char *emission, const char
*source);
#ifdef __cplusplus
}
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_main.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -3 -r1.12 -r1.13
--- edje_main.c 20 Jun 2003 13:41:00 -0000 1.12
+++ edje_main.c 21 Jun 2003 02:51:01 -0000 1.13
@@ -1,15 +1,20 @@
#include "Edje.h"
#include "edje_private.h"
-/* FIXME: ? somehow handle double click? */
+/* FIXME: edje test need to make in-canvas move & resize controls on edjes */
+/* FIXME: edje test needs to load multiple edjes */
+/* FIXME: sub objects need to be added to smart object */
+/* FIXME: add clicked signal for a mouse up thats a real clicked */
/* FIXME: free stuff - no more leaks */
-/* FIXME: ? add numeric params to conditions for progs (ranges etc.) */
-/* FIXME: dragables havwe to work */
+/* FIXME: dragables have to work */
/* FIXME: drag start/top signals etc. */
-/* FIXME: app has to be able to have callbacks called on signal emits */
-/* FIXME: app has to be able to emit signals */
/* FIXME: named parts need to be able to be "replaced" with new evas objects */
/* FIXME: need to be able to calculate min & max size of a whole edje */
+/* FIXME: on load don't segv on errors */
+/* FIXME: add code to list collections in an eet */
+
+/* FIXME: ? somehow handle double click? */
+/* FIXME: ? add numeric params to conditions for progs (ranges etc.) */
Edje *_edje_fetch(Evas_Object *obj);
Edje *_edje_add(Evas_Object *obj);
@@ -134,8 +139,8 @@
ed = _edje_fetch(obj);
if (!ed) return;
- if (!file) return;
- if (!part) return;
+ if (!file) file = "";
+ if (!part) part = "";
if (((ed->path) && (!strcmp(file, ed->path))) &&
(ed->part) && (!strcmp(part, ed->part)))
return;
@@ -214,6 +219,64 @@
}
}
+void
+edje_signal_callback_add(Evas_Object *obj, const char *emission, const char *source,
void (*func) (void *data, Evas_Object *o, const char *emission, const char *source),
void *data)
+{
+ Edje *ed;
+ Edje_Signal_Callback *escb;
+
+ if ((!emission) || (!source) || (!func)) return;
+ ed = _edje_fetch(obj);
+ if (!ed) return;
+ escb = calloc(1, sizeof(Edje_Signal_Callback));
+ escb->signal = strdup(emission);
+ escb->source = strdup(source);
+ escb->func = func;
+ escb->data = data;
+ ed->callbacks = evas_list_append(ed->callbacks, escb);
+}
+
+void *
+edje_signal_callback_del(Evas_Object *obj, const char *emission, const char *source,
void (*func) (void *data, Evas_Object *o, const char *emission, const char *source))
+{
+ Edje *ed;
+ Evas_List *l;
+
+ if ((!emission) || (!source) || (!func)) return NULL;
+ ed = _edje_fetch(obj);
+ if (!ed) return;
+ for (l = ed->callbacks; l; l = l->next)
+ {
+ Edje_Signal_Callback *escb;
+
+ escb = l->data;
+ if ((escb->func == func) &&
+ (!strcmp(escb->signal, emission)) &&
+ (!strcmp(escb->source, source)))
+ {
+ void *data;
+
+ data = escb->data;
+ free(escb->signal);
+ free(escb->source);
+ free(escb);
+ return data;
+ }
+ }
+ return NULL;
+}
+
+void
+edje_signal_emit(Evas_Object *obj, const char *emission, const char *source)
+{
+ Edje *ed;
+
+ if ((!emission) || (!source)) return;
+ ed = _edje_fetch(obj);
+ if (!ed) return;
+ _edje_emit(ed, emission, source);
+}
+
/*** internal calls ***/
/* utility functions we will use a lot */
@@ -254,6 +317,7 @@
if (ed->path) free(ed->path);
if (ed->part) free(ed->part);
evas_object_del(ed->clipper);
+ printf("FIXME: leak: ed->callbacks\n");
free(ed);
}
@@ -723,6 +787,15 @@
(_edje_glob_match(ee->source, pr->source)))
_edje_program_run(ed, pr);
}
+ for (l = ed->callbacks; l; l = l->next)
+ {
+ Edje_Signal_Callback *escb;
+
+ escb = l->data;
+ if ((_edje_glob_match(ee->signal, escb->signal)) &&
+ (_edje_glob_match(ee->source, escb->source)))
+ escb->func(escb->data, ed->obj, ee->signal, ee->source);
+ }
free(ee->signal);
free(ee->source);
free(ee);
@@ -1555,6 +1628,7 @@
ed = _edje_add(obj);
if (!ed) return;
evas_object_smart_data_set(obj, ed);
+ ed->obj = obj;
}
static void
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_private.h,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -3 -r1.13 -r1.14
--- edje_private.h 20 Jun 2003 13:41:00 -0000 1.13
+++ edje_private.h 21 Jun 2003 02:51:01 -0000 1.14
@@ -293,6 +293,7 @@
typedef struct _Edje Edje;
typedef struct _Edje_Real_Part Edje_Real_Part;
typedef struct _Edje_Running_Program Edje_Running_Program;
+typedef struct _Edje_Signal_Callback Edje_Signal_Callback;
typedef struct _Edje_Calc_Params Edje_Calc_Params;
typedef struct _Edje_Emission Edje_Emission;
@@ -305,11 +306,13 @@
double x, y, w, h;
unsigned char dirty : 1;
Evas *evas; /* the evas this edje belongs to */
+ Evas_Object *obj; /* the smart object */
Evas_Object *clipper; /* a big rect to clip this edje to */
Edje_File *file; /* the file the data comes form */
Edje_Part_Collection *collection; /* the description being used */
Evas_List *parts; /* private list of parts */
Evas_List *actions; /* currently running actions */
+ Evas_List *callbacks;
};
struct _Edje_Real_Part
@@ -343,6 +346,14 @@
Edje *edje;
Edje_Program *program;
double start_time;
+};
+
+struct _Edje_Signal_Callback
+{
+ char *signal;
+ char *source;
+ void (*func) (void *data, Evas_Object *o, const char *emission, const char
*source);
+ void *data;
};
struct _Edje_Calc_Params
-------------------------------------------------------
This SF.Net email is sponsored by: INetU
Attention Web Developers & Consultants: Become An INetU Hosting Partner.
Refer Dedicated Servers. We Manage Them. You Get 10% Monthly Commission!
INetU Dedicated Managed Hosting http://www.inetu.net/partner/index.php
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs