X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;ds=sidebyside;f=openbox%2Fmainloop.c;h=7c6a956648c480401104ddf3a6dd90175fb1de0b;hb=6dfc3c726a2164ba70cfac3df436ee035822bdb1;hp=0e7b0b3cf81efca140bc7405533f3a79a2778ab8;hpb=acfa2af3c2eacd099869cc5aebdcfa1241214e8b;p=chaz%2Fopenbox diff --git a/openbox/mainloop.c b/openbox/mainloop.c index 0e7b0b3c..7c6a9566 100644 --- a/openbox/mainloop.c +++ b/openbox/mainloop.c @@ -18,8 +18,6 @@ */ #include "mainloop.h" -#include "action.h" -#include "client.h" #include "event.h" #include @@ -90,8 +88,6 @@ struct _ObMainLoop gboolean signal_fired; guint signals_fired[NUM_SIGNALS]; GSList *signal_handlers[NUM_SIGNALS]; - - GSList *action_queue; }; struct _ObMainLoopTimer @@ -182,8 +178,6 @@ ObMainLoop *ob_main_loop_new(Display *display) all_loops = g_slist_prepend(all_loops, loop); - loop->action_queue = NULL; - return loop; } @@ -222,8 +216,6 @@ void ob_main_loop_destroy(ObMainLoop *loop) /* only do this if we're the last loop destroyed */ if (!all_loops) { - guint i; - /* grab all the signals that cause core dumps */ for (i = 0; i < NUM_CORE_SIGNALS; ++i) { if (all_signals[core_signals[i]].installed) { @@ -234,10 +226,6 @@ void ob_main_loop_destroy(ObMainLoop *loop) } } - for (it = loop->action_queue; it; it = g_slist_next(it)) - action_unref(it->data); - g_slist_free(loop->action_queue); - g_free(loop); } } @@ -253,37 +241,16 @@ static void fd_handle_foreach(gpointer key, h->func(h->fd, h->data); } -void ob_main_loop_queue_action(ObMainLoop *loop, ObAction *act) -{ - loop->action_queue = g_slist_append(loop->action_queue, action_copy(act)); -} - -static void ob_main_loop_client_destroy(ObClient *client, gpointer data) -{ - ObMainLoop *loop = data; - GSList *it; - - for (it = loop->action_queue; it; it = g_slist_next(it)) { - ObAction *act = it->data; - - if (act->data.any.c == client) - act->data.any.c = NULL; - } -} - void ob_main_loop_run(ObMainLoop *loop) { XEvent e; struct timeval *wait; fd_set selset; GSList *it; - ObAction *act; loop->run = TRUE; loop->running = TRUE; - client_add_destroy_notify(ob_main_loop_client_destroy, loop); - while (loop->run) { if (loop->signal_fired) { guint i; @@ -314,34 +281,7 @@ void ob_main_loop_run(ObMainLoop *loop) ObMainLoopXHandlerType *h = it->data; h->func(&e, h->data); } - } while (XPending(loop->display)); - } else 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 && - !act->data.any.c) - { - loop->action_queue = - g_slist_delete_link(loop->action_queue, - loop->action_queue); - action_unref(act); - act = NULL; - } - } while (!act && loop->action_queue); - - if (act) { - event_curtime = act->data.any.time; - act->func(&act->data); - event_curtime = CurrentTime; - loop->action_queue = - g_slist_delete_link(loop->action_queue, - loop->action_queue); - action_unref(act); - } + } while (XPending(loop->display) && loop->run); } else { /* this only runs if there were no x events received */ @@ -365,8 +305,6 @@ void ob_main_loop_run(ObMainLoop *loop) } } - client_remove_destroy_notify(ob_main_loop_client_destroy); - loop->running = FALSE; } @@ -565,7 +503,7 @@ static glong timecompare(GTimeVal *a, GTimeVal *b) if ((r = b->tv_sec - a->tv_sec)) return r; return b->tv_usec - a->tv_usec; - + } static void insert_timer(ObMainLoop *loop, ObMainLoopTimer *ins) @@ -661,7 +599,7 @@ static void timer_dispatch(ObMainLoop *loop, GTimeVal **wait) for (it = loop->timers; it; it = next) { ObMainLoopTimer *curr; - + next = g_slist_next(it); curr = it->data; @@ -671,14 +609,14 @@ static void timer_dispatch(ObMainLoop *loop, GTimeVal **wait) */ if (curr->del_me) { /* delete the top */ - loop->timers = g_slist_delete_link(loop->timers, it); + loop->timers = g_slist_delete_link(loop->timers, it); if (curr->destroy) curr->destroy(curr->data); g_free(curr); continue; } - /* the queue is sorted, so if this timer shouldn't fire, none are + /* the queue is sorted, so if this timer shouldn't fire, none are ready */ if (timecompare(&NEAREST_TIMEOUT(loop), &loop->now) < 0) break;