{-# LANGUAGE ImplicitParams, RankNTypes, TypeApplications #-}


-- | Copyright  : Will Thompson and Iñaki García Etxebarria
-- License    : LGPL-2.1
-- Maintainer : Iñaki García Etxebarria
-- 
-- The t'GI.Clutter.Objects.StageManager.StageManager' structure is private.
-- 
-- /Since: 1.0/

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

module GI.Clutter.Objects.StageManager
    ( 

-- * Exported types
    StageManager(..)                        ,
    IsStageManager                          ,
    toStageManager                          ,


 -- * Methods
-- | 
-- 
--  === __Click to display all available methods, including inherited ones__
-- ==== Methods
-- [bindProperty]("GI.GObject.Objects.Object#g:method:bindProperty"), [bindPropertyFull]("GI.GObject.Objects.Object#g:method:bindPropertyFull"), [forceFloating]("GI.GObject.Objects.Object#g:method:forceFloating"), [freezeNotify]("GI.GObject.Objects.Object#g:method:freezeNotify"), [getv]("GI.GObject.Objects.Object#g:method:getv"), [isFloating]("GI.GObject.Objects.Object#g:method:isFloating"), [listStages]("GI.Clutter.Objects.StageManager#g:method:listStages"), [notify]("GI.GObject.Objects.Object#g:method:notify"), [notifyByPspec]("GI.GObject.Objects.Object#g:method:notifyByPspec"), [peekStages]("GI.Clutter.Objects.StageManager#g:method:peekStages"), [ref]("GI.GObject.Objects.Object#g:method:ref"), [refSink]("GI.GObject.Objects.Object#g:method:refSink"), [runDispose]("GI.GObject.Objects.Object#g:method:runDispose"), [stealData]("GI.GObject.Objects.Object#g:method:stealData"), [stealQdata]("GI.GObject.Objects.Object#g:method:stealQdata"), [thawNotify]("GI.GObject.Objects.Object#g:method:thawNotify"), [unref]("GI.GObject.Objects.Object#g:method:unref"), [watchClosure]("GI.GObject.Objects.Object#g:method:watchClosure").
-- 
-- ==== Getters
-- [getData]("GI.GObject.Objects.Object#g:method:getData"), [getDefaultStage]("GI.Clutter.Objects.StageManager#g:method:getDefaultStage"), [getProperty]("GI.GObject.Objects.Object#g:method:getProperty"), [getQdata]("GI.GObject.Objects.Object#g:method:getQdata").
-- 
-- ==== Setters
-- [setData]("GI.GObject.Objects.Object#g:method:setData"), [setDataFull]("GI.GObject.Objects.Object#g:method:setDataFull"), [setDefaultStage]("GI.Clutter.Objects.StageManager#g:method:setDefaultStage"), [setProperty]("GI.GObject.Objects.Object#g:method:setProperty").

#if defined(ENABLE_OVERLOADING)
    ResolveStageManagerMethod               ,
#endif

-- ** getDefault #method:getDefault#

    stageManagerGetDefault                  ,


-- ** getDefaultStage #method:getDefaultStage#

#if defined(ENABLE_OVERLOADING)
    StageManagerGetDefaultStageMethodInfo   ,
#endif
    stageManagerGetDefaultStage             ,


-- ** listStages #method:listStages#

#if defined(ENABLE_OVERLOADING)
    StageManagerListStagesMethodInfo        ,
#endif
    stageManagerListStages                  ,


-- ** peekStages #method:peekStages#

#if defined(ENABLE_OVERLOADING)
    StageManagerPeekStagesMethodInfo        ,
#endif
    stageManagerPeekStages                  ,


-- ** setDefaultStage #method:setDefaultStage#

#if defined(ENABLE_OVERLOADING)
    StageManagerSetDefaultStageMethodInfo   ,
#endif
    stageManagerSetDefaultStage             ,




 -- * Properties


-- ** defaultStage #attr:defaultStage#
-- | The default stage used by Clutter.
-- 
-- /Since: 0.8/

#if defined(ENABLE_OVERLOADING)
    StageManagerDefaultStagePropertyInfo    ,
#endif
    getStageManagerDefaultStage             ,
#if defined(ENABLE_OVERLOADING)
    stageManagerDefaultStage                ,
#endif




 -- * Signals


-- ** stageAdded #signal:stageAdded#

    StageManagerStageAddedCallback          ,
#if defined(ENABLE_OVERLOADING)
    StageManagerStageAddedSignalInfo        ,
#endif
    afterStageManagerStageAdded             ,
    onStageManagerStageAdded                ,


-- ** stageRemoved #signal:stageRemoved#

    StageManagerStageRemovedCallback        ,
#if defined(ENABLE_OVERLOADING)
    StageManagerStageRemovedSignalInfo      ,
#endif
    afterStageManagerStageRemoved           ,
    onStageManagerStageRemoved              ,




    ) 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.BasicTypes as B.Types
import qualified Data.GI.Base.ManagedPtr as B.ManagedPtr
import qualified Data.GI.Base.GArray as B.GArray
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.GI.Base.Signals as B.Signals
import qualified Control.Monad.IO.Class as MIO
import qualified Data.Coerce as Coerce
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 qualified GHC.Records as R

import {-# SOURCE #-} qualified GI.Clutter.Objects.Stage as Clutter.Stage
import qualified GI.GObject.Objects.Object as GObject.Object

-- | Memory-managed wrapper type.
newtype StageManager = StageManager (SP.ManagedPtr StageManager)
    deriving (StageManager -> StageManager -> Bool
(StageManager -> StageManager -> Bool)
-> (StageManager -> StageManager -> Bool) -> Eq StageManager
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: StageManager -> StageManager -> Bool
$c/= :: StageManager -> StageManager -> Bool
== :: StageManager -> StageManager -> Bool
$c== :: StageManager -> StageManager -> Bool
Eq)

instance SP.ManagedPtrNewtype StageManager where
    toManagedPtr :: StageManager -> ManagedPtr StageManager
toManagedPtr (StageManager ManagedPtr StageManager
p) = ManagedPtr StageManager
p

foreign import ccall "clutter_stage_manager_get_type"
    c_clutter_stage_manager_get_type :: IO B.Types.GType

instance B.Types.TypedObject StageManager where
    glibType :: IO GType
glibType = IO GType
c_clutter_stage_manager_get_type

instance B.Types.GObject StageManager

-- | Type class for types which can be safely cast to `StageManager`, for instance with `toStageManager`.
class (SP.GObject o, O.IsDescendantOf StageManager o) => IsStageManager o
instance (SP.GObject o, O.IsDescendantOf StageManager o) => IsStageManager o

instance O.HasParentTypes StageManager
type instance O.ParentTypes StageManager = '[GObject.Object.Object]

-- | Cast to `StageManager`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`.
toStageManager :: (MIO.MonadIO m, IsStageManager o) => o -> m StageManager
toStageManager :: forall (m :: * -> *) o.
(MonadIO m, IsStageManager o) =>
o -> m StageManager
toStageManager = IO StageManager -> m StageManager
forall (m :: * -> *) a. MonadIO m => IO a -> m a
MIO.liftIO (IO StageManager -> m StageManager)
-> (o -> IO StageManager) -> o -> m StageManager
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ManagedPtr StageManager -> StageManager) -> o -> IO StageManager
forall o o'.
(HasCallStack, ManagedPtrNewtype o, TypedObject o,
 ManagedPtrNewtype o', TypedObject o') =>
(ManagedPtr o' -> o') -> o -> IO o'
B.ManagedPtr.unsafeCastTo ManagedPtr StageManager -> StageManager
StageManager

-- | Convert 'StageManager' to and from 'Data.GI.Base.GValue.GValue'. See 'Data.GI.Base.GValue.toGValue' and 'Data.GI.Base.GValue.fromGValue'.
instance B.GValue.IsGValue (Maybe StageManager) where
    gvalueGType_ :: IO GType
gvalueGType_ = IO GType
c_clutter_stage_manager_get_type
    gvalueSet_ :: Ptr GValue -> Maybe StageManager -> IO ()
gvalueSet_ Ptr GValue
gv Maybe StageManager
P.Nothing = Ptr GValue -> Ptr StageManager -> IO ()
forall a. GObject a => Ptr GValue -> Ptr a -> IO ()
B.GValue.set_object Ptr GValue
gv (Ptr StageManager
forall a. Ptr a
FP.nullPtr :: FP.Ptr StageManager)
    gvalueSet_ Ptr GValue
gv (P.Just StageManager
obj) = StageManager -> (Ptr StageManager -> IO ()) -> IO ()
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
B.ManagedPtr.withManagedPtr StageManager
obj (Ptr GValue -> Ptr StageManager -> IO ()
forall a. GObject a => Ptr GValue -> Ptr a -> IO ()
B.GValue.set_object Ptr GValue
gv)
    gvalueGet_ :: Ptr GValue -> IO (Maybe StageManager)
gvalueGet_ Ptr GValue
gv = do
        Ptr StageManager
ptr <- Ptr GValue -> IO (Ptr StageManager)
forall a. GObject a => Ptr GValue -> IO (Ptr a)
B.GValue.get_object Ptr GValue
gv :: IO (FP.Ptr StageManager)
        if Ptr StageManager
ptr Ptr StageManager -> Ptr StageManager -> Bool
forall a. Eq a => a -> a -> Bool
/= Ptr StageManager
forall a. Ptr a
FP.nullPtr
        then StageManager -> Maybe StageManager
forall a. a -> Maybe a
P.Just (StageManager -> Maybe StageManager)
-> IO StageManager -> IO (Maybe StageManager)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (ManagedPtr StageManager -> StageManager)
-> Ptr StageManager -> IO StageManager
forall a b.
(HasCallStack, GObject a, GObject b) =>
(ManagedPtr a -> a) -> Ptr b -> IO a
B.ManagedPtr.newObject ManagedPtr StageManager -> StageManager
StageManager Ptr StageManager
ptr
        else Maybe StageManager -> IO (Maybe StageManager)
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe StageManager
forall a. Maybe a
P.Nothing
        
    

#if defined(ENABLE_OVERLOADING)
type family ResolveStageManagerMethod (t :: Symbol) (o :: *) :: * where
    ResolveStageManagerMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
    ResolveStageManagerMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
    ResolveStageManagerMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
    ResolveStageManagerMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
    ResolveStageManagerMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
    ResolveStageManagerMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
    ResolveStageManagerMethod "listStages" o = StageManagerListStagesMethodInfo
    ResolveStageManagerMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
    ResolveStageManagerMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
    ResolveStageManagerMethod "peekStages" o = StageManagerPeekStagesMethodInfo
    ResolveStageManagerMethod "ref" o = GObject.Object.ObjectRefMethodInfo
    ResolveStageManagerMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
    ResolveStageManagerMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
    ResolveStageManagerMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
    ResolveStageManagerMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
    ResolveStageManagerMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
    ResolveStageManagerMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo
    ResolveStageManagerMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
    ResolveStageManagerMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
    ResolveStageManagerMethod "getDefaultStage" o = StageManagerGetDefaultStageMethodInfo
    ResolveStageManagerMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
    ResolveStageManagerMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
    ResolveStageManagerMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
    ResolveStageManagerMethod "setDataFull" o = GObject.Object.ObjectSetDataFullMethodInfo
    ResolveStageManagerMethod "setDefaultStage" o = StageManagerSetDefaultStageMethodInfo
    ResolveStageManagerMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
    ResolveStageManagerMethod l o = O.MethodResolutionFailed l o

instance (info ~ ResolveStageManagerMethod t StageManager, O.OverloadedMethod info StageManager p) => OL.IsLabel t (StageManager -> p) where
#if MIN_VERSION_base(4,10,0)
    fromLabel = O.overloadedMethod @info
#else
    fromLabel _ = O.overloadedMethod @info
#endif

#if MIN_VERSION_base(4,13,0)
instance (info ~ ResolveStageManagerMethod t StageManager, O.OverloadedMethod info StageManager p, R.HasField t StageManager p) => R.HasField t StageManager p where
    getField = O.overloadedMethod @info

#endif

instance (info ~ ResolveStageManagerMethod t StageManager, O.OverloadedMethodInfo info StageManager) => OL.IsLabel t (O.MethodProxy info StageManager) where
#if MIN_VERSION_base(4,10,0)
    fromLabel = O.MethodProxy
#else
    fromLabel _ = O.MethodProxy
#endif

#endif

-- signal StageManager::stage-added
-- | The [stageAdded](#g:signal:stageAdded) signal is emitted each time a new t'GI.Clutter.Objects.Stage.Stage'
-- has been added to the stage manager.
-- 
-- /Since: 0.8/
type StageManagerStageAddedCallback =
    Clutter.Stage.Stage
    -- ^ /@stage@/: the added stage
    -> IO ()

type C_StageManagerStageAddedCallback =
    Ptr StageManager ->                     -- object
    Ptr Clutter.Stage.Stage ->
    Ptr () ->                               -- user_data
    IO ()

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

wrap_StageManagerStageAddedCallback :: 
    GObject a => (a -> StageManagerStageAddedCallback) ->
    C_StageManagerStageAddedCallback
wrap_StageManagerStageAddedCallback :: forall a.
GObject a =>
(a -> StageManagerStageAddedCallback)
-> C_StageManagerStageAddedCallback
wrap_StageManagerStageAddedCallback a -> StageManagerStageAddedCallback
gi'cb Ptr StageManager
gi'selfPtr Ptr Stage
stage Ptr ()
_ = do
    Stage
stage' <- ((ManagedPtr Stage -> Stage) -> Ptr Stage -> IO Stage
forall a b.
(HasCallStack, GObject a, GObject b) =>
(ManagedPtr a -> a) -> Ptr b -> IO a
newObject ManagedPtr Stage -> Stage
Clutter.Stage.Stage) Ptr Stage
stage
    Ptr StageManager -> (StageManager -> IO ()) -> IO ()
forall a b.
(HasCallStack, ManagedPtrNewtype a) =>
Ptr a -> (a -> IO b) -> IO b
B.ManagedPtr.withTransient Ptr StageManager
gi'selfPtr ((StageManager -> IO ()) -> IO ())
-> (StageManager -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \StageManager
gi'self -> a -> StageManagerStageAddedCallback
gi'cb (StageManager -> a
Coerce.coerce StageManager
gi'self)  Stage
stage'


-- | Connect a signal handler for the [stageAdded](#signal:stageAdded) signal, to be run before the default handler.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Signals.on' stageManager #stageAdded callback
-- @
-- 
-- 
onStageManagerStageAdded :: (IsStageManager a, MonadIO m) => a -> ((?self :: a) => StageManagerStageAddedCallback) -> m SignalHandlerId
onStageManagerStageAdded :: forall a (m :: * -> *).
(IsStageManager a, MonadIO m) =>
a
-> ((?self::a) => StageManagerStageAddedCallback)
-> m SignalHandlerId
onStageManagerStageAdded a
obj (?self::a) => StageManagerStageAddedCallback
cb = IO SignalHandlerId -> m SignalHandlerId
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO SignalHandlerId -> m SignalHandlerId)
-> IO SignalHandlerId -> m SignalHandlerId
forall a b. (a -> b) -> a -> b
$ do
    let wrapped :: a -> StageManagerStageAddedCallback
wrapped a
self = let ?self = a
?self::a
self in (?self::a) => StageManagerStageAddedCallback
StageManagerStageAddedCallback
cb
    let wrapped' :: C_StageManagerStageAddedCallback
wrapped' = (a -> StageManagerStageAddedCallback)
-> C_StageManagerStageAddedCallback
forall a.
GObject a =>
(a -> StageManagerStageAddedCallback)
-> C_StageManagerStageAddedCallback
wrap_StageManagerStageAddedCallback a -> StageManagerStageAddedCallback
wrapped
    FunPtr C_StageManagerStageAddedCallback
wrapped'' <- C_StageManagerStageAddedCallback
-> IO (FunPtr C_StageManagerStageAddedCallback)
mk_StageManagerStageAddedCallback C_StageManagerStageAddedCallback
wrapped'
    a
-> Text
-> FunPtr C_StageManagerStageAddedCallback
-> SignalConnectMode
-> Maybe Text
-> IO SignalHandlerId
forall o a.
GObject o =>
o
-> Text
-> FunPtr a
-> SignalConnectMode
-> Maybe Text
-> IO SignalHandlerId
connectSignalFunPtr a
obj Text
"stage-added" FunPtr C_StageManagerStageAddedCallback
wrapped'' SignalConnectMode
SignalConnectBefore Maybe Text
forall a. Maybe a
Nothing

-- | Connect a signal handler for the [stageAdded](#signal:stageAdded) signal, to be run after the default handler.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Signals.after' stageManager #stageAdded callback
-- @
-- 
-- 
-- 
-- By default the object invoking the signal is not passed to the callback.
-- If you need to access it, you can use the implit @?self@ parameter.
-- Note that this requires activating the @ImplicitParams@ GHC extension.
-- 
afterStageManagerStageAdded :: (IsStageManager a, MonadIO m) => a -> ((?self :: a) => StageManagerStageAddedCallback) -> m SignalHandlerId
afterStageManagerStageAdded :: forall a (m :: * -> *).
(IsStageManager a, MonadIO m) =>
a
-> ((?self::a) => StageManagerStageAddedCallback)
-> m SignalHandlerId
afterStageManagerStageAdded a
obj (?self::a) => StageManagerStageAddedCallback
cb = IO SignalHandlerId -> m SignalHandlerId
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO SignalHandlerId -> m SignalHandlerId)
-> IO SignalHandlerId -> m SignalHandlerId
forall a b. (a -> b) -> a -> b
$ do
    let wrapped :: a -> StageManagerStageAddedCallback
wrapped a
self = let ?self = a
?self::a
self in (?self::a) => StageManagerStageAddedCallback
StageManagerStageAddedCallback
cb
    let wrapped' :: C_StageManagerStageAddedCallback
wrapped' = (a -> StageManagerStageAddedCallback)
-> C_StageManagerStageAddedCallback
forall a.
GObject a =>
(a -> StageManagerStageAddedCallback)
-> C_StageManagerStageAddedCallback
wrap_StageManagerStageAddedCallback a -> StageManagerStageAddedCallback
wrapped
    FunPtr C_StageManagerStageAddedCallback
wrapped'' <- C_StageManagerStageAddedCallback
-> IO (FunPtr C_StageManagerStageAddedCallback)
mk_StageManagerStageAddedCallback C_StageManagerStageAddedCallback
wrapped'
    a
-> Text
-> FunPtr C_StageManagerStageAddedCallback
-> SignalConnectMode
-> Maybe Text
-> IO SignalHandlerId
forall o a.
GObject o =>
o
-> Text
-> FunPtr a
-> SignalConnectMode
-> Maybe Text
-> IO SignalHandlerId
connectSignalFunPtr a
obj Text
"stage-added" FunPtr C_StageManagerStageAddedCallback
wrapped'' SignalConnectMode
SignalConnectAfter Maybe Text
forall a. Maybe a
Nothing


#if defined(ENABLE_OVERLOADING)
data StageManagerStageAddedSignalInfo
instance SignalInfo StageManagerStageAddedSignalInfo where
    type HaskellCallbackType StageManagerStageAddedSignalInfo = StageManagerStageAddedCallback
    connectSignal obj cb connectMode detail = do
        let cb' = wrap_StageManagerStageAddedCallback cb
        cb'' <- mk_StageManagerStageAddedCallback cb'
        connectSignalFunPtr obj "stage-added" cb'' connectMode detail
    dbgSignalInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.Clutter.Objects.StageManager::stage-added"
        , O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-clutter-1.0.2/docs/GI-Clutter-Objects-StageManager.html#g:signal:stageAdded"})

#endif

-- signal StageManager::stage-removed
-- | The [stageRemoved](#g:signal:stageRemoved) signal is emitted each time a t'GI.Clutter.Objects.Stage.Stage'
-- has been removed from the stage manager.
-- 
-- /Since: 0.8/
type StageManagerStageRemovedCallback =
    Clutter.Stage.Stage
    -- ^ /@stage@/: the removed stage
    -> IO ()

type C_StageManagerStageRemovedCallback =
    Ptr StageManager ->                     -- object
    Ptr Clutter.Stage.Stage ->
    Ptr () ->                               -- user_data
    IO ()

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

wrap_StageManagerStageRemovedCallback :: 
    GObject a => (a -> StageManagerStageRemovedCallback) ->
    C_StageManagerStageRemovedCallback
wrap_StageManagerStageRemovedCallback :: forall a.
GObject a =>
(a -> StageManagerStageAddedCallback)
-> C_StageManagerStageAddedCallback
wrap_StageManagerStageRemovedCallback a -> StageManagerStageAddedCallback
gi'cb Ptr StageManager
gi'selfPtr Ptr Stage
stage Ptr ()
_ = do
    Stage
stage' <- ((ManagedPtr Stage -> Stage) -> Ptr Stage -> IO Stage
forall a b.
(HasCallStack, GObject a, GObject b) =>
(ManagedPtr a -> a) -> Ptr b -> IO a
newObject ManagedPtr Stage -> Stage
Clutter.Stage.Stage) Ptr Stage
stage
    Ptr StageManager -> (StageManager -> IO ()) -> IO ()
forall a b.
(HasCallStack, ManagedPtrNewtype a) =>
Ptr a -> (a -> IO b) -> IO b
B.ManagedPtr.withTransient Ptr StageManager
gi'selfPtr ((StageManager -> IO ()) -> IO ())
-> (StageManager -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \StageManager
gi'self -> a -> StageManagerStageAddedCallback
gi'cb (StageManager -> a
Coerce.coerce StageManager
gi'self)  Stage
stage'


-- | Connect a signal handler for the [stageRemoved](#signal:stageRemoved) signal, to be run before the default handler.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Signals.on' stageManager #stageRemoved callback
-- @
-- 
-- 
onStageManagerStageRemoved :: (IsStageManager a, MonadIO m) => a -> ((?self :: a) => StageManagerStageRemovedCallback) -> m SignalHandlerId
onStageManagerStageRemoved :: forall a (m :: * -> *).
(IsStageManager a, MonadIO m) =>
a
-> ((?self::a) => StageManagerStageAddedCallback)
-> m SignalHandlerId
onStageManagerStageRemoved a
obj (?self::a) => StageManagerStageAddedCallback
cb = IO SignalHandlerId -> m SignalHandlerId
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO SignalHandlerId -> m SignalHandlerId)
-> IO SignalHandlerId -> m SignalHandlerId
forall a b. (a -> b) -> a -> b
$ do
    let wrapped :: a -> StageManagerStageAddedCallback
wrapped a
self = let ?self = a
?self::a
self in (?self::a) => StageManagerStageAddedCallback
StageManagerStageAddedCallback
cb
    let wrapped' :: C_StageManagerStageAddedCallback
wrapped' = (a -> StageManagerStageAddedCallback)
-> C_StageManagerStageAddedCallback
forall a.
GObject a =>
(a -> StageManagerStageAddedCallback)
-> C_StageManagerStageAddedCallback
wrap_StageManagerStageRemovedCallback a -> StageManagerStageAddedCallback
wrapped
    FunPtr C_StageManagerStageAddedCallback
wrapped'' <- C_StageManagerStageAddedCallback
-> IO (FunPtr C_StageManagerStageAddedCallback)
mk_StageManagerStageRemovedCallback C_StageManagerStageAddedCallback
wrapped'
    a
-> Text
-> FunPtr C_StageManagerStageAddedCallback
-> SignalConnectMode
-> Maybe Text
-> IO SignalHandlerId
forall o a.
GObject o =>
o
-> Text
-> FunPtr a
-> SignalConnectMode
-> Maybe Text
-> IO SignalHandlerId
connectSignalFunPtr a
obj Text
"stage-removed" FunPtr C_StageManagerStageAddedCallback
wrapped'' SignalConnectMode
SignalConnectBefore Maybe Text
forall a. Maybe a
Nothing

-- | Connect a signal handler for the [stageRemoved](#signal:stageRemoved) signal, to be run after the default handler.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Signals.after' stageManager #stageRemoved callback
-- @
-- 
-- 
-- 
-- By default the object invoking the signal is not passed to the callback.
-- If you need to access it, you can use the implit @?self@ parameter.
-- Note that this requires activating the @ImplicitParams@ GHC extension.
-- 
afterStageManagerStageRemoved :: (IsStageManager a, MonadIO m) => a -> ((?self :: a) => StageManagerStageRemovedCallback) -> m SignalHandlerId
afterStageManagerStageRemoved :: forall a (m :: * -> *).
(IsStageManager a, MonadIO m) =>
a
-> ((?self::a) => StageManagerStageAddedCallback)
-> m SignalHandlerId
afterStageManagerStageRemoved a
obj (?self::a) => StageManagerStageAddedCallback
cb = IO SignalHandlerId -> m SignalHandlerId
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO SignalHandlerId -> m SignalHandlerId)
-> IO SignalHandlerId -> m SignalHandlerId
forall a b. (a -> b) -> a -> b
$ do
    let wrapped :: a -> StageManagerStageAddedCallback
wrapped a
self = let ?self = a
?self::a
self in (?self::a) => StageManagerStageAddedCallback
StageManagerStageAddedCallback
cb
    let wrapped' :: C_StageManagerStageAddedCallback
wrapped' = (a -> StageManagerStageAddedCallback)
-> C_StageManagerStageAddedCallback
forall a.
GObject a =>
(a -> StageManagerStageAddedCallback)
-> C_StageManagerStageAddedCallback
wrap_StageManagerStageRemovedCallback a -> StageManagerStageAddedCallback
wrapped
    FunPtr C_StageManagerStageAddedCallback
wrapped'' <- C_StageManagerStageAddedCallback
-> IO (FunPtr C_StageManagerStageAddedCallback)
mk_StageManagerStageRemovedCallback C_StageManagerStageAddedCallback
wrapped'
    a
-> Text
-> FunPtr C_StageManagerStageAddedCallback
-> SignalConnectMode
-> Maybe Text
-> IO SignalHandlerId
forall o a.
GObject o =>
o
-> Text
-> FunPtr a
-> SignalConnectMode
-> Maybe Text
-> IO SignalHandlerId
connectSignalFunPtr a
obj Text
"stage-removed" FunPtr C_StageManagerStageAddedCallback
wrapped'' SignalConnectMode
SignalConnectAfter Maybe Text
forall a. Maybe a
Nothing


#if defined(ENABLE_OVERLOADING)
data StageManagerStageRemovedSignalInfo
instance SignalInfo StageManagerStageRemovedSignalInfo where
    type HaskellCallbackType StageManagerStageRemovedSignalInfo = StageManagerStageRemovedCallback
    connectSignal obj cb connectMode detail = do
        let cb' = wrap_StageManagerStageRemovedCallback cb
        cb'' <- mk_StageManagerStageRemovedCallback cb'
        connectSignalFunPtr obj "stage-removed" cb'' connectMode detail
    dbgSignalInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.Clutter.Objects.StageManager::stage-removed"
        , O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-clutter-1.0.2/docs/GI-Clutter-Objects-StageManager.html#g:signal:stageRemoved"})

#endif

-- VVV Prop "default-stage"
   -- Type: TInterface (Name {namespace = "Clutter", name = "Stage"})
   -- Flags: [PropertyReadable]
   -- Nullable: (Just False,Just False)

-- | Get the value of the “@default-stage@” property.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.get' stageManager #defaultStage
-- @
getStageManagerDefaultStage :: (MonadIO m, IsStageManager o) => o -> m Clutter.Stage.Stage
getStageManagerDefaultStage :: forall (m :: * -> *) o.
(MonadIO m, IsStageManager o) =>
o -> m Stage
getStageManagerDefaultStage o
obj = IO Stage -> m Stage
forall (m :: * -> *) a. MonadIO m => IO a -> m a
MIO.liftIO (IO Stage -> m Stage) -> IO Stage -> m Stage
forall a b. (a -> b) -> a -> b
$ Text -> IO (Maybe Stage) -> IO Stage
forall a. HasCallStack => Text -> IO (Maybe a) -> IO a
checkUnexpectedNothing Text
"getStageManagerDefaultStage" (IO (Maybe Stage) -> IO Stage) -> IO (Maybe Stage) -> IO Stage
forall a b. (a -> b) -> a -> b
$ o -> String -> (ManagedPtr Stage -> Stage) -> IO (Maybe Stage)
forall a b.
(GObject a, GObject b) =>
a -> String -> (ManagedPtr b -> b) -> IO (Maybe b)
B.Properties.getObjectPropertyObject o
obj String
"default-stage" ManagedPtr Stage -> Stage
Clutter.Stage.Stage

#if defined(ENABLE_OVERLOADING)
data StageManagerDefaultStagePropertyInfo
instance AttrInfo StageManagerDefaultStagePropertyInfo where
    type AttrAllowedOps StageManagerDefaultStagePropertyInfo = '[ 'AttrGet]
    type AttrBaseTypeConstraint StageManagerDefaultStagePropertyInfo = IsStageManager
    type AttrSetTypeConstraint StageManagerDefaultStagePropertyInfo = (~) ()
    type AttrTransferTypeConstraint StageManagerDefaultStagePropertyInfo = (~) ()
    type AttrTransferType StageManagerDefaultStagePropertyInfo = ()
    type AttrGetType StageManagerDefaultStagePropertyInfo = Clutter.Stage.Stage
    type AttrLabel StageManagerDefaultStagePropertyInfo = "default-stage"
    type AttrOrigin StageManagerDefaultStagePropertyInfo = StageManager
    attrGet = getStageManagerDefaultStage
    attrSet = undefined
    attrTransfer _ = undefined
    attrConstruct = undefined
    attrClear = undefined
    dbgAttrInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.Clutter.Objects.StageManager.defaultStage"
        , O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-clutter-1.0.2/docs/GI-Clutter-Objects-StageManager.html#g:attr:defaultStage"
        })
#endif

#if defined(ENABLE_OVERLOADING)
instance O.HasAttributeList StageManager
type instance O.AttributeList StageManager = StageManagerAttributeList
type StageManagerAttributeList = ('[ '("defaultStage", StageManagerDefaultStagePropertyInfo)] :: [(Symbol, *)])
#endif

#if defined(ENABLE_OVERLOADING)
stageManagerDefaultStage :: AttrLabelProxy "defaultStage"
stageManagerDefaultStage = AttrLabelProxy

#endif

#if defined(ENABLE_OVERLOADING)
type instance O.SignalList StageManager = StageManagerSignalList
type StageManagerSignalList = ('[ '("notify", GObject.Object.ObjectNotifySignalInfo), '("stageAdded", StageManagerStageAddedSignalInfo), '("stageRemoved", StageManagerStageRemovedSignalInfo)] :: [(Symbol, *)])

#endif

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

foreign import ccall "clutter_stage_manager_get_default_stage" clutter_stage_manager_get_default_stage :: 
    Ptr StageManager ->                     -- stage_manager : TInterface (Name {namespace = "Clutter", name = "StageManager"})
    IO (Ptr Clutter.Stage.Stage)

-- | Returns the default t'GI.Clutter.Objects.Stage.Stage'.
-- 
-- /Since: 0.8/
stageManagerGetDefaultStage ::
    (B.CallStack.HasCallStack, MonadIO m, IsStageManager a) =>
    a
    -- ^ /@stageManager@/: a t'GI.Clutter.Objects.StageManager.StageManager'
    -> m Clutter.Stage.Stage
    -- ^ __Returns:__ the default stage. The returned object
    --   is owned by Clutter and you should never reference or unreference it
stageManagerGetDefaultStage :: forall (m :: * -> *) a.
(HasCallStack, MonadIO m, IsStageManager a) =>
a -> m Stage
stageManagerGetDefaultStage a
stageManager = IO Stage -> m Stage
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Stage -> m Stage) -> IO Stage -> m Stage
forall a b. (a -> b) -> a -> b
$ do
    Ptr StageManager
stageManager' <- a -> IO (Ptr StageManager)
forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
unsafeManagedPtrCastPtr a
stageManager
    Ptr Stage
result <- Ptr StageManager -> IO (Ptr Stage)
clutter_stage_manager_get_default_stage Ptr StageManager
stageManager'
    Text -> Ptr Stage -> IO ()
forall a. HasCallStack => Text -> Ptr a -> IO ()
checkUnexpectedReturnNULL Text
"stageManagerGetDefaultStage" Ptr Stage
result
    Stage
result' <- ((ManagedPtr Stage -> Stage) -> Ptr Stage -> IO Stage
forall a b.
(HasCallStack, GObject a, GObject b) =>
(ManagedPtr a -> a) -> Ptr b -> IO a
newObject ManagedPtr Stage -> Stage
Clutter.Stage.Stage) Ptr Stage
result
    a -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr a
stageManager
    Stage -> IO Stage
forall (m :: * -> *) a. Monad m => a -> m a
return Stage
result'

#if defined(ENABLE_OVERLOADING)
data StageManagerGetDefaultStageMethodInfo
instance (signature ~ (m Clutter.Stage.Stage), MonadIO m, IsStageManager a) => O.OverloadedMethod StageManagerGetDefaultStageMethodInfo a signature where
    overloadedMethod = stageManagerGetDefaultStage

instance O.OverloadedMethodInfo StageManagerGetDefaultStageMethodInfo a where
    overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.Clutter.Objects.StageManager.stageManagerGetDefaultStage",
        O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-clutter-1.0.2/docs/GI-Clutter-Objects-StageManager.html#v:stageManagerGetDefaultStage"
        })


#endif

-- method StageManager::list_stages
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "stage_manager"
--           , argType =
--               TInterface Name { namespace = "Clutter" , name = "StageManager" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a #ClutterStageManager"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Just
--               (TGSList
--                  (TInterface Name { namespace = "Clutter" , name = "Stage" }))
-- throws : False
-- Skip return : False

foreign import ccall "clutter_stage_manager_list_stages" clutter_stage_manager_list_stages :: 
    Ptr StageManager ->                     -- stage_manager : TInterface (Name {namespace = "Clutter", name = "StageManager"})
    IO (Ptr (GSList (Ptr Clutter.Stage.Stage)))

-- | Lists all currently used stages.
-- 
-- /Since: 0.8/
stageManagerListStages ::
    (B.CallStack.HasCallStack, MonadIO m, IsStageManager a) =>
    a
    -- ^ /@stageManager@/: a t'GI.Clutter.Objects.StageManager.StageManager'
    -> m [Clutter.Stage.Stage]
    -- ^ __Returns:__ a newly
    --   allocated list of t'GI.Clutter.Objects.Stage.Stage' objects. Use @/g_slist_free()/@ to
    --   deallocate it when done.
stageManagerListStages :: forall (m :: * -> *) a.
(HasCallStack, MonadIO m, IsStageManager a) =>
a -> m [Stage]
stageManagerListStages a
stageManager = IO [Stage] -> m [Stage]
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO [Stage] -> m [Stage]) -> IO [Stage] -> m [Stage]
forall a b. (a -> b) -> a -> b
$ do
    Ptr StageManager
stageManager' <- a -> IO (Ptr StageManager)
forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
unsafeManagedPtrCastPtr a
stageManager
    Ptr (GSList (Ptr Stage))
result <- Ptr StageManager -> IO (Ptr (GSList (Ptr Stage)))
clutter_stage_manager_list_stages Ptr StageManager
stageManager'
    [Ptr Stage]
result' <- Ptr (GSList (Ptr Stage)) -> IO [Ptr Stage]
forall a. Ptr (GSList (Ptr a)) -> IO [Ptr a]
unpackGSList Ptr (GSList (Ptr Stage))
result
    [Stage]
result'' <- (Ptr Stage -> IO Stage) -> [Ptr Stage] -> IO [Stage]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM ((ManagedPtr Stage -> Stage) -> Ptr Stage -> IO Stage
forall a b.
(HasCallStack, GObject a, GObject b) =>
(ManagedPtr a -> a) -> Ptr b -> IO a
newObject ManagedPtr Stage -> Stage
Clutter.Stage.Stage) [Ptr Stage]
result'
    Ptr (GSList (Ptr Stage)) -> IO ()
forall a. Ptr (GSList a) -> IO ()
g_slist_free Ptr (GSList (Ptr Stage))
result
    a -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr a
stageManager
    [Stage] -> IO [Stage]
forall (m :: * -> *) a. Monad m => a -> m a
return [Stage]
result''

#if defined(ENABLE_OVERLOADING)
data StageManagerListStagesMethodInfo
instance (signature ~ (m [Clutter.Stage.Stage]), MonadIO m, IsStageManager a) => O.OverloadedMethod StageManagerListStagesMethodInfo a signature where
    overloadedMethod = stageManagerListStages

instance O.OverloadedMethodInfo StageManagerListStagesMethodInfo a where
    overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.Clutter.Objects.StageManager.stageManagerListStages",
        O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-clutter-1.0.2/docs/GI-Clutter-Objects-StageManager.html#v:stageManagerListStages"
        })


#endif

-- method StageManager::peek_stages
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "stage_manager"
--           , argType =
--               TInterface Name { namespace = "Clutter" , name = "StageManager" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a #ClutterStageManager"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Just
--               (TGSList
--                  (TInterface Name { namespace = "Clutter" , name = "Stage" }))
-- throws : False
-- Skip return : False

foreign import ccall "clutter_stage_manager_peek_stages" clutter_stage_manager_peek_stages :: 
    Ptr StageManager ->                     -- stage_manager : TInterface (Name {namespace = "Clutter", name = "StageManager"})
    IO (Ptr (GSList (Ptr Clutter.Stage.Stage)))

-- | Lists all currently used stages.
-- 
-- /Since: 1.0/
stageManagerPeekStages ::
    (B.CallStack.HasCallStack, MonadIO m, IsStageManager a) =>
    a
    -- ^ /@stageManager@/: a t'GI.Clutter.Objects.StageManager.StageManager'
    -> m [Clutter.Stage.Stage]
    -- ^ __Returns:__ a pointer
    --   to the internal list of t'GI.Clutter.Objects.Stage.Stage' objects. The returned list
    --   is owned by the t'GI.Clutter.Objects.StageManager.StageManager' and should never be modified
    --   or freed
stageManagerPeekStages :: forall (m :: * -> *) a.
(HasCallStack, MonadIO m, IsStageManager a) =>
a -> m [Stage]
stageManagerPeekStages a
stageManager = IO [Stage] -> m [Stage]
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO [Stage] -> m [Stage]) -> IO [Stage] -> m [Stage]
forall a b. (a -> b) -> a -> b
$ do
    Ptr StageManager
stageManager' <- a -> IO (Ptr StageManager)
forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
unsafeManagedPtrCastPtr a
stageManager
    Ptr (GSList (Ptr Stage))
result <- Ptr StageManager -> IO (Ptr (GSList (Ptr Stage)))
clutter_stage_manager_peek_stages Ptr StageManager
stageManager'
    [Ptr Stage]
result' <- Ptr (GSList (Ptr Stage)) -> IO [Ptr Stage]
forall a. Ptr (GSList (Ptr a)) -> IO [Ptr a]
unpackGSList Ptr (GSList (Ptr Stage))
result
    [Stage]
result'' <- (Ptr Stage -> IO Stage) -> [Ptr Stage] -> IO [Stage]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM ((ManagedPtr Stage -> Stage) -> Ptr Stage -> IO Stage
forall a b.
(HasCallStack, GObject a, GObject b) =>
(ManagedPtr a -> a) -> Ptr b -> IO a
newObject ManagedPtr Stage -> Stage
Clutter.Stage.Stage) [Ptr Stage]
result'
    a -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr a
stageManager
    [Stage] -> IO [Stage]
forall (m :: * -> *) a. Monad m => a -> m a
return [Stage]
result''

#if defined(ENABLE_OVERLOADING)
data StageManagerPeekStagesMethodInfo
instance (signature ~ (m [Clutter.Stage.Stage]), MonadIO m, IsStageManager a) => O.OverloadedMethod StageManagerPeekStagesMethodInfo a signature where
    overloadedMethod = stageManagerPeekStages

instance O.OverloadedMethodInfo StageManagerPeekStagesMethodInfo a where
    overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.Clutter.Objects.StageManager.stageManagerPeekStages",
        O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-clutter-1.0.2/docs/GI-Clutter-Objects-StageManager.html#v:stageManagerPeekStages"
        })


#endif

-- method StageManager::set_default_stage
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "stage_manager"
--           , argType =
--               TInterface Name { namespace = "Clutter" , name = "StageManager" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a #ClutterStageManager"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "stage"
--           , argType =
--               TInterface Name { namespace = "Clutter" , name = "Stage" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a #ClutterStage" , sinceVersion = Nothing }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Nothing
-- throws : False
-- Skip return : False

foreign import ccall "clutter_stage_manager_set_default_stage" clutter_stage_manager_set_default_stage :: 
    Ptr StageManager ->                     -- stage_manager : TInterface (Name {namespace = "Clutter", name = "StageManager"})
    Ptr Clutter.Stage.Stage ->              -- stage : TInterface (Name {namespace = "Clutter", name = "Stage"})
    IO ()

{-# DEPRECATED stageManagerSetDefaultStage ["(Since version 1.2)","Calling this function has no effect"] #-}
-- | Sets /@stage@/ as the default stage.
-- 
-- /Since: 0.8/
stageManagerSetDefaultStage ::
    (B.CallStack.HasCallStack, MonadIO m, IsStageManager a, Clutter.Stage.IsStage b) =>
    a
    -- ^ /@stageManager@/: a t'GI.Clutter.Objects.StageManager.StageManager'
    -> b
    -- ^ /@stage@/: a t'GI.Clutter.Objects.Stage.Stage'
    -> m ()
stageManagerSetDefaultStage :: forall (m :: * -> *) a b.
(HasCallStack, MonadIO m, IsStageManager a, IsStage b) =>
a -> b -> m ()
stageManagerSetDefaultStage a
stageManager b
stage = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ do
    Ptr StageManager
stageManager' <- a -> IO (Ptr StageManager)
forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
unsafeManagedPtrCastPtr a
stageManager
    Ptr Stage
stage' <- b -> IO (Ptr Stage)
forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
unsafeManagedPtrCastPtr b
stage
    Ptr StageManager -> Ptr Stage -> IO ()
clutter_stage_manager_set_default_stage Ptr StageManager
stageManager' Ptr Stage
stage'
    a -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr a
stageManager
    b -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr b
stage
    () -> IO ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()

#if defined(ENABLE_OVERLOADING)
data StageManagerSetDefaultStageMethodInfo
instance (signature ~ (b -> m ()), MonadIO m, IsStageManager a, Clutter.Stage.IsStage b) => O.OverloadedMethod StageManagerSetDefaultStageMethodInfo a signature where
    overloadedMethod = stageManagerSetDefaultStage

instance O.OverloadedMethodInfo StageManagerSetDefaultStageMethodInfo a where
    overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.Clutter.Objects.StageManager.stageManagerSetDefaultStage",
        O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-clutter-1.0.2/docs/GI-Clutter-Objects-StageManager.html#v:stageManagerSetDefaultStage"
        })


#endif

-- method StageManager::get_default
-- method type : MemberFunction
-- Args: []
-- Lengths: []
-- returnType: Just
--               (TInterface Name { namespace = "Clutter" , name = "StageManager" })
-- throws : False
-- Skip return : False

foreign import ccall "clutter_stage_manager_get_default" clutter_stage_manager_get_default :: 
    IO (Ptr StageManager)

-- | Returns the default t'GI.Clutter.Objects.StageManager.StageManager'.
-- 
-- /Since: 0.8/
stageManagerGetDefault ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    m StageManager
    -- ^ __Returns:__ the default stage manager instance. The returned
    --   object is owned by Clutter and you should not reference or unreference it.
stageManagerGetDefault :: forall (m :: * -> *). (HasCallStack, MonadIO m) => m StageManager
stageManagerGetDefault  = IO StageManager -> m StageManager
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO StageManager -> m StageManager)
-> IO StageManager -> m StageManager
forall a b. (a -> b) -> a -> b
$ do
    Ptr StageManager
result <- IO (Ptr StageManager)
clutter_stage_manager_get_default
    Text -> Ptr StageManager -> IO ()
forall a. HasCallStack => Text -> Ptr a -> IO ()
checkUnexpectedReturnNULL Text
"stageManagerGetDefault" Ptr StageManager
result
    StageManager
result' <- ((ManagedPtr StageManager -> StageManager)
-> Ptr StageManager -> IO StageManager
forall a b.
(HasCallStack, GObject a, GObject b) =>
(ManagedPtr a -> a) -> Ptr b -> IO a
newObject ManagedPtr StageManager -> StageManager
StageManager) Ptr StageManager
result
    StageManager -> IO StageManager
forall (m :: * -> *) a. Monad m => a -> m a
return StageManager
result'

#if defined(ENABLE_OVERLOADING)
#endif