{- | Copyright : Will Thompson, Iñaki García Etxebarria and Jonas Platte License : LGPL-2.1 Maintainer : Iñaki García Etxebarria (garetxe@gmail.com) -} module GI.Notify.Callbacks ( -- * Signals -- ** ActionCallback ActionCallback , ActionCallbackC , actionCallbackClosure , actionCallbackWrapper , mkActionCallback , noActionCallback , ) where import Prelude () import Data.GI.Base.ShortPrelude import qualified Data.Text as T import qualified Data.ByteString.Char8 as B import qualified Data.Map as Map import GI.Notify.Types -- callback ActionCallback actionCallbackClosure :: ActionCallback -> IO Closure actionCallbackClosure cb = newCClosure =<< mkActionCallback wrapped where wrapped = actionCallbackWrapper Nothing cb type ActionCallbackC = Ptr Notification -> CString -> Ptr () -> IO () foreign import ccall "wrapper" mkActionCallback :: ActionCallbackC -> IO (FunPtr ActionCallbackC) type ActionCallback = Notification -> T.Text -> IO () noActionCallback :: Maybe ActionCallback noActionCallback = Nothing actionCallbackWrapper :: Maybe (Ptr (FunPtr (ActionCallbackC))) -> ActionCallback -> Ptr Notification -> CString -> Ptr () -> IO () actionCallbackWrapper funptrptr _cb notification action _ = do notification' <- (newObject Notification) notification action' <- cstringToText action _cb notification' action' maybeReleaseFunPtr funptrptr