{-# 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" #-}