run the event done stuff before firing queued actions
This commit is contained in:
parent
45b8d70022
commit
783f5aed00
1 changed files with 45 additions and 42 deletions
|
@ -313,14 +313,22 @@ void ob_main_loop_run(ObMainLoop *loop)
|
|||
h->func(&e, h->data);
|
||||
}
|
||||
} 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
|
||||
X events, since the action might cause some X events (like
|
||||
FocusIn :) */
|
||||
|
||||
do {
|
||||
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)
|
||||
{
|
||||
loop->action_queue =
|
||||
|
@ -341,12 +349,6 @@ 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;
|
||||
|
@ -366,6 +368,7 @@ void ob_main_loop_run(ObMainLoop *loop)
|
|||
fd_handle_foreach, &selset);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
client_remove_destructor(ob_main_loop_client_destroy);
|
||||
|
||||
|
|
Loading…
Reference in a new issue