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 (ptr (gtkWidget widget)) signal_name id where (signal_name,handler_internal) = case handler of DestroyHandler f -> ("destroy",GSHI_Void f)