diff options
Diffstat (limited to 'src/Gtk/Signal.icl')
-rw-r--r-- | src/Gtk/Signal.icl | 11 |
1 files changed, 4 insertions, 7 deletions
diff --git a/src/Gtk/Signal.icl b/src/Gtk/Signal.icl index 5861e92..119829a 100644 --- a/src/Gtk/Signal.icl +++ b/src/Gtk/Signal.icl @@ -3,22 +3,19 @@ implementation module Gtk.Signal import StdEnv import Control.Monad -import Control.Monad.Identity -import Control.Monad.State import qualified Data.Map +import Gtk import Gtk.Internal -import Gtk.State -import Gtk.Widgets -installSignalHandler :: !GSignalHandler !w -> State GtkState w | gtkWidget w +installSignalHandler :: !GSignalHandler !w -> GtkM w | gtkWidget w installSignalHandler handler widget = - modify (\st -> + modState (\st -> { st & signal_handlers = 'Data.Map'.put (st.signal_counter+1) handler_internal st.signal_handlers , signal_counter = st.signal_counter+1 }) >>| - gets (\st -> st.signal_counter) >>= \id -> + getState >>= \{signal_counter=id} -> (toState case handler_internal of GSHI_Void _ -> g_signal_connect_void (toPtr (gtkWidget widget)) signal_name id) >>| pure widget |