run the event done stuff before firing queued actions

This commit is contained in:
Dana Jansens 2003-10-03 06:56:54 +00:00
parent 45b8d70022
commit 783f5aed00

View file

@ -313,14 +313,22 @@ void ob_main_loop_run(ObMainLoop *loop)
h->func(&e, h->data); h->func(&e, h->data);
} }
} while (XPending(loop->display)); } while (XPending(loop->display));
} else if (loop->action_queue) { } else {
for (it = loop->x_handlers; it; it = g_slist_next(it)) {
ObMainLoopXHandlerType *h = it->data;
if (h->done_func)
h->done_func(h->data);
}
if (loop->action_queue) {
/* only fire off one action at a time, then go back for more /* only fire off one action at a time, then go back for more
X events, since the action might cause some X events (like X events, since the action might cause some X events (like
FocusIn :) */ FocusIn :) */
do { do {
act = loop->action_queue->data; act = loop->action_queue->data;
if (act->data.any.client_action == OB_CLIENT_ACTION_ALWAYS && if (act->data.any.client_action ==
OB_CLIENT_ACTION_ALWAYS &&
!act->data.any.c) !act->data.any.c)
{ {
loop->action_queue = loop->action_queue =
@ -341,12 +349,6 @@ 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;
@ -366,6 +368,7 @@ void ob_main_loop_run(ObMainLoop *loop)
fd_handle_foreach, &selset); fd_handle_foreach, &selset);
} }
} }
}
client_remove_destructor(ob_main_loop_client_destroy); client_remove_destructor(ob_main_loop_client_destroy);