diff options
author | Arnaud Fontaine <arnaud@andesi.org> | 2008-01-28 14:26:05 -0800 |
---|---|---|
committer | Arnaud Fontaine <arnau@debian.org> | 2010-11-14 19:50:10 +0900 |
commit | 0f9f33d9419d6bbb79af81775f7ec5e8ba5f5e0a (patch) | |
tree | f789112ded2c2cfb5d3c538c5f00b86eeb71b598 | |
parent | 3ce9210fe2a5597699b8e4fec8fc030999be51e7 (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.c | 12 | ||||
-rw-r--r-- | event/xcb_event.h | 4 |
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); |