{-# LINE 2 "./System/GIO/Async/AsyncResult.chs" #-}
-- GIMP Toolkit (GTK) Binding for Haskell: binding to gio -*-haskell-*-
--
-- Author : Peter Gavin
-- Created: 13-Oct-2008
--
-- Copyright (c) 2008 Peter Gavin
--
-- This library is free software: you can redistribute it and/or
-- modify it under the terms of the GNU Lesser General Public License
-- as published by the Free Software Foundation, either version 3 of
-- the License, or (at your option) any later version.
--
-- This library is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-- Lesser General Public License for more details.
--
-- You should have received a copy of the GNU Lesser General Public
-- License along with this program. If not, see
-- <http:
--
-- GIO, the C library which this Haskell library depends on, is
-- available under LGPL Version 2. The documentation included with
-- this library is based on the original GIO documentation.
--
-- | Maintainer : gtk2hs-devel@lists.sourceforge.net
-- Stability : alpha
-- Portability : portable (depends on GHC)
module System.GIO.Async.AsyncResult (
-- * Types
    AsyncResult,
    AsyncResultClass,
    AsyncReadyCallback,

-- * Methods
    marshalAsyncReadyCallback,
    ) where

import Control.Monad
import System.Glib.FFI
import System.Glib.GObject
import System.GIO.Types
{-# LINE 44 "./System/GIO/Async/AsyncResult.chs" #-}

type AsyncReadyCallback = GObject -> AsyncResult -> IO ()

type GAsyncReadyCallback = FunPtr (((Ptr ()) -> ((Ptr AsyncResult) -> ((Ptr ()) -> (IO ())))))
{-# LINE 48 "./System/GIO/Async/AsyncResult.chs" #-}

foreign import ccall "wrapper" mkAsyncReadyCallback ::
    (Ptr () -> Ptr AsyncResult -> Ptr () -> IO ()) -> IO GAsyncReadyCallback

marshalAsyncReadyCallback :: AsyncReadyCallback -> IO GAsyncReadyCallback
marshalAsyncReadyCallback :: AsyncReadyCallback -> IO GAsyncReadyCallback
marshalAsyncReadyCallback AsyncReadyCallback
asyncReadyCallback =
    (Ptr () -> Ptr AsyncResult -> Ptr () -> IO ())
-> IO GAsyncReadyCallback
mkAsyncReadyCallback ((Ptr () -> Ptr AsyncResult -> Ptr () -> IO ())
 -> IO GAsyncReadyCallback)
-> (Ptr () -> Ptr AsyncResult -> Ptr () -> IO ())
-> IO GAsyncReadyCallback
forall a b. (a -> b) -> a -> b
$ \ Ptr ()
cObject Ptr AsyncResult
cAsyncResult Ptr ()
cCallback -> do
      GObject
object <- ((ForeignPtr GObject -> GObject, FinalizerPtr GObject)
-> IO (Ptr GObject) -> IO GObject
forall obj.
GObjectClass obj =>
(ForeignPtr obj -> obj, FinalizerPtr obj) -> IO (Ptr obj) -> IO obj
makeNewGObject (ForeignPtr GObject -> GObject, FinalizerPtr GObject)
forall {a}. (ForeignPtr GObject -> GObject, FinalizerPtr a)
mkGObject (IO (Ptr GObject) -> IO GObject)
-> (Ptr GObject -> IO (Ptr GObject)) -> Ptr GObject -> IO GObject
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Ptr GObject -> IO (Ptr GObject)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return) (Ptr () -> Ptr GObject
forall a b. Ptr a -> Ptr b
castPtr Ptr ()
cObject)
      AsyncResult
asyncResult <- ((ForeignPtr AsyncResult -> AsyncResult, FinalizerPtr AsyncResult)
-> IO (Ptr AsyncResult) -> IO AsyncResult
forall obj.
GObjectClass obj =>
(ForeignPtr obj -> obj, FinalizerPtr obj) -> IO (Ptr obj) -> IO obj
makeNewGObject (ForeignPtr AsyncResult -> AsyncResult, FinalizerPtr AsyncResult)
forall {a}. (ForeignPtr AsyncResult -> AsyncResult, FinalizerPtr a)
mkAsyncResult (IO (Ptr AsyncResult) -> IO AsyncResult)
-> (Ptr AsyncResult -> IO (Ptr AsyncResult))
-> Ptr AsyncResult
-> IO AsyncResult
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Ptr AsyncResult -> IO (Ptr AsyncResult)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return) Ptr AsyncResult
cAsyncResult
      AsyncReadyCallback
asyncReadyCallback GObject
object AsyncResult
asyncResult
      FunPtr Any -> IO ()
forall a. FunPtr a -> IO ()
freeHaskellFunPtr (Ptr () -> FunPtr Any
forall a b. Ptr a -> FunPtr b
castPtrToFunPtr Ptr ()
cCallback)