From 9749fedbd9ff7859debd8f77d4648a4f2f01b8c2 Mon Sep 17 00:00:00 2001 From: Daniel Carl Date: Sat, 19 Nov 2016 23:30:07 +0100 Subject: [PATCH] Use glib memory functions to simplify the code. --- src/events.c | 61 ++++++++++++++++++++-------------------------------- 1 file changed, 23 insertions(+), 38 deletions(-) diff --git a/src/events.c b/src/events.c index 49c9721..978561a 100644 --- a/src/events.c +++ b/src/events.c @@ -2,66 +2,52 @@ /* this is only to queue GDK key events, in order to later send them if the map didn't match */ static struct { - GdkEventKey **queue; /* queue holding submitted events */ - int qlen; /* pointer to last char in queue */ - bool processing; /* whether or not events are processing */ + GdkEventKey **queue; /* queue holding submitted events */ + int qlen; /* pointer to last char in queue */ + bool processing; /* whether or not events are processing */ } events; extern VbCore vb; +static void process_event(GdkEventKey *event); + /** * Append an event into the queue. */ void queue_event(GdkEventKey *e) { - GdkEventKey **newqueue = realloc(events.queue, (events.qlen + 1) * sizeof **newqueue); - - if (newqueue == NULL) { - // error allocating memory - return; - } - - events.queue = newqueue; + events.queue = g_realloc(events.queue, (events.qlen + 1) * sizeof(GdkEventKey*)); /* copy memory (otherwise event gets cleared by gdk) */ - GdkEventKey *tmp = malloc(sizeof *tmp); - memcpy(tmp, e, sizeof *e); - - if (tmp == NULL) { - // error allocating memory - return; - } - - events.queue[events.qlen] = tmp; + events.queue[events.qlen] = g_memdup(e, sizeof(GdkEventKey)); events.qlen ++; } -void process_event(GdkEventKey* event) -{ - if (event == NULL) { - return; - } - - events.processing = true; /* signal not to queue other events */ - gtk_main_do_event ((GdkEvent *) event); - events.processing = false; - free(event); -} - /** * Process events in the queue, sending the key events to GDK. */ void process_events() { - for (int i = 0; i < events.qlen; ++i) - { - process_event(events.queue[i]); /* process & free the event */ + for (int i = 0; i < events.qlen; ++i) { + process_event(events.queue[i]); + g_free(events.queue[i]); /* TODO take into account qk mapped key? */ } events.qlen = 0; } +static void process_event(GdkEventKey *event) +{ + if (!event) { + return; + } + + events.processing = true; /* signal not to queue other events */ + gtk_main_do_event((GdkEvent*)event); + events.processing = false; +} + /** * Check if the events are currently processing (i.e. being sent to GDK * unhandled). Provided in order to encapsulate the "events" global struct. @@ -77,9 +63,8 @@ bool is_processing_events() */ void free_events() { - for (int i = 0; i < events.qlen; ++i) - { - free(events.queue[i]); + for (int i = 0; i < events.qlen; ++i) { + g_free(events.queue[i]); } events.qlen = 0; -- 2.20.1