From 1a4748717f561eb161a238436a02e7f20d73efdb Mon Sep 17 00:00:00 2001 From: Sergey Cherepanov Date: Tue, 4 Dec 2012 12:26:27 +1100 Subject: [PATCH] Add prototype for signal handlers in Scheme. --- lib/gobject/Makefile.am | 2 ++ lib/gobject/closure.c | 60 +++++++++++++++++++++++++++++++++++++++++ lib/gobject/gobject.h | 8 ++++++ lib/gobject/init.c | 1 + lib/gobject/signal.c | 44 ++++++++++++++++++++++++++++++ 5 files changed, 115 insertions(+) create mode 100644 lib/gobject/closure.c create mode 100644 lib/gobject/signal.c diff --git a/lib/gobject/Makefile.am b/lib/gobject/Makefile.am index b48a59e..99621f1 100644 --- a/lib/gobject/Makefile.am +++ b/lib/gobject/Makefile.am @@ -9,6 +9,8 @@ gobject_la = gobject.la endif libelk_gobject_la_SOURCES = \ + closure.c \ + signal.c \ $(NULL) libelk_gobject_la_CFLAGS = @GOBJECT_CFLAGS@ libelk_gobject_la_LDFLAGS = -no-undefined diff --git a/lib/gobject/closure.c b/lib/gobject/closure.c new file mode 100644 index 0000000..fbe3a44 --- /dev/null +++ b/lib/gobject/closure.c @@ -0,0 +1,60 @@ +/* closure.c + * + * $Id$ + * + * Copyright 1990, 1991, 1992, 1993, 1994, 1995, Oliver Laumann, Berlin + * Copyright 2002, 2003 Sam Hocevar , Paris + * + * This software was derived from Elk 1.2, which was Copyright 1987, 1988, + * 1989, Nixdorf Computer AG and TELES GmbH, Berlin (Elk 1.2 has been written + * by Oliver Laumann for TELES Telematic Services, Berlin, in a joint project + * between TELES and Nixdorf Microprocessor Engineering, Berlin). + * + * Oliver Laumann, TELES GmbH, Nixdorf Computer AG and Sam Hocevar, as co- + * owners or individual owners of copyright in this software, grant to any + * person or company a worldwide, royalty free, license to + * + * i) copy this software, + * ii) prepare derivative works based on this software, + * iii) distribute copies of this software or derivative works, + * iv) perform this software, or + * v) display this software, + * + * provided that this notice is not removed and that neither Oliver Laumann + * nor Teles nor Nixdorf are deemed to have made any representations as to + * the suitability of this software for any purpose nor are held responsible + * for any defects of this software. + * + * THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. + */ + +#include "gobject.h" + +typedef struct _ElkClosure ElkClosure; +struct _ElkClosure { + GClosure closure; + Object callback; +}; + +static void elk_closure_finalize (gpointer notify_data, GClosure *closure) +{ +} + +static void elk_closure_marshal (GClosure *closure, GValue *return_value, + guint n_param_values, + const GValue *param_values, + gpointer invocation_hint, + gpointer marshal_data) { + Funcall (((ElkClosure *)closure)->callback, Null, 0); + if (return_value) + g_value_init (return_value, G_TYPE_NONE); +} + +GClosure *elk_closure_new (Object callback) { + GClosure *closure = g_closure_new_simple (sizeof (ElkClosure), NULL); + + ((ElkClosure *)closure)->callback = callback; + g_closure_add_finalize_notifier (closure, NULL, elk_closure_finalize); + g_closure_set_marshal (closure, elk_closure_marshal); + return closure; +} diff --git a/lib/gobject/gobject.h b/lib/gobject/gobject.h index aaf069c..840f01d 100644 --- a/lib/gobject/gobject.h +++ b/lib/gobject/gobject.h @@ -31,3 +31,11 @@ #include #include #include "config.h" + +C_LINKAGE_BEGIN + +GClosure *elk_closure_new (Object callback); + +void elk_init_gobject_signal (void); + +C_LINKAGE_END diff --git a/lib/gobject/init.c b/lib/gobject/init.c index 3e3625e..b2b6025 100644 --- a/lib/gobject/init.c +++ b/lib/gobject/init.c @@ -31,5 +31,6 @@ #include "gobject.h" void elk_init_gobject_init () { + elk_init_gobject_signal (); P_Provide (Intern ("gobject.la")); } diff --git a/lib/gobject/signal.c b/lib/gobject/signal.c new file mode 100644 index 0000000..59d4018 --- /dev/null +++ b/lib/gobject/signal.c @@ -0,0 +1,44 @@ +/* signal.c + * + * $Id$ + * + * Copyright 1990, 1991, 1992, 1993, 1994, 1995, Oliver Laumann, Berlin + * Copyright 2002, 2003 Sam Hocevar , Paris + * + * This software was derived from Elk 1.2, which was Copyright 1987, 1988, + * 1989, Nixdorf Computer AG and TELES GmbH, Berlin (Elk 1.2 has been written + * by Oliver Laumann for TELES Telematic Services, Berlin, in a joint project + * between TELES and Nixdorf Microprocessor Engineering, Berlin). + * + * Oliver Laumann, TELES GmbH, Nixdorf Computer AG and Sam Hocevar, as co- + * owners or individual owners of copyright in this software, grant to any + * person or company a worldwide, royalty free, license to + * + * i) copy this software, + * ii) prepare derivative works based on this software, + * iii) distribute copies of this software or derivative works, + * iv) perform this software, or + * v) display this software, + * + * provided that this notice is not removed and that neither Oliver Laumann + * nor Teles nor Nixdorf are deemed to have made any representations as to + * the suitability of this software for any purpose nor are held responsible + * for any defects of this software. + * + * THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. + */ + +#include "gobject.h" + +static Object P_G_Signal_Connect (Object instance, Object detailed_signal, Object handler) { + GClosure *closure; + + closure = elk_closure_new (handler); + g_signal_connect_closure ((gpointer)Get_GtkWidget (instance), + Get_String (detailed_signal), closure, FALSE); + return Void; +} + +void elk_init_gobject_signal () { + Define_Primitive (P_G_Signal_Connect, "g-signal-connect", 3, 3, EVAL); +}