diff options
author | Camil Staps | 2019-10-19 19:57:53 +0200 |
---|---|---|
committer | Camil Staps | 2019-10-20 09:11:19 +0200 |
commit | ad98343da1467653dacc811a9e52b7da2282c200 (patch) | |
tree | 159ee3beadf5ddb022d1640ba441aebee7f39a54 /src/clean_gtk_support.c |
Initial commit
Diffstat (limited to 'src/clean_gtk_support.c')
-rw-r--r-- | src/clean_gtk_support.c | 53 |
1 files changed, 53 insertions, 0 deletions
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 <gtk/gtk.h> + +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); +} |