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

 -- * Signals
-- ** WebExtensionInitializeFunction #signal:WebExtensionInitializeFunction#
    C_WebExtensionInitializeFunction        ,
    WebExtensionInitializeFunction          ,
    dynamic_WebExtensionInitializeFunction  ,
    genClosure_WebExtensionInitializeFunction,
    mk_WebExtensionInitializeFunction       ,
    noWebExtensionInitializeFunction        ,
    wrap_WebExtensionInitializeFunction     ,


-- ** WebExtensionInitializeWithUserDataFunction #signal:WebExtensionInitializeWithUserDataFunction#
    C_WebExtensionInitializeWithUserDataFunction,
    WebExtensionInitializeWithUserDataFunction,
    dynamic_WebExtensionInitializeWithUserDataFunction,
    genClosure_WebExtensionInitializeWithUserDataFunction,
    mk_WebExtensionInitializeWithUserDataFunction,
    noWebExtensionInitializeWithUserDataFunction,
    wrap_WebExtensionInitializeWithUserDataFunction,




    ) 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.WebKit2WebExtension.Objects.WebExtension as WebKit2WebExtension.WebExtension

-- callback WebExtensionInitializeWithUserDataFunction
--          -> Callable {returnType = Nothing, returnMayBeNull = False, returnTransfer = TransferNothing, returnDocumentation = Documentation {rawDocText = Nothing, sinceVersion = Nothing}, args = [Arg {argCName = "extension", argType = TInterface (Name {namespace = "WebKit2WebExtension", name = "WebExtension"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #WebKitWebExtension", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TVariant, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GVariant", 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 to initialize\nthe web extensions when the web process starts, and which receives\nas additional argument the user data set with\nwebkit_web_context_set_web_extensions_initialization_user_data().", sinceVersion = Just "2.4"}}
type C_WebExtensionInitializeWithUserDataFunction =
    Ptr WebKit2WebExtension.WebExtension.WebExtension ->
    Ptr GVariant ->
    IO ()

-- Args : [Arg {argCName = "extension", argType = TInterface (Name {namespace = "WebKit2WebExtension", name = "WebExtension"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #WebKitWebExtension", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TVariant, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GVariant", 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_WebExtensionInitializeWithUserDataFunction :: FunPtr C_WebExtensionInitializeWithUserDataFunction -> C_WebExtensionInitializeWithUserDataFunction

dynamic_WebExtensionInitializeWithUserDataFunction ::
    (B.CallStack.HasCallStack, MonadIO m, WebKit2WebExtension.WebExtension.IsWebExtension a) =>
    FunPtr C_WebExtensionInitializeWithUserDataFunction
    -> a
    {- ^ /@extension@/: a 'GI.WebKit2WebExtension.Objects.WebExtension.WebExtension' -}
    -> GVariant
    {- ^ /@userData@/: a 'GVariant' -}
    -> m ()
dynamic_WebExtensionInitializeWithUserDataFunction __funPtr extension userData = liftIO $ do
    extension' <- unsafeManagedPtrCastPtr extension
    userData' <- unsafeManagedPtrGetPtr userData
    (__dynamic_C_WebExtensionInitializeWithUserDataFunction __funPtr) extension' userData'
    touchManagedPtr extension
    touchManagedPtr userData
    return ()

foreign import ccall "wrapper"
    mk_WebExtensionInitializeWithUserDataFunction :: C_WebExtensionInitializeWithUserDataFunction -> IO (FunPtr C_WebExtensionInitializeWithUserDataFunction)

type WebExtensionInitializeWithUserDataFunction =
    WebKit2WebExtension.WebExtension.WebExtension ->
    GVariant ->
    IO ()

noWebExtensionInitializeWithUserDataFunction :: Maybe WebExtensionInitializeWithUserDataFunction
noWebExtensionInitializeWithUserDataFunction = Nothing

genClosure_WebExtensionInitializeWithUserDataFunction :: WebExtensionInitializeWithUserDataFunction -> IO Closure
genClosure_WebExtensionInitializeWithUserDataFunction cb = do
    let cb' = wrap_WebExtensionInitializeWithUserDataFunction Nothing cb
    mk_WebExtensionInitializeWithUserDataFunction cb' >>= newCClosure


wrap_WebExtensionInitializeWithUserDataFunction ::
    Maybe (Ptr (FunPtr C_WebExtensionInitializeWithUserDataFunction)) ->
    WebExtensionInitializeWithUserDataFunction ->
    Ptr WebKit2WebExtension.WebExtension.WebExtension ->
    Ptr GVariant ->
    IO ()
wrap_WebExtensionInitializeWithUserDataFunction funptrptr _cb extension userData = do
    extension' <- (newObject WebKit2WebExtension.WebExtension.WebExtension) extension
    userData' <- newGVariantFromPtr userData
    _cb  extension' userData'
    maybeReleaseFunPtr funptrptr


-- callback WebExtensionInitializeFunction
--          -> Callable {returnType = Nothing, returnMayBeNull = False, returnTransfer = TransferNothing, returnDocumentation = Documentation {rawDocText = Nothing, sinceVersion = Nothing}, args = [Arg {argCName = "extension", argType = TInterface (Name {namespace = "WebKit2WebExtension", name = "WebExtension"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #WebKitWebExtension", 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 to initialize\nthe web extension when the web process starts.", sinceVersion = Nothing}}
type C_WebExtensionInitializeFunction =
    Ptr WebKit2WebExtension.WebExtension.WebExtension ->
    IO ()

-- Args : [Arg {argCName = "extension", argType = TInterface (Name {namespace = "WebKit2WebExtension", name = "WebExtension"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #WebKitWebExtension", 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_WebExtensionInitializeFunction :: FunPtr C_WebExtensionInitializeFunction -> C_WebExtensionInitializeFunction

dynamic_WebExtensionInitializeFunction ::
    (B.CallStack.HasCallStack, MonadIO m, WebKit2WebExtension.WebExtension.IsWebExtension a) =>
    FunPtr C_WebExtensionInitializeFunction
    -> a
    {- ^ /@extension@/: a 'GI.WebKit2WebExtension.Objects.WebExtension.WebExtension' -}
    -> m ()
dynamic_WebExtensionInitializeFunction __funPtr extension = liftIO $ do
    extension' <- unsafeManagedPtrCastPtr extension
    (__dynamic_C_WebExtensionInitializeFunction __funPtr) extension'
    touchManagedPtr extension
    return ()

foreign import ccall "wrapper"
    mk_WebExtensionInitializeFunction :: C_WebExtensionInitializeFunction -> IO (FunPtr C_WebExtensionInitializeFunction)

type WebExtensionInitializeFunction =
    WebKit2WebExtension.WebExtension.WebExtension ->
    IO ()

noWebExtensionInitializeFunction :: Maybe WebExtensionInitializeFunction
noWebExtensionInitializeFunction = Nothing

genClosure_WebExtensionInitializeFunction :: WebExtensionInitializeFunction -> IO Closure
genClosure_WebExtensionInitializeFunction cb = do
    let cb' = wrap_WebExtensionInitializeFunction Nothing cb
    mk_WebExtensionInitializeFunction cb' >>= newCClosure


wrap_WebExtensionInitializeFunction ::
    Maybe (Ptr (FunPtr C_WebExtensionInitializeFunction)) ->
    WebExtensionInitializeFunction ->
    Ptr WebKit2WebExtension.WebExtension.WebExtension ->
    IO ()
wrap_WebExtensionInitializeFunction funptrptr _cb extension = do
    extension' <- (newObject WebKit2WebExtension.WebExtension.WebExtension) extension
    _cb  extension'
    maybeReleaseFunPtr funptrptr