X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fmainloop.c;h=4dce047ee9dd79cc48aa9f56e687067988591ffb;hb=9decfe0d76d661ded94eced1f03c2ebfa2941bcc;hp=9df84d34b1ccedc571c2e2ddf462d0a0446b53ae;hpb=87342f85eb75079486e5bbc410f6002ee443dd6a;p=chaz%2Fopenbox diff --git a/openbox/mainloop.c b/openbox/mainloop.c index 9df84d34..4dce047e 100644 --- a/openbox/mainloop.c +++ b/openbox/mainloop.c @@ -525,10 +525,21 @@ void ob_main_loop_timeout_remove(ObMainLoop *loop, for (it = loop->timers; it; it = g_slist_next(it)) { ObMainLoopTimer *t = it->data; - if (t->func == handler) { + if (t->func == handler) + t->del_me = TRUE; + } +} + +void ob_main_loop_timeout_remove_data(ObMainLoop *loop, + GSourceFunc handler, + gpointer data) +{ + GSList *it; + + for (it = loop->timers; it; it = g_slist_next(it)) { + ObMainLoopTimer *t = it->data; + if (t->func == handler && t->data == data) t->del_me = TRUE; - break; - } } } @@ -583,8 +594,10 @@ static void timer_dispatch(ObMainLoop *loop, GTimeVal **wait) if (curr->func(curr->data)) { g_time_val_add(&curr->timeout, curr->delay); insert_timer(loop, curr); - } else if (curr->destroy) { - curr->destroy(curr->data); + } else { + if (curr->destroy) + curr->destroy(curr->data); + g_free(curr); } /* if at least one timer fires, then don't wait on X events, as there