102 lines
2.0 KiB
Plaintext
102 lines
2.0 KiB
Plaintext
//
|
|
#include
|
|
"share/atspre_define.hats"
|
|
#include
|
|
"share/atspre_staload.hats"
|
|
//
|
|
(* ****** ****** *)
|
|
|
|
staload UN = $UNSAFE
|
|
|
|
(* ****** ****** *)
|
|
|
|
staload "{$GLIB}/SATS/glib.sats"
|
|
|
|
(* ****** ****** *)
|
|
|
|
staload "{$GTK}/SATS/gdk.sats"
|
|
staload "{$GTK}/SATS/gtk.sats"
|
|
staload "{$GLIB}/SATS/glib-object.sats"
|
|
|
|
(* ****** ****** *)
|
|
|
|
%{^
|
|
typedef char **charpp ;
|
|
%} ;
|
|
abstype charpp = $extype"charpp"
|
|
|
|
(* ****** ****** *)
|
|
|
|
fun hello
|
|
(
|
|
widget: !GtkWidget1, _: gpointer
|
|
) : void = print ("Goodbye, world!\n")
|
|
|
|
fun on_delete_event
|
|
(
|
|
widget: !GtkWidget1
|
|
, event: &GdkEvent, udata: gpointer
|
|
) : gboolean = let
|
|
val () = print ("delete event occurred\n")
|
|
in
|
|
GTRUE // handling of delete-event is finished
|
|
end // end of [on_delete_event]
|
|
|
|
fun on_destroy
|
|
(widget: !GtkWidget1, _: gpointer): void = gtk_main_quit ()
|
|
// end of [on_destroy]
|
|
|
|
(* ****** ****** *)
|
|
|
|
macdef nullp = the_null_ptr
|
|
|
|
(* ****** ****** *)
|
|
|
|
implement
|
|
main0 (argc, argv) =
|
|
{
|
|
//
|
|
var argc: int = argc
|
|
var argv: charpp = $UN.castvwtp1{charpp}(argv)
|
|
//
|
|
val () = $extfcall (void, "gtk_init", addr@(argc), addr@(argv))
|
|
//
|
|
val window =
|
|
gtk_window_new (GTK_WINDOW_TOPLEVEL)
|
|
val () = assertloc (ptrcast(window) > 0)
|
|
//
|
|
val _(*id*) =
|
|
g_signal_connect (
|
|
window, (gsignal)"destroy", (G_CALLBACK)on_destroy, (gpointer)nullp
|
|
) (* end of [val] *)
|
|
val _(*id*) =
|
|
g_signal_connect (
|
|
window, (gsignal)"delete_event", (G_CALLBACK)on_delete_event, (gpointer)nullp
|
|
) (* end of [val] *)
|
|
//
|
|
val () = gtk_container_set_border_width (window, (guint)10)
|
|
val button = gtk_button_new_with_label (gstring("Goodbye, world!"))
|
|
val () = assertloc (ptrcast(button) > 0)
|
|
//
|
|
val () = gtk_widget_show (button)
|
|
val () = gtk_container_add (window, button)
|
|
val () = gtk_widget_show (window)
|
|
//
|
|
val _(*id*) =
|
|
g_signal_connect
|
|
(
|
|
button, (gsignal)"clicked", (G_CALLBACK)hello, (gpointer)nullp
|
|
)
|
|
val _(*id*) =
|
|
g_signal_connect_swapped
|
|
(
|
|
button, (gsignal)"clicked", (G_CALLBACK)gtk_widget_destroy, window
|
|
)
|
|
//
|
|
val () = g_object_unref (button)
|
|
val () = g_object_unref (window) // ref-count becomes 1!
|
|
//
|
|
val ((*void*)) = gtk_main ()
|
|
//
|
|
} (* end of [main0] *)
|