summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCamil Staps2019-10-23 09:25:57 +0200
committerCamil Staps2019-10-23 09:25:57 +0200
commitdf8cfa2edd72585ac2f002ea11e8736849759ca5 (patch)
tree9b9641ff886a6b2d5560a53a2b88bedcb41abeab
parentFix config; remove test (diff)
Add tune instance for signal handlers
-rw-r--r--src/Gtk/Signal.dcl5
-rw-r--r--src/Gtk/Signal.icl4
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