From c8565d21d4a5e45bbe67ff7cf268582c0acad72f Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Mon, 29 Sep 2003 10:05:43 +0000 Subject: [PATCH] provide a callback for when there are no more X events to process --- openbox/mainloop.c | 9 +++++++++ openbox/mainloop.h | 2 ++ 2 files changed, 11 insertions(+) diff --git a/openbox/mainloop.c b/openbox/mainloop.c index 2e7c190b..eef79403 100644 --- a/openbox/mainloop.c +++ b/openbox/mainloop.c @@ -121,6 +121,7 @@ struct _ObMainLoopXHandlerType ObMainLoop *loop; gpointer data; ObMainLoopXHandler func; + ObMainLoopXDoneHandler done_func; GDestroyNotify destroy; }; @@ -340,6 +341,12 @@ void ob_main_loop_run(ObMainLoop *loop) } 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 @@ void ob_main_loop_exit(ObMainLoop *loop) void ob_main_loop_x_add(ObMainLoop *loop, ObMainLoopXHandler handler, + ObMainLoopXDoneHandler done_handler, gpointer data, GDestroyNotify notify) { @@ -382,6 +390,7 @@ void ob_main_loop_x_add(ObMainLoop *loop, 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); diff --git a/openbox/mainloop.h b/openbox/mainloop.h index 82aa70ca..f1ff986e 100644 --- a/openbox/mainloop.h +++ b/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, -- 2.39.2