X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=obt%2Fmainloop.c;h=ecdd7f7f535fdfafeb265884dbb79cf5ca32dbfb;hb=11bb31d3bc712aa31d73065383d32f1510393fe2;hp=64972dd708eb17aecec0fae7fa9190d6c1be12aa;hpb=0dc7eca4cdfff6425e19a0bace0f9ae8834d04e8;p=chaz%2Fopenbox diff --git a/obt/mainloop.c b/obt/mainloop.c index 64972dd7..ecdd7f7f 100644 --- a/obt/mainloop.c +++ b/obt/mainloop.c @@ -21,10 +21,21 @@ #include "obt/display.h" #include "obt/util.h" +#ifdef HAVE_STDIO_H #include +#endif +#ifdef HAVE_STDLIB_H #include +#endif +#ifdef HAVE_SYS_SELECT_H #include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_SIGNAL_H #include +#endif typedef struct _ObtMainLoopTimer ObtMainLoopTimer; typedef struct _ObtMainLoopSignal ObtMainLoopSignal; @@ -140,11 +151,11 @@ struct _ObtMainLoopFdHandlerType GDestroyNotify destroy; }; -ObtMainLoop *obt_main_loop_new() +ObtMainLoop *obt_main_loop_new(void) { ObtMainLoop *loop; - loop = g_new0(ObtMainLoop, 1); + loop = g_slice_new0(ObtMainLoop); loop->ref = 1; FD_ZERO(&loop->fd_set); loop->fd_x = -1; @@ -212,7 +223,7 @@ void obt_main_loop_unref(ObtMainLoop *loop) for (it = loop->timers; it; it = g_slist_next(it)) { ObtMainLoopTimer *t = it->data; if (t->destroy) t->destroy(t->data); - g_free(t); + g_slice_free(ObtMainLoopTimer, t); } g_slist_free(loop->timers); loop->timers = NULL; @@ -238,7 +249,7 @@ void obt_main_loop_unref(ObtMainLoop *loop) } } - obt_free0(loop, ObtMainLoop, 1); + g_slice_free(ObtMainLoop, loop); } } @@ -289,6 +300,9 @@ void obt_main_loop_run(ObtMainLoop *loop) do { XNextEvent(loop->display, &e); + if (e.type == MappingNotify) + XRefreshKeyboardMapping(&e.xmapping); + for (it = loop->x_handlers; it; it = g_slist_next(it)) { ObtMainLoopXHandlerType *h = it->data; h->func(&e, h->data); @@ -334,7 +348,7 @@ void obt_main_loop_x_add(ObtMainLoop *loop, { ObtMainLoopXHandlerType *h; - h = g_new(ObtMainLoopXHandlerType, 1); + h = g_slice_new(ObtMainLoopXHandlerType); h->loop = loop; h->func = handler; h->data = data; @@ -363,7 +377,7 @@ void obt_main_loop_x_remove(ObtMainLoop *loop, if (h->func == handler) { loop->x_handlers = g_slist_delete_link(loop->x_handlers, it); if (h->destroy) h->destroy(h->data); - g_free(h); + g_slice_free(ObtMainLoopXHandlerType, h); } } @@ -411,7 +425,7 @@ void obt_main_loop_signal_add(ObtMainLoop *loop, g_return_if_fail(signal < NUM_SIGNALS); - h = g_new(ObtMainLoopSignalHandlerType, 1); + h = g_slice_new(ObtMainLoopSignalHandlerType); h->loop = loop; h->signal = signal; h->func = handler; @@ -459,7 +473,7 @@ void obt_main_loop_signal_remove(ObtMainLoop *loop, g_slist_delete_link(loop->signal_handlers[i], it); if (h->destroy) h->destroy(h->data); - g_free(h); + g_slice_free(ObtMainLoopSignalHandlerType, h); } } } @@ -491,7 +505,7 @@ void obt_main_loop_fd_add(ObtMainLoop *loop, { ObtMainLoopFdHandlerType *h; - h = g_new(ObtMainLoopFdHandlerType, 1); + h = g_slice_new(ObtMainLoopFdHandlerType); h->loop = loop; h->fd = fd; h->func = handler; @@ -511,6 +525,7 @@ static void fd_handler_destroy(gpointer data) if (h->destroy) h->destroy(h->data); + g_slice_free(ObtMainLoopFdHandlerType, h); } void obt_main_loop_fd_remove(ObtMainLoop *loop, @@ -553,7 +568,7 @@ void obt_main_loop_timeout_add(ObtMainLoop *loop, GEqualFunc cmp, GDestroyNotify notify) { - ObtMainLoopTimer *t = g_new(ObtMainLoopTimer, 1); + ObtMainLoopTimer *t = g_slice_new(ObtMainLoopTimer); g_assert(microseconds > 0); /* if it's 0 it'll cause an infinite loop */ @@ -641,7 +656,7 @@ static void timer_dispatch(ObtMainLoop *loop, GTimeVal **wait) loop->timers = g_slist_delete_link(loop->timers, it); if (curr->destroy) curr->destroy(curr->data); - g_free(curr); + g_slice_free(ObtMainLoopTimer, curr); continue; } @@ -662,7 +677,7 @@ static void timer_dispatch(ObtMainLoop *loop, GTimeVal **wait) } else { if (curr->destroy) curr->destroy(curr->data); - g_free(curr); + g_slice_free(ObtMainLoopTimer, curr); } /* the timer queue has been shuffled, start from the beginning