From ad98343da1467653dacc811a9e52b7da2282c200 Mon Sep 17 00:00:00 2001 From: Camil Staps Date: Sat, 19 Oct 2019 19:57:53 +0200 Subject: Initial commit --- src/Gtk/Signal.icl | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/Gtk/Signal.icl (limited to 'src/Gtk/Signal.icl') diff --git a/src/Gtk/Signal.icl b/src/Gtk/Signal.icl new file mode 100644 index 0000000..4bc14b5 --- /dev/null +++ b/src/Gtk/Signal.icl @@ -0,0 +1,26 @@ +implementation module Gtk.Signal + +import StdEnv + +import Control.Monad +import Control.Monad.Identity +import Control.Monad.State +import qualified Data.Map as M + +import qualified Gtk.Internal as I +import Gtk.State +import Gtk.Widgets + +installSignalHandler :: !w !GSignalHandler -> State GtkState () | gtkWidget w +installSignalHandler widget handler = + modify (\st -> + { st + & signal_handlers = 'M'.put (st.signal_counter+1) handler_internal st.signal_handlers + , signal_counter = st.signal_counter+1 + }) >>| + gets (\st -> st.signal_counter) >>= \id -> + toState case handler_internal of + GSHI_Void _ -> 'I'.g_signal_connect_void (gtkPtr widget) signal_name id +where + (signal_name,handler_internal) = case handler of + DestroyHandler f -> ("destroy",GSHI_Void f) -- cgit v1.2.3