summaryrefslogtreecommitdiff
path: root/openbox
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2003-09-29 10:05:43 +0000
committerDana Jansens <danakj@orodu.net>2003-09-29 10:05:43 +0000
commitc8565d21d4a5e45bbe67ff7cf268582c0acad72f (patch)
tree191b500e584a171915157c34e836aa599c349dec /openbox
parentc22a6b32ab23a4193863882e14fc6ff77ed3d247 (diff)
provide a callback for when there are no more X events to process
Diffstat (limited to 'openbox')
-rw-r--r--openbox/mainloop.c9
-rw-r--r--openbox/mainloop.h2
2 files changed, 11 insertions, 0 deletions
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,