blob: 699ee9883b20a97f4ead793948550b6a377914b3 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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 (toPtr (gtkWidget widget)) signal_name id
where
(signal_name,handler_internal) = case handler of
DestroyHandler f -> ("destroy",GSHI_Void f)
|