From 3b6a396b2f87ad40df39c22eed5175df80d843f3 Mon Sep 17 00:00:00 2001 From: Camil Staps Date: Tue, 22 Oct 2019 21:55:08 +0200 Subject: Restructure signal handling: callbacks cannot be delayed because they may have pointer arguments referring to the stack; also, some callbacks expect a return value --- src/Gtk/Signal.dcl | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) (limited to 'src/Gtk/Signal.dcl') diff --git a/src/Gtk/Signal.dcl b/src/Gtk/Signal.dcl index 32ebc08..e4ce83b 100644 --- a/src/Gtk/Signal.dcl +++ b/src/Gtk/Signal.dcl @@ -1,15 +1,27 @@ definition module Gtk.Signal -from Gtk.State import :: GtkM +from System._Pointer import :: Pointer + +from Gtk.State import :: GtkM, :: GtkState from Gtk.Widgets import class gtkWidget -:: GSignalHandlerFunction :== GtkM () +class signalHandler h +where + signalName :: !h -> String + signalHandler :: !h -> SignalHandlerInternal :: GSignalHandler - = DestroyHandler !GSignalHandlerFunction - | ActivateHandler !GSignalHandlerFunction + = DestroyHandler !(GtkM ()) + | ActivateHandler !(GtkM ()) + +instance signalHandler GSignalHandler + +:: SignalHandlerInternal + = SHI_Void !(GtkM ()) + | SHI_Int_Int_Pointer_Pointer_Bool !(Int Int Pointer Pointer -> GtkM Bool) -:: GSignalHandlerInternal - = GSHI_Void !GSignalHandlerFunction +installSignalHandler :: !h !w -> GtkM w | signalHandler h & gtkWidget w -installSignalHandler :: !GSignalHandler !w -> GtkM w | gtkWidget w +saveState :: GtkM () +retrieveState :: GtkM GtkState +handleSignal :: !Int !{#Int} -> Int -- cgit v1.2.3