Compare commits

...

5 Commits

Author SHA1 Message Date
Sergey Cherepanov ea89ff33a4 Add missing backslash in examples/Makefile.am. 2022-08-17 13:45:58 +03:00
Sergey Cherepanov 7f0336f538 Add GTK+ examples to examples/Makefile.am. 2022-08-17 13:45:58 +03:00
Sergey Cherepanov 78aef417bd Update hello-world.scm. 2022-08-17 13:45:58 +03:00
Sergey Cherepanov 7146e4176a Add wrapper for gtk_main_quit(). 2022-08-17 13:45:58 +03:00
Sergey Cherepanov 1a4748717f Add prototype for signal handlers in Scheme. 2022-08-17 13:45:58 +03:00
8 changed files with 128 additions and 0 deletions

View File

@ -102,3 +102,8 @@ motif_DATA = \
motif/selection-box.scm \
$(NULL)
gtkdir = $(examplesdir)/gtk
gtk_DATA = \
gtk/hello-world.scm \
$(NULL)

View File

@ -5,5 +5,7 @@
(gtk-init (command-line-args))
(define window (gtk-window-new 'gtk-window-toplevel))
(gtk-window-set-title window "Hello, World!")
(define callback (lambda args (gtk-main-quit)))
(g-signal-connect window "destroy" callback)
(gtk-widget-show-all window)
(gtk-main)

View File

@ -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

60
lib/gobject/closure.c Normal file
View File

@ -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;
}

View File

@ -31,3 +31,11 @@
#include <scheme.h>
#include <glib-object.h>
#include "config.h"
C_LINKAGE_BEGIN
GClosure *elk_closure_new (Object callback);
void elk_init_gobject_signal (void);
C_LINKAGE_END

View File

@ -31,5 +31,6 @@
#include "gobject.h"
void elk_init_gobject_init () {
elk_init_gobject_signal ();
P_Provide (Intern ("gobject.la"));
}

44
lib/gobject/signal.c Normal file
View File

@ -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);
}

View File

@ -56,7 +56,13 @@ static Object P_Gtk_Main () {
return Void;
}
static Object P_Gtk_Main_Quit () {
gtk_main_quit ();
return Void;
}
void elk_init_gtk_gtkmain () {
Define_Primitive (P_Gtk_Init, "gtk-init", 1, 1, EVAL);
Define_Primitive (P_Gtk_Main, "gtk-main", 0, 0, EVAL);
Define_Primitive (P_Gtk_Main_Quit, "gtk-main-quit", 0, 0, EVAL);
}