summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArnaud Fontaine <arnaud@andesi.org>2008-01-28 14:26:05 -0800
committerArnaud Fontaine <arnau@debian.org>2010-11-14 19:50:10 +0900
commit0f9f33d9419d6bbb79af81775f7ec5e8ba5f5e0a (patch)
treef789112ded2c2cfb5d3c538c5f00b86eeb71b598
parent3ce9210fe2a5597699b8e4fec8fc030999be51e7 (diff)
Add xcb_poll_for_event_loop and rename xcb_event_loop to match.
I'm currently porting Awesome[0] from Xlib to XCB as a school project for my bachelor. I discussed with Vincent about adding a non-blocking xcb_event_loop on IRC because I had to write one for Awesome and wondered if this kind of function could be added to xcb-util. [0] http://awesome.naquadah.org Signed-off-by: Jamey Sharp <jamey@minilop.net>
-rw-r--r--event/events.c12
-rw-r--r--event/xcb_event.h4
2 files changed, 13 insertions, 3 deletions
diff --git a/event/events.c b/event/events.c
index 399c6ce..c19d01f 100644
--- a/event/events.c
+++ b/event/events.c
@@ -62,7 +62,7 @@ int xcb_handle_event(xcb_event_handlers_t *evenths, xcb_generic_event_t *event)
return 0;
}
-void xcb_event_loop(xcb_event_handlers_t *evenths)
+void xcb_wait_for_event_loop(xcb_event_handlers_t *evenths)
{
xcb_generic_event_t *event;
while((event = xcb_wait_for_event(evenths->c)))
@@ -72,6 +72,16 @@ void xcb_event_loop(xcb_event_handlers_t *evenths)
}
}
+void xcb_poll_for_event_loop(xcb_event_handlers_t *evenths)
+{
+ xcb_generic_event_t *event;
+ while ((event = xcb_poll_for_event(evenths->c)))
+ {
+ handle_event(evenths, event);
+ free(event);
+ }
+}
+
static void set_handler(xcb_generic_event_handler_t handler, void *data, xcb_event_handler_t *place)
{
xcb_event_handler_t eventh = { handler, data };
diff --git a/event/xcb_event.h b/event/xcb_event.h
index ce4cdcd..9122893 100644
--- a/event/xcb_event.h
+++ b/event/xcb_event.h
@@ -14,8 +14,8 @@ xcb_event_handlers_t *xcb_alloc_event_handlers(xcb_connection_t *c);
void xcb_free_event_handlers(xcb_event_handlers_t *evenths);
xcb_connection_t *xcb_get_xcb_connection(xcb_event_handlers_t *evenths);
-void xcb_event_loop(xcb_event_handlers_t *evenths);
-int xcb_handle_event(xcb_event_handlers_t *evenths, xcb_generic_event_t *event);
+void xcb_wait_for_event_loop(xcb_event_handlers_t *evenths);
+void xcb_poll_for_event_loop(xcb_event_handlers_t *evenths);
typedef int (*xcb_generic_event_handler_t)(void *data, xcb_connection_t *c, xcb_generic_event_t *event);
typedef int (*xcb_generic_error_handler_t)(void *data, xcb_connection_t *c, xcb_generic_error_t *error);