diff options
author | Camil Staps | 2019-10-22 21:55:08 +0200 |
---|---|---|
committer | Camil Staps | 2019-10-22 21:58:19 +0200 |
commit | 3b6a396b2f87ad40df39c22eed5175df80d843f3 (patch) | |
tree | 8b3af82582b86b87e987539a1a403d22946608ce /src/Gtk/Signal.dcl | |
parent | Add whileFrozen, ensureDimensions, setColumnTitle and setCellText to GtkSheet (diff) |
Restructure signal handling: callbacks cannot be delayed because they may have pointer arguments referring to the stack; also, some callbacks expect a return value
Diffstat (limited to 'src/Gtk/Signal.dcl')
-rw-r--r-- | src/Gtk/Signal.dcl | 26 |
1 files changed, 19 insertions, 7 deletions
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 |