{- |
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.Objects.PolicyDecision
    ( 

-- * Exported types
    PolicyDecision(..)                      ,
    IsPolicyDecision                        ,
    toPolicyDecision                        ,
    noPolicyDecision                        ,


 -- * Methods
-- ** download #method:download#
    PolicyDecisionDownloadMethodInfo        ,
    policyDecisionDownload                  ,


-- ** ignore #method:ignore#
    PolicyDecisionIgnoreMethodInfo          ,
    policyDecisionIgnore                    ,


-- ** use #method:use#
    PolicyDecisionUseMethodInfo             ,
    policyDecisionUse                       ,




    ) 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 qualified GI.GObject.Objects.Object as GObject.Object

newtype PolicyDecision = PolicyDecision (ManagedPtr PolicyDecision)
foreign import ccall "webkit_policy_decision_get_type"
    c_webkit_policy_decision_get_type :: IO GType

instance GObject PolicyDecision where
    gobjectType _ = c_webkit_policy_decision_get_type
    

class GObject o => IsPolicyDecision o
#if MIN_VERSION_base(4,9,0)
instance {-# OVERLAPPABLE #-} (GObject a, O.UnknownAncestorError PolicyDecision a) =>
    IsPolicyDecision a
#endif
instance IsPolicyDecision PolicyDecision
instance GObject.Object.IsObject PolicyDecision

toPolicyDecision :: IsPolicyDecision o => o -> IO PolicyDecision
toPolicyDecision = unsafeCastTo PolicyDecision

noPolicyDecision :: Maybe PolicyDecision
noPolicyDecision = Nothing

type family ResolvePolicyDecisionMethod (t :: Symbol) (o :: *) :: * where
    ResolvePolicyDecisionMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
    ResolvePolicyDecisionMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
    ResolvePolicyDecisionMethod "download" o = PolicyDecisionDownloadMethodInfo
    ResolvePolicyDecisionMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
    ResolvePolicyDecisionMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
    ResolvePolicyDecisionMethod "ignore" o = PolicyDecisionIgnoreMethodInfo
    ResolvePolicyDecisionMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
    ResolvePolicyDecisionMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
    ResolvePolicyDecisionMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
    ResolvePolicyDecisionMethod "ref" o = GObject.Object.ObjectRefMethodInfo
    ResolvePolicyDecisionMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
    ResolvePolicyDecisionMethod "replaceData" o = GObject.Object.ObjectReplaceDataMethodInfo
    ResolvePolicyDecisionMethod "replaceQdata" o = GObject.Object.ObjectReplaceQdataMethodInfo
    ResolvePolicyDecisionMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
    ResolvePolicyDecisionMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
    ResolvePolicyDecisionMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
    ResolvePolicyDecisionMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
    ResolvePolicyDecisionMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo
    ResolvePolicyDecisionMethod "use" o = PolicyDecisionUseMethodInfo
    ResolvePolicyDecisionMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
    ResolvePolicyDecisionMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
    ResolvePolicyDecisionMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
    ResolvePolicyDecisionMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
    ResolvePolicyDecisionMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
    ResolvePolicyDecisionMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
    ResolvePolicyDecisionMethod l o = O.MethodResolutionFailed l o

instance (info ~ ResolvePolicyDecisionMethod t PolicyDecision, O.MethodInfo info PolicyDecision p) => O.IsLabelProxy t (PolicyDecision -> p) where
    fromLabelProxy _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)

#if MIN_VERSION_base(4,9,0)
instance (info ~ ResolvePolicyDecisionMethod t PolicyDecision, O.MethodInfo info PolicyDecision p) => O.IsLabel t (PolicyDecision -> p) where
    fromLabel _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)
#endif

instance O.HasAttributeList PolicyDecision
type instance O.AttributeList PolicyDecision = PolicyDecisionAttributeList
type PolicyDecisionAttributeList = ('[ ] :: [(Symbol, *)])

type instance O.SignalList PolicyDecision = PolicyDecisionSignalList
type PolicyDecisionSignalList = ('[ '("notify", GObject.Object.ObjectNotifySignalInfo)] :: [(Symbol, *)])

-- method PolicyDecision::download
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "decision", argType = TInterface (Name {namespace = "WebKit2", name = "PolicyDecision"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #WebKitPolicyDecision", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "webkit_policy_decision_download" webkit_policy_decision_download :: 
    Ptr PolicyDecision ->                   -- decision : TInterface (Name {namespace = "WebKit2", name = "PolicyDecision"})
    IO ()

{- |
Spawn a download from this decision.
-}
policyDecisionDownload ::
    (B.CallStack.HasCallStack, MonadIO m, IsPolicyDecision a) =>
    a
    {- ^ /@decision@/: a 'GI.WebKit2.Objects.PolicyDecision.PolicyDecision' -}
    -> m ()
policyDecisionDownload decision = liftIO $ do
    decision' <- unsafeManagedPtrCastPtr decision
    webkit_policy_decision_download decision'
    touchManagedPtr decision
    return ()

data PolicyDecisionDownloadMethodInfo
instance (signature ~ (m ()), MonadIO m, IsPolicyDecision a) => O.MethodInfo PolicyDecisionDownloadMethodInfo a signature where
    overloadedMethod _ = policyDecisionDownload

-- method PolicyDecision::ignore
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "decision", argType = TInterface (Name {namespace = "WebKit2", name = "PolicyDecision"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #WebKitPolicyDecision", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "webkit_policy_decision_ignore" webkit_policy_decision_ignore :: 
    Ptr PolicyDecision ->                   -- decision : TInterface (Name {namespace = "WebKit2", name = "PolicyDecision"})
    IO ()

{- |
Ignore the action which triggerd this decision. For instance, for a
'GI.WebKit2.Objects.ResponsePolicyDecision.ResponsePolicyDecision', this would cancel the request.
-}
policyDecisionIgnore ::
    (B.CallStack.HasCallStack, MonadIO m, IsPolicyDecision a) =>
    a
    {- ^ /@decision@/: a 'GI.WebKit2.Objects.PolicyDecision.PolicyDecision' -}
    -> m ()
policyDecisionIgnore decision = liftIO $ do
    decision' <- unsafeManagedPtrCastPtr decision
    webkit_policy_decision_ignore decision'
    touchManagedPtr decision
    return ()

data PolicyDecisionIgnoreMethodInfo
instance (signature ~ (m ()), MonadIO m, IsPolicyDecision a) => O.MethodInfo PolicyDecisionIgnoreMethodInfo a signature where
    overloadedMethod _ = policyDecisionIgnore

-- method PolicyDecision::use
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "decision", argType = TInterface (Name {namespace = "WebKit2", name = "PolicyDecision"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #WebKitPolicyDecision", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "webkit_policy_decision_use" webkit_policy_decision_use :: 
    Ptr PolicyDecision ->                   -- decision : TInterface (Name {namespace = "WebKit2", name = "PolicyDecision"})
    IO ()

{- |
Accept the action which triggerd this decision.
-}
policyDecisionUse ::
    (B.CallStack.HasCallStack, MonadIO m, IsPolicyDecision a) =>
    a
    {- ^ /@decision@/: a 'GI.WebKit2.Objects.PolicyDecision.PolicyDecision' -}
    -> m ()
policyDecisionUse decision = liftIO $ do
    decision' <- unsafeManagedPtrCastPtr decision
    webkit_policy_decision_use decision'
    touchManagedPtr decision
    return ()

data PolicyDecisionUseMethodInfo
instance (signature ~ (m ()), MonadIO m, IsPolicyDecision a) => O.MethodInfo PolicyDecisionUseMethodInfo a signature where
    overloadedMethod _ = policyDecisionUse