implementation module Gtk.Signal import StdEnv import Control.Monad import qualified Data.Map import Gtk import Gtk.Internal installSignalHandler :: !GSignalHandler !w -> GtkM w | gtkWidget w installSignalHandler handler widget = modState (\st -> { st & signal_handlers = 'Data.Map'.put (st.signal_counter+1) handler_internal st.signal_handlers , signal_counter = st.signal_counter+1 }) >>| getState >>= \{signal_counter=id} -> (toState case handler_internal of GSHI_Void _ -> g_signal_connect_void (toPtr (gtkWidget widget)) signal_name id) >>| pure widget where (signal_name,handler_internal) = case handler of DestroyHandler f -> ("destroy", GSHI_Void f) ActivateHandler f -> ("activate",GSHI_Void f)