diff options
Diffstat (limited to 'src/Gtk')
-rw-r--r-- | src/Gtk/Signal.dcl | 5 | ||||
-rw-r--r-- | src/Gtk/Signal.icl | 4 |
2 files changed, 9 insertions, 0 deletions
diff --git a/src/Gtk/Signal.dcl b/src/Gtk/Signal.dcl index e4ce83b..d9e4a7d 100644 --- a/src/Gtk/Signal.dcl +++ b/src/Gtk/Signal.dcl @@ -3,6 +3,7 @@ definition module Gtk.Signal from System._Pointer import :: Pointer from Gtk.State import :: GtkM, :: GtkState +from Gtk.Tune import class tune from Gtk.Widgets import class gtkWidget class signalHandler h @@ -10,6 +11,8 @@ where signalName :: !h -> String signalHandler :: !h -> SignalHandlerInternal +:: SignalHandler = E.h: SignalHandler h & signalHandler h + :: GSignalHandler = DestroyHandler !(GtkM ()) | ActivateHandler !(GtkM ()) @@ -22,6 +25,8 @@ instance signalHandler GSignalHandler installSignalHandler :: !h !w -> GtkM w | signalHandler h & gtkWidget w +instance tune w SignalHandler | gtkWidget w + saveState :: GtkM () retrieveState :: GtkM GtkState handleSignal :: !Int !{#Int} -> Int diff --git a/src/Gtk/Signal.icl b/src/Gtk/Signal.icl index e51614c..040d6f7 100644 --- a/src/Gtk/Signal.icl +++ b/src/Gtk/Signal.icl @@ -36,6 +36,10 @@ installSignalHandler handler widget = -> g_signal_connect 2 (toPtr (gtkWidget widget)) (signalName handler) id) >>| pure widget +instance tune w SignalHandler | gtkWidget w +where + tune (SignalHandler handler) widget = installSignalHandler handler widget + // NB: low-level hacking to use and modify the GtkState from within callbacks. // We use a CAF to keep track of the state. In runGtk, the state is saved with // saveState. This state is retrieved with retrieveState there (to check |