@@ -24,7 +24,6 @@ import Reactive.Banana.Frameworks
2424
2525import Data.Typeable
2626import Control.Exception
27- import Control.Monad.IO.Class
2827import Data.Maybe (fromJust )
2928import qualified Data.Text as T
3029import Data.Text (Text )
@@ -48,6 +47,7 @@ import Data.GI.Base.Overloading
4847import Data.GI.Base.Signals
4948 ( SignalInfo (.. )
5049 , GObjectNotifySignalInfo (.. )
50+ , disconnectSignalHandler
5151 )
5252import GI.Gtk
5353 ( GObject
@@ -91,11 +91,11 @@ signalAddHandler
9191 -> SignalProxy self info
9292 -> ((a -> IO b ) -> HaskellCallbackType info )
9393 -> b
94- -> IO ( AddHandler a )
95- signalAddHandler self signal f b = do
96- (addHandler, fire) <- newAddHandler
97- on self signal (f $ \ x -> fire x >> return b)
98- return addHandler
94+ -> AddHandler a
95+ signalAddHandler self signal f b =
96+ AddHandler $ \ fire ->
97+ on self signal (f $ \ x -> fire x >> return b) >>=
98+ pure . disconnectSignalHandler self
9999
100100-- | Create an 'Reactive.Banana.Event' from
101101-- a 'Data.GI.Base.Signals.SignalProxy'. For making signalE# functions.
@@ -111,9 +111,8 @@ signalEN
111111 -> ((a -> IO b ) -> HaskellCallbackType info )
112112 -> b
113113 -> MomentIO (Event a )
114- signalEN self signal f b = do
115- addHandler <- liftIO $ signalAddHandler self signal f b
116- fromAddHandler addHandler
114+ signalEN self signal f b =
115+ fromAddHandler $ signalAddHandler self signal f b
117116
118117-- | Get an 'Reactive.Banana.Event' from
119118-- a 'Data.GI.Base.Signals.SignalProxy' that produces nothing.
0 commit comments