module GI.Notify.Callbacks
(
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
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