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

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

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

{- |
Type definition for a function that will be called to initialize
the web extensions when the web process starts, and which receives
as additional argument the user data set with
@/webkit_web_context_set_web_extensions_initialization_user_data()/@.

/Since: 2.4/
-}
type WebExtensionInitializeWithUserDataFunction =
    WebKit2WebExtension.WebExtension.WebExtension
    {- ^ /@extension@/: a 'GI.WebKit2WebExtension.Objects.WebExtension.WebExtension' -}
    -> GVariant
    {- ^ /@userData@/: a 'GVariant' -}
    -> IO ()

-- | A convenience synonym for @`Nothing` :: `Maybe` `WebExtensionInitializeWithUserDataFunction`@.
noWebExtensionInitializeWithUserDataFunction :: Maybe WebExtensionInitializeWithUserDataFunction
noWebExtensionInitializeWithUserDataFunction = Nothing

-- | Wrap the callback into a `GClosure`.
genClosure_WebExtensionInitializeWithUserDataFunction :: MonadIO m => WebExtensionInitializeWithUserDataFunction -> m (GClosure C_WebExtensionInitializeWithUserDataFunction)
genClosure_WebExtensionInitializeWithUserDataFunction cb = liftIO $ do
    let cb' = wrap_WebExtensionInitializeWithUserDataFunction Nothing cb
    mk_WebExtensionInitializeWithUserDataFunction cb' >>= B.GClosure.newGClosure


-- | Wrap a `WebExtensionInitializeWithUserDataFunction` into a `C_WebExtensionInitializeWithUserDataFunction`.
wrap_WebExtensionInitializeWithUserDataFunction ::
    Maybe (Ptr (FunPtr C_WebExtensionInitializeWithUserDataFunction)) ->
    WebExtensionInitializeWithUserDataFunction ->
    C_WebExtensionInitializeWithUserDataFunction
wrap_WebExtensionInitializeWithUserDataFunction funptrptr _cb extension userData = do
    extension' <- (newObject WebKit2WebExtension.WebExtension.WebExtension) extension
    userData' <- B.GVariant.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 for the callback on the (unwrapped) C side.
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

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

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

{- |
Type definition for a function that will be called to initialize
the web extension when the web process starts.
-}
type WebExtensionInitializeFunction =
    WebKit2WebExtension.WebExtension.WebExtension
    {- ^ /@extension@/: a 'GI.WebKit2WebExtension.Objects.WebExtension.WebExtension' -}
    -> IO ()

-- | A convenience synonym for @`Nothing` :: `Maybe` `WebExtensionInitializeFunction`@.
noWebExtensionInitializeFunction :: Maybe WebExtensionInitializeFunction
noWebExtensionInitializeFunction = Nothing

-- | Wrap the callback into a `GClosure`.
genClosure_WebExtensionInitializeFunction :: MonadIO m => WebExtensionInitializeFunction -> m (GClosure C_WebExtensionInitializeFunction)
genClosure_WebExtensionInitializeFunction cb = liftIO $ do
    let cb' = wrap_WebExtensionInitializeFunction Nothing cb
    mk_WebExtensionInitializeFunction cb' >>= B.GClosure.newGClosure


-- | Wrap a `WebExtensionInitializeFunction` into a `C_WebExtensionInitializeFunction`.
wrap_WebExtensionInitializeFunction ::
    Maybe (Ptr (FunPtr C_WebExtensionInitializeFunction)) ->
    WebExtensionInitializeFunction ->
    C_WebExtensionInitializeFunction
wrap_WebExtensionInitializeFunction funptrptr _cb extension = do
    extension' <- (newObject WebKit2WebExtension.WebExtension.WebExtension) extension
    _cb  extension'
    maybeReleaseFunPtr funptrptr