{-# LINE 1 "src/Stopgap/System/GLib.hsc" #-} {-# LANGUAGE LambdaCase #-} {-# OPTIONS_GHC -Wall -fno-warn-tabs #-} module Stopgap.System.GLib where import Foreign.Ptr import Data.Word import Data.Int import Stopgap.Data.Ptr idleAdd :: IsPtr ud => (ud -> IO Bool) -> ud -> IO Word32 {-# LINE 14 "src/Stopgap/System/GLib.hsc" #-} idleAdd h ud = wrapHandler h >>= \ch -> c_g_idle_add ch $ toPtr ud foreign import ccall "g_idle_add" c_g_idle_add :: FunPtr (Ptr ud -> IO Int32) -> Ptr ud -> IO Word32 {-# LINE 18 "src/Stopgap/System/GLib.hsc" #-} wrapHandler :: IsPtr ud => (ud -> IO Bool) -> IO (FunPtr (Ptr (Tag ud) -> IO Int32)) {-# LINE 21 "src/Stopgap/System/GLib.hsc" #-} wrapHandler h = do let g pud = boolToGboolean <$> h (fromPtr pud) c_wrap_handler g boolToGboolean :: Bool -> Int32 {-# LINE 26 "src/Stopgap/System/GLib.hsc" #-} boolToGboolean = \case False -> 0; True -> 1 {-# LINE 27 "src/Stopgap/System/GLib.hsc" #-} foreign import ccall "wrapper" c_wrap_handler :: (Ptr ud -> IO Int32) -> {-# LINE 30 "src/Stopgap/System/GLib.hsc" #-} IO (FunPtr (Ptr ud -> IO Int32)) {-# LINE 31 "src/Stopgap/System/GLib.hsc" #-}