blob: 119829aea26b71056e402a4eb11aa3c95d3bce59 (
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
|
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)
|