Enlightenment CVS committal
Author : raster
Project : e17
Module : libs/ecore
Dir : e17/libs/ecore/src/lib/ecore
Modified Files:
Tag: SPLIT
Ecore.h ecore_events.c ecore_private.h
Log Message:
add event filter susbsystem and make the x module use it to filter out
excess mouse motion events. just a start
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore/Attic/Ecore.h,v
retrieving revision 1.1.2.3
retrieving revision 1.1.2.4
diff -u -3 -r1.1.2.3 -r1.1.2.4
--- Ecore.h 23 Jan 2003 01:08:35 -0000 1.1.2.3
+++ Ecore.h 5 Feb 2003 00:10:19 -0000 1.1.2.4
@@ -33,6 +33,7 @@
typedef void Ecore_Idle_Enterer;
typedef void Ecore_Fd_Handler;
typedef void Ecore_Event_Handler;
+ typedef void Ecore_Event_Filter;
typedef void Ecore_Event;
#endif
typedef struct _Ecore_Event_Exe_Exit Ecore_Event_Exe_Exit;
@@ -85,6 +86,9 @@
Ecore_Event *ecore_event_add(int type, void *ev, void (*func_free) (void
*ev, void *data), void *data);
void *ecore_event_del(Ecore_Event *event);
int ecore_event_type_new(void);
+ Ecore_Event_Filter *ecore_event_filter_add(void * (*func_start) (void *data), int
+(*func_filter) (int type, void *event, void *loop_data, void *data), void (*func_end)
+(void *loop_data, void *data), const void *data);
+ void *ecore_event_filter_del(Ecore_Event_Filter *ef);
+
Ecore_Exe *ecore_exe_run(const char *exe_cmd, const void *data);
void *ecore_exe_free(Ecore_Exe *exe);
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore/Attic/ecore_events.c,v
retrieving revision 1.1.2.5
retrieving revision 1.1.2.6
diff -u -3 -r1.1.2.5 -r1.1.2.6
--- ecore_events.c 25 Jan 2003 02:17:02 -0000 1.1.2.5
+++ ecore_events.c 5 Feb 2003 00:10:19 -0000 1.1.2.6
@@ -7,6 +7,9 @@
static Ecore_Event_Handler *event_handlers = NULL;
static int event_handlers_delete_me = 0;
+static Ecore_Event_Filter *event_filters = NULL;
+static int event_filters_delete_me = 0;
+
static int event_id_max = ECORE_EVENT_COUNT;
/**
@@ -109,6 +112,57 @@
return event_id_max - 1;
}
+#if 1
+/**
+ * Add a filter the current event queue
+ * @param func_start
+ * @param func_filter
+ * @param func_end
+ * @param data
+ * @return filter handle
+ *
+ * Add a filter to call callbacks to loop through the event queue and filter
+ */
+Ecore_Event_Filter *
+ecore_event_filter_add(void * (*func_start) (void *data), int (*func_filter) (int
+type, void *event, void *loop_data, void *data), void (*func_end) (void *loop_data,
+void *data), const void *data)
+{
+ Ecore_Event_Filter *ef;
+
+ if (!func_filter) return NULL;
+ ef = calloc(1, sizeof(Ecore_Event_Filter));
+ if (!ef) return NULL;
+ ECORE_MAGIC_SET(ef, ECORE_MAGIC_EVENT_FILTER);
+ ef->func_start = func_start;
+ ef->func_filter = func_filter;
+ ef->func_end = func_end;
+ ef->data = (void *)data;
+ event_filters = _ecore_list_append(event_filters, ef);
+ return ef;
+}
+
+/**
+ * Delete an event filter
+ * @param ef
+ * @return The data set for the filter
+ *
+ * Delete a filter that has been added
+ */
+void *
+ecore_event_filter_del(Ecore_Event_Filter *ef)
+{
+ if (!ECORE_MAGIC_CHECK(ef, ECORE_MAGIC_EVENT_FILTER))
+ {
+ ECORE_MAGIC_FAIL(ef, ECORE_MAGIC_EVENT_FILTER,
+ "ecore_event_filter_del");
+ return NULL;
+ }
+ ef->delete_me = 1;
+ event_filters_delete_me = 1;
+ return ef->data;
+}
+
+#endif
+
int
_ecore_event_exist(void)
{
@@ -147,11 +201,60 @@
return data;
}
+static void
+_ecore_event_filter_del(Ecore_Event_Filter *ef)
+{
+ ECORE_MAGIC_SET(ef, ECORE_MAGIC_NONE);
+ event_filters = _ecore_list_remove(event_filters, ef);
+ free(ef);
+}
+
void
_ecore_event_call(void)
{
Ecore_List *l;
+ for (l = (Ecore_List *)event_filters; l; l = l->next)
+ {
+ Ecore_Event_Filter *ef;
+
+ ef = (Ecore_Event_Filter *)l;
+ if (!ef->delete_me)
+ {
+ Ecore_List *ll;
+
+ if (ef->func_start)
+ ef->loop_data = ef->func_start(ef->data);
+ for (ll = (Ecore_List *)events; ll; ll = ll->next)
+ {
+ Ecore_Event *e;
+
+ e = (Ecore_Event *)ll;
+ if (!ef->func_filter(e->type, e->event,
+ ef->loop_data, ef->data))
+ ecore_event_del(e);
+ }
+ if (ef->func_end)
+ ef->func_end(ef->loop_data, ef->data);
+ }
+ }
+ if (event_filters_delete_me)
+ {
+ for (l = (Ecore_List *)event_filters; l; l = l->next)
+ {
+ Ecore_Event_Filter *ef;
+
+ ef = (Ecore_Event_Filter *)l;
+ l = l->next;
+ if (ef->delete_me)
+ {
+ event_filters = _ecore_list_remove(event_filters, ef);
+ ECORE_MAGIC_SET(ef, ECORE_MAGIC_NONE);
+ free(ef);
+ }
+ }
+ event_filters_delete_me = 0;
+ }
for (l = (Ecore_List *)events; l; l = l->next)
{
Ecore_List *ll;
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore/Attic/ecore_private.h,v
retrieving revision 1.1.2.6
retrieving revision 1.1.2.7
diff -u -3 -r1.1.2.6 -r1.1.2.7
--- ecore_private.h 25 Jan 2003 02:17:02 -0000 1.1.2.6
+++ ecore_private.h 5 Feb 2003 00:10:19 -0000 1.1.2.7
@@ -16,13 +16,14 @@
typedef enum _Ecore_Fd_Handler_Flags Ecore_Fd_Handler_Flags;
#define ECORE_MAGIC_NONE 0x1234fedc
-#define ECORE_MAGIC_EXE 0xf7e712f5
-#define ECORE_MAGIC_TIMER 0xf7d613f4
-#define ECORE_MAGIC_IDLER 0xf7c514f3
-#define ECORE_MAGIC_IDLE_ENTERER 0xf7b415f2
-#define ECORE_MAGIC_FD_HANDLER 0xf7a316f1
-#define ECORE_MAGIC_EVENT_HANDLER 0xf79217f0
-#define ECORE_MAGIC_EVENT 0xf78118ff
+#define ECORE_MAGIC_EXE 0xf7e812f5
+#define ECORE_MAGIC_TIMER 0xf7d713f4
+#define ECORE_MAGIC_IDLER 0xf7c614f3
+#define ECORE_MAGIC_IDLE_ENTERER 0xf7b515f2
+#define ECORE_MAGIC_FD_HANDLER 0xf7a416f1
+#define ECORE_MAGIC_EVENT_HANDLER 0xf79317f0
+#define ECORE_MAGIC_EVENT_FILTER 0xf78218ff
+#define ECORE_MAGIC_EVENT 0xf77119fe
#define ECORE_MAGIC Ecore_Magic __magic
@@ -40,6 +41,7 @@
typedef struct _Ecore_Idle_Enterer Ecore_Idle_Enterer;
typedef struct _Ecore_Fd_Handler Ecore_Fd_Handler;
typedef struct _Ecore_Event_Handler Ecore_Event_Handler;
+typedef struct _Ecore_Event_Filter Ecore_Event_Filter;
typedef struct _Ecore_Event Ecore_Event;
struct _Ecore_List
@@ -106,6 +108,18 @@
int type;
int delete_me : 1;
int (*func) (int type, void *event, void *data);
+ void *data;
+};
+
+struct _Ecore_Event_Filter
+{
+ Ecore_List __list_data;
+ ECORE_MAGIC;
+ int delete_me : 1;
+ void * (*func_start) (void *data);
+ int (*func_filter) (int type, void *event, void *loop_data, void *data);
+ void (*func_end) (void *loop_data, void *data);
+ void *loop_data;
void *data;
};
-------------------------------------------------------
This SF.NET email is sponsored by:
SourceForge Enterprise Edition + IBM + LinuxWorld = Something 2 See!
http://www.vasoftware.com
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs