provide a callback for when there are no more X events to process
This commit is contained in:
parent
c22a6b32ab
commit
c8565d21d4
2 changed files with 11 additions and 0 deletions
|
@ -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);
|
||||||
|
|
|
@ -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,
|
||||||
|
|
Loading…
Reference in a new issue