provide a callback for when there are no more X events to process

This commit is contained in:
Dana Jansens 2003-09-29 10:05:43 +00:00
parent c22a6b32ab
commit c8565d21d4
2 changed files with 11 additions and 0 deletions

View file

@ -121,6 +121,7 @@ struct _ObMainLoopXHandlerType
ObMainLoop *loop; ObMainLoop *loop;
gpointer data; gpointer data;
ObMainLoopXHandler func; ObMainLoopXHandler func;
ObMainLoopXDoneHandler done_func;
GDestroyNotify destroy; GDestroyNotify destroy;
}; };
@ -340,6 +341,12 @@ void ob_main_loop_run(ObMainLoop *loop)
} else { } else {
/* this only runs if there were no x events received */ /* 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); timer_dispatch(loop, (GTimeVal**)&wait);
selset = loop->fd_set; selset = loop->fd_set;
@ -374,6 +381,7 @@ void ob_main_loop_exit(ObMainLoop *loop)
void ob_main_loop_x_add(ObMainLoop *loop, void ob_main_loop_x_add(ObMainLoop *loop,
ObMainLoopXHandler handler, ObMainLoopXHandler handler,
ObMainLoopXDoneHandler done_handler,
gpointer data, gpointer data,
GDestroyNotify notify) GDestroyNotify notify)
{ {
@ -382,6 +390,7 @@ void ob_main_loop_x_add(ObMainLoop *loop,
h = g_new(ObMainLoopXHandlerType, 1); h = g_new(ObMainLoopXHandlerType, 1);
h->loop = loop; h->loop = loop;
h->func = handler; h->func = handler;
h->done_func = done_handler;
h->data = data; h->data = data;
h->destroy = notify; h->destroy = notify;
loop->x_handlers = g_slist_prepend(loop->x_handlers, h); loop->x_handlers = g_slist_prepend(loop->x_handlers, h);

View file

@ -28,9 +28,11 @@ ObMainLoop *ob_main_loop_new(Display *display);
void ob_main_loop_destroy(ObMainLoop *loop); void ob_main_loop_destroy(ObMainLoop *loop);
typedef void (*ObMainLoopXHandler) (const XEvent *e, gpointer data); typedef void (*ObMainLoopXHandler) (const XEvent *e, gpointer data);
typedef void (*ObMainLoopXDoneHandler) (gpointer data);
void ob_main_loop_x_add(ObMainLoop *loop, void ob_main_loop_x_add(ObMainLoop *loop,
ObMainLoopXHandler handler, ObMainLoopXHandler handler,
ObMainLoopXDoneHandler done_handler,
gpointer data, gpointer data,
GDestroyNotify notify); GDestroyNotify notify);
void ob_main_loop_x_remove(ObMainLoop *loop, void ob_main_loop_x_remove(ObMainLoop *loop,