{- |
Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
License    : LGPL-2.1
Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc)
-}

#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
       && !defined(__HADDOCK_VERSION__))

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.GClosure as B.GClosure
import qualified Data.GI.Base.GError as B.GError
import qualified Data.GI.Base.GVariant as B.GVariant
import qualified Data.GI.Base.GValue as B.GValue
import qualified Data.GI.Base.GParamSpec as B.GParamSpec
import qualified Data.GI.Base.CallStack as B.CallStack
import qualified Data.GI.Base.Properties as B.Properties
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 qualified GHC.OverloadedLabels as OL

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 for the callback on the (unwrapped) C side.
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

-- | Given a pointer to a foreign C function, wrap it into a function callable from Haskell.
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 ()

-- | Generate a function pointer callable from C code, from a `C_URISchemeRequestCallback`.
foreign import ccall "wrapper"
    mk_URISchemeRequestCallback :: C_URISchemeRequestCallback -> IO (FunPtr C_URISchemeRequestCallback)

{- |
Type definition for a function that will be called back when an URI request is
made for a user registered URI scheme.
-}
type URISchemeRequestCallback =
    WebKit2.URISchemeRequest.URISchemeRequest
    {- ^ /@request@/: the 'GI.WebKit2.Objects.URISchemeRequest.URISchemeRequest' -}
    -> IO ()

-- | A convenience synonym for @`Nothing` :: `Maybe` `URISchemeRequestCallback`@.
noURISchemeRequestCallback :: Maybe URISchemeRequestCallback
noURISchemeRequestCallback = Nothing

{- |
Type definition for a function that will be called back when an URI request is
made for a user registered URI scheme.
-}
type URISchemeRequestCallback_WithClosures =
    WebKit2.URISchemeRequest.URISchemeRequest
    {- ^ /@request@/: the 'GI.WebKit2.Objects.URISchemeRequest.URISchemeRequest' -}
    -> Ptr ()
    {- ^ /@userData@/: user data passed to the callback -}
    -> IO ()

-- | A convenience synonym for @`Nothing` :: `Maybe` `URISchemeRequestCallback_WithClosures`@.
noURISchemeRequestCallback_WithClosures :: Maybe URISchemeRequestCallback_WithClosures
noURISchemeRequestCallback_WithClosures = Nothing

-- | A simple wrapper that ignores the closure arguments.
drop_closures_URISchemeRequestCallback :: URISchemeRequestCallback -> URISchemeRequestCallback_WithClosures
drop_closures_URISchemeRequestCallback _f request _ = _f request

-- | Wrap the callback into a `GClosure`.
genClosure_URISchemeRequestCallback :: MonadIO m => URISchemeRequestCallback -> m (GClosure C_URISchemeRequestCallback)
genClosure_URISchemeRequestCallback cb = liftIO $ do
    let cb' = drop_closures_URISchemeRequestCallback cb
    let cb'' = wrap_URISchemeRequestCallback Nothing cb'
    mk_URISchemeRequestCallback cb'' >>= B.GClosure.newGClosure


-- | Wrap a `URISchemeRequestCallback` into a `C_URISchemeRequestCallback`.
wrap_URISchemeRequestCallback ::
    Maybe (Ptr (FunPtr C_URISchemeRequestCallback)) ->
    URISchemeRequestCallback_WithClosures ->
    C_URISchemeRequestCallback
wrap_URISchemeRequestCallback funptrptr _cb request userData = do
    request' <- (newObject WebKit2.URISchemeRequest.URISchemeRequest) request
    _cb  request' userData
    maybeReleaseFunPtr funptrptr