{- |
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.WebKit2.Callbacks
    ( 

 -- * Signals
-- ** URISchemeRequestCallback #signal:URISchemeRequestCallback#
    C_URISchemeRequestCallback              ,
    URISchemeRequestCallback                ,
    URISchemeRequestCallback_WithClosures   ,
    drop_closures_URISchemeRequestCallback  ,
    dynamic_URISchemeRequestCallback        ,
    genClosure_URISchemeRequestCallback     ,
    mk_URISchemeRequestCallback             ,
    noURISchemeRequestCallback              ,
    noURISchemeRequestCallback_WithClosures ,
    wrap_URISchemeRequestCallback           ,




    ) where

import Data.GI.Base.ShortPrelude
import qualified Data.GI.Base.ShortPrelude as SP
import qualified Data.GI.Base.Overloading as O
import qualified Prelude as P

import qualified Data.GI.Base.Attributes as GI.Attributes
import qualified Data.GI.Base.ManagedPtr as B.ManagedPtr
import qualified Data.GI.Base.GError as B.GError
import qualified Data.GI.Base.GVariant as B.GVariant
import qualified Data.GI.Base.GParamSpec as B.GParamSpec
import qualified Data.GI.Base.CallStack as B.CallStack
import qualified Data.Text as T
import qualified Data.ByteString.Char8 as B
import qualified Data.Map as Map
import qualified Foreign.Ptr as FP

import {-# SOURCE #-} qualified GI.WebKit2.Objects.URISchemeRequest as WebKit2.URISchemeRequest

-- callback URISchemeRequestCallback
--          -> Callable {returnType = Nothing, returnMayBeNull = False, returnTransfer = TransferNothing, returnDocumentation = Documentation {rawDocText = Nothing, sinceVersion = Nothing}, args = [Arg {argCName = "request", argType = TInterface (Name {namespace = "WebKit2", name = "URISchemeRequest"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #WebKitURISchemeRequest", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "user data passed to the callback", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = 1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}], skipReturn = False, callableThrows = False, callableDeprecated = Nothing, callableDocumentation = Documentation {rawDocText = Just "Type definition for a function that will be called back when an URI request is\nmade for a user registered URI scheme.", sinceVersion = Nothing}}
type C_URISchemeRequestCallback =
    Ptr WebKit2.URISchemeRequest.URISchemeRequest ->
    Ptr () ->
    IO ()

-- Args : [Arg {argCName = "request", argType = TInterface (Name {namespace = "WebKit2", name = "URISchemeRequest"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #WebKitURISchemeRequest", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "user data passed to the callback", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = 1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "dynamic" __dynamic_C_URISchemeRequestCallback :: FunPtr C_URISchemeRequestCallback -> C_URISchemeRequestCallback

dynamic_URISchemeRequestCallback ::
    (B.CallStack.HasCallStack, MonadIO m, WebKit2.URISchemeRequest.IsURISchemeRequest a) =>
    FunPtr C_URISchemeRequestCallback
    -> a
    {- ^ /@request@/: the 'GI.WebKit2.Objects.URISchemeRequest.URISchemeRequest' -}
    -> Ptr ()
    {- ^ /@userData@/: user data passed to the callback -}
    -> m ()
dynamic_URISchemeRequestCallback __funPtr request userData = liftIO $ do
    request' <- unsafeManagedPtrCastPtr request
    (__dynamic_C_URISchemeRequestCallback __funPtr) request' userData
    touchManagedPtr request
    return ()

foreign import ccall "wrapper"
    mk_URISchemeRequestCallback :: C_URISchemeRequestCallback -> IO (FunPtr C_URISchemeRequestCallback)

type URISchemeRequestCallback =
    WebKit2.URISchemeRequest.URISchemeRequest ->
    IO ()

noURISchemeRequestCallback :: Maybe URISchemeRequestCallback
noURISchemeRequestCallback = Nothing

type URISchemeRequestCallback_WithClosures =
    WebKit2.URISchemeRequest.URISchemeRequest ->
    Ptr () ->
    IO ()

noURISchemeRequestCallback_WithClosures :: Maybe URISchemeRequestCallback_WithClosures
noURISchemeRequestCallback_WithClosures = Nothing

drop_closures_URISchemeRequestCallback :: URISchemeRequestCallback -> URISchemeRequestCallback_WithClosures
drop_closures_URISchemeRequestCallback _f request _ = _f request

genClosure_URISchemeRequestCallback :: URISchemeRequestCallback -> IO Closure
genClosure_URISchemeRequestCallback cb = do
    let cb' = drop_closures_URISchemeRequestCallback cb
    let cb'' = wrap_URISchemeRequestCallback Nothing cb'
    mk_URISchemeRequestCallback cb'' >>= newCClosure


wrap_URISchemeRequestCallback ::
    Maybe (Ptr (FunPtr C_URISchemeRequestCallback)) ->
    URISchemeRequestCallback_WithClosures ->
    Ptr WebKit2.URISchemeRequest.URISchemeRequest ->
    Ptr () ->
    IO ()
wrap_URISchemeRequestCallback funptrptr _cb request userData = do
    request' <- (newObject WebKit2.URISchemeRequest.URISchemeRequest) request
    _cb  request' userData
    maybeReleaseFunPtr funptrptr