Add prototype for signal handlers in Scheme.
This commit is contained in:
		
							parent
							
								
									ecb505efa6
								
							
						
					
					
						commit
						1a4748717f
					
				| 
						 | 
					@ -9,6 +9,8 @@ gobject_la = gobject.la
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
libelk_gobject_la_SOURCES = \
 | 
					libelk_gobject_la_SOURCES = \
 | 
				
			||||||
 | 
						closure.c \
 | 
				
			||||||
 | 
						signal.c \
 | 
				
			||||||
	$(NULL)
 | 
						$(NULL)
 | 
				
			||||||
libelk_gobject_la_CFLAGS = @GOBJECT_CFLAGS@
 | 
					libelk_gobject_la_CFLAGS = @GOBJECT_CFLAGS@
 | 
				
			||||||
libelk_gobject_la_LDFLAGS = -no-undefined
 | 
					libelk_gobject_la_LDFLAGS = -no-undefined
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,60 @@
 | 
				
			||||||
 | 
					/* closure.c
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * $Id$
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Copyright 1990, 1991, 1992, 1993, 1994, 1995, Oliver Laumann, Berlin
 | 
				
			||||||
 | 
					 * Copyright 2002, 2003 Sam Hocevar <sam@hocevar.net>, 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;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -31,3 +31,11 @@
 | 
				
			||||||
#include <scheme.h>
 | 
					#include <scheme.h>
 | 
				
			||||||
#include <glib-object.h>
 | 
					#include <glib-object.h>
 | 
				
			||||||
#include "config.h"
 | 
					#include "config.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					C_LINKAGE_BEGIN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GClosure *elk_closure_new (Object callback);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void elk_init_gobject_signal (void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					C_LINKAGE_END
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -31,5 +31,6 @@
 | 
				
			||||||
#include "gobject.h"
 | 
					#include "gobject.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void elk_init_gobject_init () {
 | 
					void elk_init_gobject_init () {
 | 
				
			||||||
 | 
					    elk_init_gobject_signal ();
 | 
				
			||||||
    P_Provide (Intern ("gobject.la"));
 | 
					    P_Provide (Intern ("gobject.la"));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,44 @@
 | 
				
			||||||
 | 
					/* signal.c
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * $Id$
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Copyright 1990, 1991, 1992, 1993, 1994, 1995, Oliver Laumann, Berlin
 | 
				
			||||||
 | 
					 * Copyright 2002, 2003 Sam Hocevar <sam@hocevar.net>, 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);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue