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

-- * Exported types
    ScriptWorld(..)                         ,
    ScriptWorldK                            ,
    toScriptWorld                           ,
    noScriptWorld                           ,


 -- * Methods
-- ** scriptWorldGetDefault
    scriptWorldGetDefault                   ,


-- ** scriptWorldNew
    scriptWorldNew                          ,




 -- * Signals
-- ** WindowObjectCleared
    ScriptWorldWindowObjectClearedCallback  ,
    ScriptWorldWindowObjectClearedCallbackC ,
    ScriptWorldWindowObjectClearedSignalInfo,
    afterScriptWorldWindowObjectCleared     ,
    mkScriptWorldWindowObjectClearedCallback,
    noScriptWorldWindowObjectClearedCallback,
    onScriptWorldWindowObjectCleared        ,
    scriptWorldWindowObjectClearedCallbackWrapper,
    scriptWorldWindowObjectClearedClosure   ,




    ) where

import Prelude ()
import Data.GI.Base.ShortPrelude

import qualified Data.Text as T
import qualified Data.ByteString.Char8 as B
import qualified Data.Map as Map

import GI.WebKit2WebExtension.Types
import GI.WebKit2WebExtension.Callbacks
import qualified GI.GObject as GObject

newtype ScriptWorld = ScriptWorld (ForeignPtr ScriptWorld)
foreign import ccall "webkit_script_world_get_type"
    c_webkit_script_world_get_type :: IO GType

type instance ParentTypes ScriptWorld = ScriptWorldParentTypes
type ScriptWorldParentTypes = '[GObject.Object]

instance GObject ScriptWorld where
    gobjectIsInitiallyUnowned _ = False
    gobjectType _ = c_webkit_script_world_get_type
    

class GObject o => ScriptWorldK o
instance (GObject o, IsDescendantOf ScriptWorld o) => ScriptWorldK o

toScriptWorld :: ScriptWorldK o => o -> IO ScriptWorld
toScriptWorld = unsafeCastTo ScriptWorld

noScriptWorld :: Maybe ScriptWorld
noScriptWorld = Nothing

-- signal ScriptWorld::window-object-cleared
type ScriptWorldWindowObjectClearedCallback =
    WebPage ->
    Frame ->
    IO ()

noScriptWorldWindowObjectClearedCallback :: Maybe ScriptWorldWindowObjectClearedCallback
noScriptWorldWindowObjectClearedCallback = Nothing

type ScriptWorldWindowObjectClearedCallbackC =
    Ptr () ->                               -- object
    Ptr WebPage ->
    Ptr Frame ->
    Ptr () ->                               -- user_data
    IO ()

foreign import ccall "wrapper"
    mkScriptWorldWindowObjectClearedCallback :: ScriptWorldWindowObjectClearedCallbackC -> IO (FunPtr ScriptWorldWindowObjectClearedCallbackC)

scriptWorldWindowObjectClearedClosure :: ScriptWorldWindowObjectClearedCallback -> IO Closure
scriptWorldWindowObjectClearedClosure cb = newCClosure =<< mkScriptWorldWindowObjectClearedCallback wrapped
    where wrapped = scriptWorldWindowObjectClearedCallbackWrapper cb

scriptWorldWindowObjectClearedCallbackWrapper ::
    ScriptWorldWindowObjectClearedCallback ->
    Ptr () ->
    Ptr WebPage ->
    Ptr Frame ->
    Ptr () ->
    IO ()
scriptWorldWindowObjectClearedCallbackWrapper _cb _ page frame _ = do
    page' <- (newObject WebPage) page
    frame' <- (newObject Frame) frame
    _cb  page' frame'

onScriptWorldWindowObjectCleared :: (GObject a, MonadIO m) => a -> ScriptWorldWindowObjectClearedCallback -> m SignalHandlerId
onScriptWorldWindowObjectCleared obj cb = liftIO $ connectScriptWorldWindowObjectCleared obj cb SignalConnectBefore
afterScriptWorldWindowObjectCleared :: (GObject a, MonadIO m) => a -> ScriptWorldWindowObjectClearedCallback -> m SignalHandlerId
afterScriptWorldWindowObjectCleared obj cb = connectScriptWorldWindowObjectCleared obj cb SignalConnectAfter

connectScriptWorldWindowObjectCleared :: (GObject a, MonadIO m) =>
                                         a -> ScriptWorldWindowObjectClearedCallback -> SignalConnectMode -> m SignalHandlerId
connectScriptWorldWindowObjectCleared obj cb after = liftIO $ do
    cb' <- mkScriptWorldWindowObjectClearedCallback (scriptWorldWindowObjectClearedCallbackWrapper cb)
    connectSignalFunPtr obj "window-object-cleared" cb' after

type instance AttributeList ScriptWorld = ScriptWorldAttributeList
type ScriptWorldAttributeList = ('[ ] :: [(Symbol, *)])

data ScriptWorldWindowObjectClearedSignalInfo
instance SignalInfo ScriptWorldWindowObjectClearedSignalInfo where
    type HaskellCallbackType ScriptWorldWindowObjectClearedSignalInfo = ScriptWorldWindowObjectClearedCallback
    connectSignal _ = connectScriptWorldWindowObjectCleared

type instance SignalList ScriptWorld = ScriptWorldSignalList
type ScriptWorldSignalList = ('[ '("notify", GObject.ObjectNotifySignalInfo), '("window-object-cleared", ScriptWorldWindowObjectClearedSignalInfo), '("notify::[property]", GObjectNotifySignalInfo)] :: [(Symbol, *)])

-- method ScriptWorld::new
-- method type : Constructor
-- Args : []
-- Lengths : []
-- hInArgs : []
-- returnType : TInterface "WebKit2WebExtension" "ScriptWorld"
-- throws : False
-- Skip return : False

foreign import ccall "webkit_script_world_new" webkit_script_world_new :: 
    IO (Ptr ScriptWorld)


scriptWorldNew ::
    (MonadIO m) =>
    m ScriptWorld
scriptWorldNew  = liftIO $ do
    result <- webkit_script_world_new
    checkUnexpectedReturnNULL "webkit_script_world_new" result
    result' <- (wrapObject ScriptWorld) result
    return result'

-- method ScriptWorld::get_default
-- method type : MemberFunction
-- Args : []
-- Lengths : []
-- hInArgs : []
-- returnType : TInterface "WebKit2WebExtension" "ScriptWorld"
-- throws : False
-- Skip return : False

foreign import ccall "webkit_script_world_get_default" webkit_script_world_get_default :: 
    IO (Ptr ScriptWorld)


scriptWorldGetDefault ::
    (MonadIO m) =>
    m ScriptWorld
scriptWorldGetDefault  = liftIO $ do
    result <- webkit_script_world_get_default
    checkUnexpectedReturnNULL "webkit_script_world_get_default" result
    result' <- (newObject ScriptWorld) result
    return result'