From ad98343da1467653dacc811a9e52b7da2282c200 Mon Sep 17 00:00:00 2001 From: Camil Staps Date: Sat, 19 Oct 2019 19:57:53 +0200 Subject: Initial commit --- src/clean_gtk_support.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 src/clean_gtk_support.c (limited to 'src/clean_gtk_support.c') diff --git a/src/clean_gtk_support.c b/src/clean_gtk_support.c new file mode 100644 index 0000000..c725dfd --- /dev/null +++ b/src/clean_gtk_support.c @@ -0,0 +1,53 @@ +#include + +typedef long CleanInt; + +void *safe_malloc(size_t n) { + void *ptr=malloc (n); + if (ptr==NULL) + perror ("malloc"); + return ptr; +} + +struct clean_g_signal { + GtkWidget *target; + CleanInt id; + struct clean_g_signal *next; +}; + +static struct clean_g_signal *signal_queue=NULL; +static struct clean_g_signal *last_signal=NULL; + +static struct clean_g_signal *clean_g_signal_push (void) { + struct clean_g_signal *signal=safe_malloc (sizeof(struct clean_g_signal)); + + if (last_signal!=NULL) + last_signal->next=signal; + else if (signal_queue==NULL) + signal_queue=signal; + + last_signal=signal; + + return signal; +} + +struct clean_g_signal *clean_g_signal_pop (void) { + struct clean_g_signal *signal=signal_queue; + + if (signal_queue==NULL) + last_signal=NULL; + + signal_queue=NULL; + + return signal; +} + +static void clean_g_signal_handler_void (GtkWidget *target,gpointer data) { + struct clean_g_signal *signal=clean_g_signal_push(); + signal->target=target; + signal->id=(CleanInt)data; +} + +void clean_g_signal_connect_void (GtkWidget *widget,char *signal,CleanInt id) { + g_signal_connect (widget,signal,G_CALLBACK (clean_g_signal_handler_void),(gpointer)id); +} -- cgit v1.2.3