provide a callback for when there are no more X events to process
Dana Jansens danakj@orodu.net
2 files changed,
11 insertions(+),
0 deletions(-)
M
openbox/mainloop.c
→
openbox/mainloop.c
@@ -121,6 +121,7 @@ {
ObMainLoop *loop; gpointer data; ObMainLoopXHandler func; + ObMainLoopXDoneHandler done_func; GDestroyNotify destroy; };@@ -340,6 +341,12 @@ }
} else { /* this only runs if there were no x events received */ + for (it = loop->x_handlers; it; it = g_slist_next(it)) { + ObMainLoopXHandlerType *h = it->data; + if (h->done_func) + h->done_func(h->data); + } + timer_dispatch(loop, (GTimeVal**)&wait); selset = loop->fd_set;@@ -374,6 +381,7 @@ /*** XEVENT WATCHERS ***/
void ob_main_loop_x_add(ObMainLoop *loop, ObMainLoopXHandler handler, + ObMainLoopXDoneHandler done_handler, gpointer data, GDestroyNotify notify) {@@ -382,6 +390,7 @@
h = g_new(ObMainLoopXHandlerType, 1); h->loop = loop; h->func = handler; + h->done_func = done_handler; h->data = data; h->destroy = notify; loop->x_handlers = g_slist_prepend(loop->x_handlers, h);
M
openbox/mainloop.h
→
openbox/mainloop.h
@@ -28,9 +28,11 @@ ObMainLoop *ob_main_loop_new(Display *display);
void ob_main_loop_destroy(ObMainLoop *loop); typedef void (*ObMainLoopXHandler) (const XEvent *e, gpointer data); +typedef void (*ObMainLoopXDoneHandler) (gpointer data); void ob_main_loop_x_add(ObMainLoop *loop, ObMainLoopXHandler handler, + ObMainLoopXDoneHandler done_handler, gpointer data, GDestroyNotify notify); void ob_main_loop_x_remove(ObMainLoop *loop,