    {- |
    Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
    License    : LGPL-2.1
    Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)

    'GI.Atk.Interfaces.Component.Component' should be implemented by most if not all UI elements
    with an actual on-screen presence, i.e. components which can be
    said to have a screen-coordinate bounding box.  Virtually all
    widgets will need to have 'GI.Atk.Interfaces.Component.Component' implementations provided
    for their corresponding 'GI.Atk.Objects.Object.Object' class.  In short, only UI
    elements which are *not* GUI elements will omit this ATK interface.

    A possible exception might be textual information with a
    transparent background, in which case text glyph bounding box
    information is provided by 'GI.Atk.Interfaces.Text.Text'.
    -}

    #define ENABLE_OVERLOADING \
           (!defined(__HADDOCK_VERSION__))

    module GI.Atk.Interfaces.Component
        (

    -- * Exported types
        Component(..)                           ,
        noComponent                             ,
        IsComponent                             ,
        toComponent                             ,

     -- * Methods
    -- ** contains #method:contains#

    #if ENABLE_OVERLOADING
        ComponentContainsMethodInfo             ,
    #endif
        componentContains                       ,

    -- ** getAlpha #method:getAlpha#

    #if ENABLE_OVERLOADING
        ComponentGetAlphaMethodInfo             ,
    #endif
        componentGetAlpha                       ,

    -- ** getExtents #method:getExtents#

    #if ENABLE_OVERLOADING
        ComponentGetExtentsMethodInfo           ,
    #endif
        componentGetExtents                     ,

    -- ** getLayer #method:getLayer#

    #if ENABLE_OVERLOADING
        ComponentGetLayerMethodInfo             ,
    #endif
        componentGetLayer                       ,

    -- ** getMdiZorder #method:getMdiZorder#

    #if ENABLE_OVERLOADING
        ComponentGetMdiZorderMethodInfo         ,
    #endif
        componentGetMdiZorder                   ,

    -- ** getPosition #method:getPosition#

    #if ENABLE_OVERLOADING
        ComponentGetPositionMethodInfo          ,
    #endif
        componentGetPosition                    ,

    -- ** getSize #method:getSize#

    #if ENABLE_OVERLOADING
        ComponentGetSizeMethodInfo              ,
    #endif
        componentGetSize                        ,

    -- ** grabFocus #method:grabFocus#

    #if ENABLE_OVERLOADING
        ComponentGrabFocusMethodInfo            ,
    #endif
        componentGrabFocus                      ,

    -- ** refAccessibleAtPoint #method:refAccessibleAtPoint#

    #if ENABLE_OVERLOADING
        ComponentRefAccessibleAtPointMethodInfo ,
    #endif
        componentRefAccessibleAtPoint           ,

    -- ** removeFocusHandler #method:removeFocusHandler#

    #if ENABLE_OVERLOADING
        ComponentRemoveFocusHandlerMethodInfo   ,
    #endif
        componentRemoveFocusHandler             ,

    -- ** scrollTo #method:scrollTo#

    #if ENABLE_OVERLOADING
        ComponentScrollToMethodInfo             ,
    #endif
        componentScrollTo                       ,

    -- ** scrollToPoint #method:scrollToPoint#

    #if ENABLE_OVERLOADING
        ComponentScrollToPointMethodInfo        ,
    #endif
        componentScrollToPoint                  ,

    -- ** setExtents #method:setExtents#

    #if ENABLE_OVERLOADING
        ComponentSetExtentsMethodInfo           ,
    #endif
        componentSetExtents                     ,

    -- ** setPosition #method:setPosition#

    #if ENABLE_OVERLOADING
        ComponentSetPositionMethodInfo          ,
    #endif
        componentSetPosition                    ,

    -- ** setSize #method:setSize#

    #if ENABLE_OVERLOADING
        ComponentSetSizeMethodInfo              ,
    #endif
        componentSetSize                        ,

     -- * Signals
    -- ** boundsChanged #signal:boundsChanged#

        C_ComponentBoundsChangedCallback        ,
        ComponentBoundsChangedCallback          ,
    #if ENABLE_OVERLOADING
        ComponentBoundsChangedSignalInfo        ,
    #endif
        afterComponentBoundsChanged             ,
        genClosure_ComponentBoundsChanged       ,
        mk_ComponentBoundsChangedCallback       ,
        noComponentBoundsChangedCallback        ,
        onComponentBoundsChanged                ,
        wrap_ComponentBoundsChangedCallback     ,

        ) 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.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.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.Atk.Enums as Atk.Enums
    import {-# SOURCE #-} qualified GI.Atk.Objects.Object as Atk.Object
    import {-# SOURCE #-} qualified GI.Atk.Structs.Rectangle as Atk.Rectangle
    import qualified GI.GObject.Objects.Object as GObject.Object

    -- interface Component
    -- | Memory-managed wrapper type.
    newtype Component = Component (ManagedPtr Component)
    -- | A convenience alias for `Nothing` :: `Maybe` `Component`.
    noComponent :: Maybe Component
    noComponent = Nothing

    -- signal Component::bounds-changed
    {- |
    The \'bounds-changed\" signal is emitted when the bposition or
    size of the component changes.
    -}
    type ComponentBoundsChangedCallback =
        Atk.Rectangle.Rectangle
        {- ^ /@arg1@/: The AtkRectangle giving the new position and size. -}
        -> IO ()

    -- | A convenience synonym for @`Nothing` :: `Maybe` `ComponentBoundsChangedCallback`@.
    noComponentBoundsChangedCallback :: Maybe ComponentBoundsChangedCallback
    noComponentBoundsChangedCallback = Nothing

    -- | Type for the callback on the (unwrapped) C side.
    type C_ComponentBoundsChangedCallback =
        Ptr () ->                               -- object
        Ptr Atk.Rectangle.Rectangle ->
        Ptr () ->                               -- user_data
        IO ()

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

    -- | Wrap the callback into a `Closure`.
    genClosure_ComponentBoundsChanged :: ComponentBoundsChangedCallback -> IO Closure
    genClosure_ComponentBoundsChanged cb = do
        let cb' = wrap_ComponentBoundsChangedCallback cb
        mk_ComponentBoundsChangedCallback cb' >>= newCClosure

    -- | Wrap a `ComponentBoundsChangedCallback` into a `C_ComponentBoundsChangedCallback`.
    wrap_ComponentBoundsChangedCallback ::
        ComponentBoundsChangedCallback ->
        C_ComponentBoundsChangedCallback
    wrap_ComponentBoundsChangedCallback _cb _ arg1 _ = do
        B.ManagedPtr.withTransient Atk.Rectangle.Rectangle arg1 $ \arg1' -> do
            _cb  arg1'

    {- |
    Connect a signal handler for the “@bounds-changed@” 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' component #boundsChanged callback
    @
    -}
    onComponentBoundsChanged :: (IsComponent a, MonadIO m) => a -> ComponentBoundsChangedCallback -> m SignalHandlerId
    onComponentBoundsChanged obj cb = liftIO $ do
        let cb' = wrap_ComponentBoundsChangedCallback cb
        cb'' <- mk_ComponentBoundsChangedCallback cb'
        connectSignalFunPtr obj "bounds-changed" cb'' SignalConnectBefore

    {- |
    Connect a signal handler for the “@bounds-changed@” 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' component #boundsChanged callback
    @
    -}
    afterComponentBoundsChanged :: (IsComponent a, MonadIO m) => a -> ComponentBoundsChangedCallback -> m SignalHandlerId
    afterComponentBoundsChanged obj cb = liftIO $ do
        let cb' = wrap_ComponentBoundsChangedCallback cb
        cb'' <- mk_ComponentBoundsChangedCallback cb'
        connectSignalFunPtr obj "bounds-changed" cb'' SignalConnectAfter

    #if ENABLE_OVERLOADING
    data ComponentBoundsChangedSignalInfo
    instance SignalInfo ComponentBoundsChangedSignalInfo where
        type HaskellCallbackType ComponentBoundsChangedSignalInfo = ComponentBoundsChangedCallback
        connectSignal _ obj cb connectMode = do
            let cb' = wrap_ComponentBoundsChangedCallback cb
            cb'' <- mk_ComponentBoundsChangedCallback cb'
            connectSignalFunPtr obj "bounds-changed" cb'' connectMode

    type instance O.SignalList Component = ComponentSignalList
    type ComponentSignalList = ('[ '("boundsChanged", ComponentBoundsChangedSignalInfo), '("notify", GObject.Object.ObjectNotifySignalInfo)] :: [(Symbol, *)])

    #endif

    foreign import ccall "atk_component_get_type"
        c_atk_component_get_type :: IO GType

    instance GObject Component where
        gobjectType _ = c_atk_component_get_type

    -- | Type class for types which can be safely cast to `Component`, for instance with `toComponent`.
    class GObject o => IsComponent o
    #if MIN_VERSION_base(4,9,0)
    instance {-# OVERLAPPABLE #-} (GObject a, O.UnknownAncestorError Component a) =>
        IsComponent a
    #endif
    instance IsComponent Component
    instance GObject.Object.IsObject Component

    -- | Cast to `Component`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`.
    toComponent :: (MonadIO m, IsComponent o) => o -> m Component
    toComponent = liftIO . unsafeCastTo Component

    #if ENABLE_OVERLOADING
    instance O.HasAttributeList Component
    type instance O.AttributeList Component = ComponentAttributeList
    type ComponentAttributeList = ('[ ] :: [(Symbol, *)])
    #endif

    #if ENABLE_OVERLOADING
    #endif

    #if ENABLE_OVERLOADING
    type family ResolveComponentMethod (t :: Symbol) (o :: *) :: * where
        ResolveComponentMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
        ResolveComponentMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
        ResolveComponentMethod "contains" o = ComponentContainsMethodInfo
        ResolveComponentMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
        ResolveComponentMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
        ResolveComponentMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
        ResolveComponentMethod "grabFocus" o = ComponentGrabFocusMethodInfo
        ResolveComponentMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
        ResolveComponentMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
        ResolveComponentMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
        ResolveComponentMethod "ref" o = GObject.Object.ObjectRefMethodInfo
        ResolveComponentMethod "refAccessibleAtPoint" o = ComponentRefAccessibleAtPointMethodInfo
        ResolveComponentMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
        ResolveComponentMethod "removeFocusHandler" o = ComponentRemoveFocusHandlerMethodInfo
        ResolveComponentMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
        ResolveComponentMethod "scrollTo" o = ComponentScrollToMethodInfo
        ResolveComponentMethod "scrollToPoint" o = ComponentScrollToPointMethodInfo
        ResolveComponentMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
        ResolveComponentMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
        ResolveComponentMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
        ResolveComponentMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo
        ResolveComponentMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
        ResolveComponentMethod "getAlpha" o = ComponentGetAlphaMethodInfo
        ResolveComponentMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
        ResolveComponentMethod "getExtents" o = ComponentGetExtentsMethodInfo
        ResolveComponentMethod "getLayer" o = ComponentGetLayerMethodInfo
        ResolveComponentMethod "getMdiZorder" o = ComponentGetMdiZorderMethodInfo
        ResolveComponentMethod "getPosition" o = ComponentGetPositionMethodInfo
        ResolveComponentMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
        ResolveComponentMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
        ResolveComponentMethod "getSize" o = ComponentGetSizeMethodInfo
        ResolveComponentMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
        ResolveComponentMethod "setExtents" o = ComponentSetExtentsMethodInfo
        ResolveComponentMethod "setPosition" o = ComponentSetPositionMethodInfo
        ResolveComponentMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
        ResolveComponentMethod "setSize" o = ComponentSetSizeMethodInfo
        ResolveComponentMethod l o = O.MethodResolutionFailed l o

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

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

    #endif

    -- method Component::contains
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "component", argType = TInterface (Name {namespace = "Atk", name = "Component"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #AtkComponent", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "x", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "x coordinate", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "y", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "y coordinate", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "coord_type", argType = TInterface (Name {namespace = "Atk", name = "CoordType"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "specifies whether the coordinates are relative to the screen\nor to the components top level window", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Just (TBasicType TBoolean)
    -- throws : False
    -- Skip return : False

    foreign import ccall "atk_component_contains" atk_component_contains ::
        Ptr Component ->                        -- component : TInterface (Name {namespace = "Atk", name = "Component"})
        Int32 ->                                -- x : TBasicType TInt
        Int32 ->                                -- y : TBasicType TInt
        CUInt ->                                -- coord_type : TInterface (Name {namespace = "Atk", name = "CoordType"})
        IO CInt

    {- |
    Checks whether the specified point is within the extent of the /@component@/.

    Toolkit implementor note: ATK provides a default implementation for
    this virtual method. In general there are little reason to
    re-implement it.
    -}
    componentContains ::
        (B.CallStack.HasCallStack, MonadIO m, IsComponent a) =>
        a
        {- ^ /@component@/: the 'GI.Atk.Interfaces.Component.Component' -}
        -> Int32
        {- ^ /@x@/: x coordinate -}
        -> Int32
        {- ^ /@y@/: y coordinate -}
        -> Atk.Enums.CoordType
        {- ^ /@coordType@/: specifies whether the coordinates are relative to the screen
    or to the components top level window -}
        -> m Bool
        {- ^ __Returns:__ 'True' or 'False' indicating whether the specified point is within
    the extent of the /@component@/ or not -}
    componentContains component x y coordType = liftIO $ do
        component' <- unsafeManagedPtrCastPtr component
        let coordType' = (fromIntegral . fromEnum) coordType
        result <- atk_component_contains component' x y coordType'
        let result' = (/= 0) result
        touchManagedPtr component
        return result'

    #if ENABLE_OVERLOADING
    data ComponentContainsMethodInfo
    instance (signature ~ (Int32 -> Int32 -> Atk.Enums.CoordType -> m Bool), MonadIO m, IsComponent a) => O.MethodInfo ComponentContainsMethodInfo a signature where
        overloadedMethod _ = componentContains

    #endif

    -- method Component::get_alpha
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "component", argType = TInterface (Name {namespace = "Atk", name = "Component"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "an #AtkComponent", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Just (TBasicType TDouble)
    -- throws : False
    -- Skip return : False

    foreign import ccall "atk_component_get_alpha" atk_component_get_alpha ::
        Ptr Component ->                        -- component : TInterface (Name {namespace = "Atk", name = "Component"})
        IO CDouble

    {- |
    Returns the alpha value (i.e. the opacity) for this
    /@component@/, on a scale from 0 (fully transparent) to 1.0
    (fully opaque).

    /Since: 1.12/
    -}
    componentGetAlpha ::
        (B.CallStack.HasCallStack, MonadIO m, IsComponent a) =>
        a
        {- ^ /@component@/: an 'GI.Atk.Interfaces.Component.Component' -}
        -> m Double
        {- ^ __Returns:__ An alpha value from 0 to 1.0, inclusive. -}
    componentGetAlpha component = liftIO $ do
        component' <- unsafeManagedPtrCastPtr component
        result <- atk_component_get_alpha component'
        let result' = realToFrac result
        touchManagedPtr component
        return result'

    #if ENABLE_OVERLOADING
    data ComponentGetAlphaMethodInfo
    instance (signature ~ (m Double), MonadIO m, IsComponent a) => O.MethodInfo ComponentGetAlphaMethodInfo a signature where
        overloadedMethod _ = componentGetAlpha

    #endif

    -- method Component::get_extents
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "component", argType = TInterface (Name {namespace = "Atk", name = "Component"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "an #AtkComponent", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "x", argType = TBasicType TInt, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "address of #gint to put x coordinate", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "y", argType = TBasicType TInt, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "address of #gint to put y coordinate", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "width", argType = TBasicType TInt, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "address of #gint to put width", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "height", argType = TBasicType TInt, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "address of #gint to put height", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "coord_type", argType = TInterface (Name {namespace = "Atk", name = "CoordType"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "specifies whether the coordinates are relative to the screen\nor to the components top level window", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "atk_component_get_extents" atk_component_get_extents ::
        Ptr Component ->                        -- component : TInterface (Name {namespace = "Atk", name = "Component"})
        Ptr Int32 ->                            -- x : TBasicType TInt
        Ptr Int32 ->                            -- y : TBasicType TInt
        Ptr Int32 ->                            -- width : TBasicType TInt
        Ptr Int32 ->                            -- height : TBasicType TInt
        CUInt ->                                -- coord_type : TInterface (Name {namespace = "Atk", name = "CoordType"})
        IO ()

    {- |
    Gets the rectangle which gives the extent of the /@component@/.
    -}
    componentGetExtents ::
        (B.CallStack.HasCallStack, MonadIO m, IsComponent a) =>
        a
        {- ^ /@component@/: an 'GI.Atk.Interfaces.Component.Component' -}
        -> Atk.Enums.CoordType
        {- ^ /@coordType@/: specifies whether the coordinates are relative to the screen
    or to the components top level window -}
        -> m ((Int32, Int32, Int32, Int32))
    componentGetExtents component coordType = liftIO $ do
        component' <- unsafeManagedPtrCastPtr component
        x <- allocMem :: IO (Ptr Int32)
        y <- allocMem :: IO (Ptr Int32)
        width <- allocMem :: IO (Ptr Int32)
        height <- allocMem :: IO (Ptr Int32)
        let coordType' = (fromIntegral . fromEnum) coordType
        atk_component_get_extents component' x y width height coordType'
        x' <- peek x
        y' <- peek y
        width' <- peek width
        height' <- peek height
        touchManagedPtr component
        freeMem x
        freeMem y
        freeMem width
        freeMem height
        return (x', y', width', height')

    #if ENABLE_OVERLOADING
    data ComponentGetExtentsMethodInfo
    instance (signature ~ (Atk.Enums.CoordType -> m ((Int32, Int32, Int32, Int32))), MonadIO m, IsComponent a) => O.MethodInfo ComponentGetExtentsMethodInfo a signature where
        overloadedMethod _ = componentGetExtents

    #endif

    -- method Component::get_layer
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "component", argType = TInterface (Name {namespace = "Atk", name = "Component"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "an #AtkComponent", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Just (TInterface (Name {namespace = "Atk", name = "Layer"}))
    -- throws : False
    -- Skip return : False

    foreign import ccall "atk_component_get_layer" atk_component_get_layer ::
        Ptr Component ->                        -- component : TInterface (Name {namespace = "Atk", name = "Component"})
        IO CUInt

    {- |
    Gets the layer of the component.
    -}
    componentGetLayer ::
        (B.CallStack.HasCallStack, MonadIO m, IsComponent a) =>
        a
        {- ^ /@component@/: an 'GI.Atk.Interfaces.Component.Component' -}
        -> m Atk.Enums.Layer
        {- ^ __Returns:__ an 'GI.Atk.Enums.Layer' which is the layer of the component -}
    componentGetLayer component = liftIO $ do
        component' <- unsafeManagedPtrCastPtr component
        result <- atk_component_get_layer component'
        let result' = (toEnum . fromIntegral) result
        touchManagedPtr component
        return result'

    #if ENABLE_OVERLOADING
    data ComponentGetLayerMethodInfo
    instance (signature ~ (m Atk.Enums.Layer), MonadIO m, IsComponent a) => O.MethodInfo ComponentGetLayerMethodInfo a signature where
        overloadedMethod _ = componentGetLayer

    #endif

    -- method Component::get_mdi_zorder
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "component", argType = TInterface (Name {namespace = "Atk", name = "Component"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "an #AtkComponent", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "atk_component_get_mdi_zorder" atk_component_get_mdi_zorder ::
        Ptr Component ->                        -- component : TInterface (Name {namespace = "Atk", name = "Component"})
        IO Int32

    {- |
    Gets the zorder of the component. The value G_MININT will be returned
    if the layer of the component is not ATK_LAYER_MDI or ATK_LAYER_WINDOW.
    -}
    componentGetMdiZorder ::
        (B.CallStack.HasCallStack, MonadIO m, IsComponent a) =>
        a
        {- ^ /@component@/: an 'GI.Atk.Interfaces.Component.Component' -}
        -> m Int32
        {- ^ __Returns:__ a gint which is the zorder of the component, i.e. the depth at
    which the component is shown in relation to other components in the same
    container. -}
    componentGetMdiZorder component = liftIO $ do
        component' <- unsafeManagedPtrCastPtr component
        result <- atk_component_get_mdi_zorder component'
        touchManagedPtr component
        return result

    #if ENABLE_OVERLOADING
    data ComponentGetMdiZorderMethodInfo
    instance (signature ~ (m Int32), MonadIO m, IsComponent a) => O.MethodInfo ComponentGetMdiZorderMethodInfo a signature where
        overloadedMethod _ = componentGetMdiZorder

    #endif

    -- method Component::get_position
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "component", argType = TInterface (Name {namespace = "Atk", name = "Component"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "an #AtkComponent", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "x", argType = TBasicType TInt, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "address of #gint to put x coordinate position", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "y", argType = TBasicType TInt, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "address of #gint to put y coordinate position", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "coord_type", argType = TInterface (Name {namespace = "Atk", name = "CoordType"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "specifies whether the coordinates are relative to the screen\nor to the components top level window", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "atk_component_get_position" atk_component_get_position ::
        Ptr Component ->                        -- component : TInterface (Name {namespace = "Atk", name = "Component"})
        Ptr Int32 ->                            -- x : TBasicType TInt
        Ptr Int32 ->                            -- y : TBasicType TInt
        CUInt ->                                -- coord_type : TInterface (Name {namespace = "Atk", name = "CoordType"})
        IO ()

    {-# DEPRECATED componentGetPosition ["Since 2.12. Use 'GI.Atk.Interfaces.Component.componentGetExtents' instead."] #-}
    {- |
    Gets the position of /@component@/ in the form of
    a point specifying /@component@/\'s top-left corner.
    -}
    componentGetPosition ::
        (B.CallStack.HasCallStack, MonadIO m, IsComponent a) =>
        a
        {- ^ /@component@/: an 'GI.Atk.Interfaces.Component.Component' -}
        -> Atk.Enums.CoordType
        {- ^ /@coordType@/: specifies whether the coordinates are relative to the screen
    or to the components top level window -}
        -> m ((Int32, Int32))
    componentGetPosition component coordType = liftIO $ do
        component' <- unsafeManagedPtrCastPtr component
        x <- allocMem :: IO (Ptr Int32)
        y <- allocMem :: IO (Ptr Int32)
        let coordType' = (fromIntegral . fromEnum) coordType
        atk_component_get_position component' x y coordType'
        x' <- peek x
        y' <- peek y
        touchManagedPtr component
        freeMem x
        freeMem y
        return (x', y')

    #if ENABLE_OVERLOADING
    data ComponentGetPositionMethodInfo
    instance (signature ~ (Atk.Enums.CoordType -> m ((Int32, Int32))), MonadIO m, IsComponent a) => O.MethodInfo ComponentGetPositionMethodInfo a signature where
        overloadedMethod _ = componentGetPosition

    #endif

    -- method Component::get_size
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "component", argType = TInterface (Name {namespace = "Atk", name = "Component"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "an #AtkComponent", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "width", argType = TBasicType TInt, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "address of #gint to put width of @component", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "height", argType = TBasicType TInt, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "address of #gint to put height of @component", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
    -- Lengths : []
    -- returnType : Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "atk_component_get_size" atk_component_get_size ::
        Ptr Component ->                        -- component : TInterface (Name {namespace = "Atk", name = "Component"})
        Ptr Int32 ->                            -- width : TBasicType TInt
        Ptr Int32 ->                            -- height : TBasicType TInt
        IO ()

    {-# DEPRECATED componentGetSize ["Since 2.12. Use 'GI.Atk.Interfaces.Component.componentGetExtents' instead."] #-}
    {- |
    Gets the size of the /@component@/ in terms of width and height.
    -}
    componentGetSize ::
        (B.CallStack.HasCallStack, MonadIO m, IsComponent a) =>
        a
        {- ^ /@component@/: an 'GI.Atk.Interfaces.Component.Component' -}
        -> m ((Int32, Int32))
    componentGetSize component = liftIO $ do
        component' <- unsafeManagedPtrCastPtr component
        width <- allocMem :: IO (Ptr Int32)
        height <- allocMem :: IO (Ptr Int32)
        atk_component_get_size component' width height
        width' <- peek width
        height' <- peek height
        touchManagedPtr component
        freeMem width
        freeMem height
        return (width', height')

    #if ENABLE_OVERLOADING
    data ComponentGetSizeMethodInfo
    instance (signature ~ (m ((Int32, Int32))), MonadIO m, IsComponent a) => O.MethodInfo ComponentGetSizeMethodInfo a signature where
        overloadedMethod _ = componentGetSize

    #endif

    -- method Component::grab_focus
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "component", argType = TInterface (Name {namespace = "Atk", name = "Component"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "an #AtkComponent", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Just (TBasicType TBoolean)
    -- throws : False
    -- Skip return : False

    foreign import ccall "atk_component_grab_focus" atk_component_grab_focus ::
        Ptr Component ->                        -- component : TInterface (Name {namespace = "Atk", name = "Component"})
        IO CInt

    {- |
    Grabs focus for this /@component@/.
    -}
    componentGrabFocus ::
        (B.CallStack.HasCallStack, MonadIO m, IsComponent a) =>
        a
        {- ^ /@component@/: an 'GI.Atk.Interfaces.Component.Component' -}
        -> m Bool
        {- ^ __Returns:__ 'True' if successful, 'False' otherwise. -}
    componentGrabFocus component = liftIO $ do
        component' <- unsafeManagedPtrCastPtr component
        result <- atk_component_grab_focus component'
        let result' = (/= 0) result
        touchManagedPtr component
        return result'

    #if ENABLE_OVERLOADING
    data ComponentGrabFocusMethodInfo
    instance (signature ~ (m Bool), MonadIO m, IsComponent a) => O.MethodInfo ComponentGrabFocusMethodInfo a signature where
        overloadedMethod _ = componentGrabFocus

    #endif

    -- method Component::ref_accessible_at_point
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "component", argType = TInterface (Name {namespace = "Atk", name = "Component"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #AtkComponent", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "x", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "x coordinate", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "y", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "y coordinate", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "coord_type", argType = TInterface (Name {namespace = "Atk", name = "CoordType"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "specifies whether the coordinates are relative to the screen\nor to the components top level window", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Just (TInterface (Name {namespace = "Atk", name = "Object"}))
    -- throws : False
    -- Skip return : False

    foreign import ccall "atk_component_ref_accessible_at_point" atk_component_ref_accessible_at_point ::
        Ptr Component ->                        -- component : TInterface (Name {namespace = "Atk", name = "Component"})
        Int32 ->                                -- x : TBasicType TInt
        Int32 ->                                -- y : TBasicType TInt
        CUInt ->                                -- coord_type : TInterface (Name {namespace = "Atk", name = "CoordType"})
        IO (Ptr Atk.Object.Object)

    {- |
    Gets a reference to the accessible child, if one exists, at the
    coordinate point specified by /@x@/ and /@y@/.
    -}
    componentRefAccessibleAtPoint ::
        (B.CallStack.HasCallStack, MonadIO m, IsComponent a) =>
        a
        {- ^ /@component@/: the 'GI.Atk.Interfaces.Component.Component' -}
        -> Int32
        {- ^ /@x@/: x coordinate -}
        -> Int32
        {- ^ /@y@/: y coordinate -}
        -> Atk.Enums.CoordType
        {- ^ /@coordType@/: specifies whether the coordinates are relative to the screen
    or to the components top level window -}
        -> m (Maybe Atk.Object.Object)
        {- ^ __Returns:__ a reference to the accessible
    child, if one exists -}
    componentRefAccessibleAtPoint component x y coordType = liftIO $ do
        component' <- unsafeManagedPtrCastPtr component
        let coordType' = (fromIntegral . fromEnum) coordType
        result <- atk_component_ref_accessible_at_point component' x y coordType'
        maybeResult <- convertIfNonNull result $ \result' -> do
            result'' <- (wrapObject Atk.Object.Object) result'
            return result''
        touchManagedPtr component
        return maybeResult

    #if ENABLE_OVERLOADING
    data ComponentRefAccessibleAtPointMethodInfo
    instance (signature ~ (Int32 -> Int32 -> Atk.Enums.CoordType -> m (Maybe Atk.Object.Object)), MonadIO m, IsComponent a) => O.MethodInfo ComponentRefAccessibleAtPointMethodInfo a signature where
        overloadedMethod _ = componentRefAccessibleAtPoint

    #endif

    -- method Component::remove_focus_handler
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "component", argType = TInterface (Name {namespace = "Atk", name = "Component"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #AtkComponent to remove the focus handler from", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "handler_id", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the handler id of the focus handler to be removed\nfrom @component", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "atk_component_remove_focus_handler" atk_component_remove_focus_handler ::
        Ptr Component ->                        -- component : TInterface (Name {namespace = "Atk", name = "Component"})
        Word32 ->                               -- handler_id : TBasicType TUInt
        IO ()

    {-# DEPRECATED componentRemoveFocusHandler ["(Since version 2.9.4)","If you need to track when an object gains or","lose the focus, use the 'GI.Atk.Objects.Object.Object'::@/state-change/@ \\\"focused\\\" notification instead."] #-}
    {- |
    Remove the handler specified by /@handlerId@/ from the list of
    functions to be executed when this object receives focus events
    (in or out).
    -}
    componentRemoveFocusHandler ::
        (B.CallStack.HasCallStack, MonadIO m, IsComponent a) =>
        a
        {- ^ /@component@/: the 'GI.Atk.Interfaces.Component.Component' to remove the focus handler from -}
        -> Word32
        {- ^ /@handlerId@/: the handler id of the focus handler to be removed
    from /@component@/ -}
        -> m ()
    componentRemoveFocusHandler component handlerId = liftIO $ do
        component' <- unsafeManagedPtrCastPtr component
        atk_component_remove_focus_handler component' handlerId
        touchManagedPtr component
        return ()

    #if ENABLE_OVERLOADING
    data ComponentRemoveFocusHandlerMethodInfo
    instance (signature ~ (Word32 -> m ()), MonadIO m, IsComponent a) => O.MethodInfo ComponentRemoveFocusHandlerMethodInfo a signature where
        overloadedMethod _ = componentRemoveFocusHandler

    #endif

    -- method Component::scroll_to
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "component", argType = TInterface (Name {namespace = "Atk", name = "Component"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "an #AtkComponent", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "type", argType = TInterface (Name {namespace = "Atk", name = "ScrollType"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "specify where the object should be made visible.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Just (TBasicType TBoolean)
    -- throws : False
    -- Skip return : False

    foreign import ccall "atk_component_scroll_to" atk_component_scroll_to ::
        Ptr Component ->                        -- component : TInterface (Name {namespace = "Atk", name = "Component"})
        CUInt ->                                -- type : TInterface (Name {namespace = "Atk", name = "ScrollType"})
        IO CInt

    {- |
    Makes /@component@/ visible on the screen by scrolling all necessary parents.

    Contrary to atk_component_set_position, this does not actually move
    /@component@/ in its parent, this only makes the parents scroll so that the
    object shows up on the screen, given its current position within the parents.

    /Since: 2.30/
    -}
    componentScrollTo ::
        (B.CallStack.HasCallStack, MonadIO m, IsComponent a) =>
        a
        {- ^ /@component@/: an 'GI.Atk.Interfaces.Component.Component' -}
        -> Atk.Enums.ScrollType
        {- ^ /@type@/: specify where the object should be made visible. -}
        -> m Bool
        {- ^ __Returns:__ whether scrolling was successful. -}
    componentScrollTo component type_ = liftIO $ do
        component' <- unsafeManagedPtrCastPtr component
        let type_' = (fromIntegral . fromEnum) type_
        result <- atk_component_scroll_to component' type_'
        let result' = (/= 0) result
        touchManagedPtr component
        return result'

    #if ENABLE_OVERLOADING
    data ComponentScrollToMethodInfo
    instance (signature ~ (Atk.Enums.ScrollType -> m Bool), MonadIO m, IsComponent a) => O.MethodInfo ComponentScrollToMethodInfo a signature where
        overloadedMethod _ = componentScrollTo

    #endif

    -- method Component::scroll_to_point
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "component", argType = TInterface (Name {namespace = "Atk", name = "Component"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "an #AtkComponent", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "coords", argType = TInterface (Name {namespace = "Atk", name = "CoordType"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "specify whether coordinates are relative to the screen or to the\nparent object.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "x", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "x-position where to scroll to", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "y", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "y-position where to scroll to", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Just (TBasicType TBoolean)
    -- throws : False
    -- Skip return : False

    foreign import ccall "atk_component_scroll_to_point" atk_component_scroll_to_point ::
        Ptr Component ->                        -- component : TInterface (Name {namespace = "Atk", name = "Component"})
        CUInt ->                                -- coords : TInterface (Name {namespace = "Atk", name = "CoordType"})
        Int32 ->                                -- x : TBasicType TInt
        Int32 ->                                -- y : TBasicType TInt
        IO CInt

    {- |
    Makes an object visible on the screen at a given position by scrolling all
    necessary parents.

    /Since: 2.30/
    -}
    componentScrollToPoint ::
        (B.CallStack.HasCallStack, MonadIO m, IsComponent a) =>
        a
        {- ^ /@component@/: an 'GI.Atk.Interfaces.Component.Component' -}
        -> Atk.Enums.CoordType
        {- ^ /@coords@/: specify whether coordinates are relative to the screen or to the
    parent object. -}
        -> Int32
        {- ^ /@x@/: x-position where to scroll to -}
        -> Int32
        {- ^ /@y@/: y-position where to scroll to -}
        -> m Bool
        {- ^ __Returns:__ whether scrolling was successful. -}
    componentScrollToPoint component coords x y = liftIO $ do
        component' <- unsafeManagedPtrCastPtr component
        let coords' = (fromIntegral . fromEnum) coords
        result <- atk_component_scroll_to_point component' coords' x y
        let result' = (/= 0) result
        touchManagedPtr component
        return result'

    #if ENABLE_OVERLOADING
    data ComponentScrollToPointMethodInfo
    instance (signature ~ (Atk.Enums.CoordType -> Int32 -> Int32 -> m Bool), MonadIO m, IsComponent a) => O.MethodInfo ComponentScrollToPointMethodInfo a signature where
        overloadedMethod _ = componentScrollToPoint

    #endif

    -- method Component::set_extents
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "component", argType = TInterface (Name {namespace = "Atk", name = "Component"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "an #AtkComponent", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "x", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "x coordinate", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "y", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "y coordinate", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "width", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "width to set for @component", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "height", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "height to set for @component", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "coord_type", argType = TInterface (Name {namespace = "Atk", name = "CoordType"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "specifies whether the coordinates are relative to the screen\nor to the components top level window", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Just (TBasicType TBoolean)
    -- throws : False
    -- Skip return : False

    foreign import ccall "atk_component_set_extents" atk_component_set_extents ::
        Ptr Component ->                        -- component : TInterface (Name {namespace = "Atk", name = "Component"})
        Int32 ->                                -- x : TBasicType TInt
        Int32 ->                                -- y : TBasicType TInt
        Int32 ->                                -- width : TBasicType TInt
        Int32 ->                                -- height : TBasicType TInt
        CUInt ->                                -- coord_type : TInterface (Name {namespace = "Atk", name = "CoordType"})
        IO CInt

    {- |
    Sets the extents of /@component@/.
    -}
    componentSetExtents ::
        (B.CallStack.HasCallStack, MonadIO m, IsComponent a) =>
        a
        {- ^ /@component@/: an 'GI.Atk.Interfaces.Component.Component' -}
        -> Int32
        {- ^ /@x@/: x coordinate -}
        -> Int32
        {- ^ /@y@/: y coordinate -}
        -> Int32
        {- ^ /@width@/: width to set for /@component@/ -}
        -> Int32
        {- ^ /@height@/: height to set for /@component@/ -}
        -> Atk.Enums.CoordType
        {- ^ /@coordType@/: specifies whether the coordinates are relative to the screen
    or to the components top level window -}
        -> m Bool
        {- ^ __Returns:__ 'True' or 'False' whether the extents were set or not -}
    componentSetExtents component x y width height coordType = liftIO $ do
        component' <- unsafeManagedPtrCastPtr component
        let coordType' = (fromIntegral . fromEnum) coordType
        result <- atk_component_set_extents component' x y width height coordType'
        let result' = (/= 0) result
        touchManagedPtr component
        return result'

    #if ENABLE_OVERLOADING
    data ComponentSetExtentsMethodInfo
    instance (signature ~ (Int32 -> Int32 -> Int32 -> Int32 -> Atk.Enums.CoordType -> m Bool), MonadIO m, IsComponent a) => O.MethodInfo ComponentSetExtentsMethodInfo a signature where
        overloadedMethod _ = componentSetExtents

    #endif

    -- method Component::set_position
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "component", argType = TInterface (Name {namespace = "Atk", name = "Component"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "an #AtkComponent", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "x", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "x coordinate", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "y", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "y coordinate", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "coord_type", argType = TInterface (Name {namespace = "Atk", name = "CoordType"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "specifies whether the coordinates are relative to the screen\nor to the component's top level window", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Just (TBasicType TBoolean)
    -- throws : False
    -- Skip return : False

    foreign import ccall "atk_component_set_position" atk_component_set_position ::
        Ptr Component ->                        -- component : TInterface (Name {namespace = "Atk", name = "Component"})
        Int32 ->                                -- x : TBasicType TInt
        Int32 ->                                -- y : TBasicType TInt
        CUInt ->                                -- coord_type : TInterface (Name {namespace = "Atk", name = "CoordType"})
        IO CInt

    {- |
    Sets the position of /@component@/.

    Contrary to atk_component_scroll_to, this does not trigger any scrolling,
    this just moves /@component@/ in its parent.
    -}
    componentSetPosition ::
        (B.CallStack.HasCallStack, MonadIO m, IsComponent a) =>
        a
        {- ^ /@component@/: an 'GI.Atk.Interfaces.Component.Component' -}
        -> Int32
        {- ^ /@x@/: x coordinate -}
        -> Int32
        {- ^ /@y@/: y coordinate -}
        -> Atk.Enums.CoordType
        {- ^ /@coordType@/: specifies whether the coordinates are relative to the screen
    or to the component\'s top level window -}
        -> m Bool
        {- ^ __Returns:__ 'True' or 'False' whether or not the position was set or not -}
    componentSetPosition component x y coordType = liftIO $ do
        component' <- unsafeManagedPtrCastPtr component
        let coordType' = (fromIntegral . fromEnum) coordType
        result <- atk_component_set_position component' x y coordType'
        let result' = (/= 0) result
        touchManagedPtr component
        return result'

    #if ENABLE_OVERLOADING
    data ComponentSetPositionMethodInfo
    instance (signature ~ (Int32 -> Int32 -> Atk.Enums.CoordType -> m Bool), MonadIO m, IsComponent a) => O.MethodInfo ComponentSetPositionMethodInfo a signature where
        overloadedMethod _ = componentSetPosition

    #endif

    -- method Component::set_size
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "component", argType = TInterface (Name {namespace = "Atk", name = "Component"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "an #AtkComponent", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "width", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "width to set for @component", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "height", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "height to set for @component", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Just (TBasicType TBoolean)
    -- throws : False
    -- Skip return : False

    foreign import ccall "atk_component_set_size" atk_component_set_size ::
        Ptr Component ->                        -- component : TInterface (Name {namespace = "Atk", name = "Component"})
        Int32 ->                                -- width : TBasicType TInt
        Int32 ->                                -- height : TBasicType TInt
        IO CInt

    {- |
    Set the size of the /@component@/ in terms of width and height.
    -}
    componentSetSize ::
        (B.CallStack.HasCallStack, MonadIO m, IsComponent a) =>
        a
        {- ^ /@component@/: an 'GI.Atk.Interfaces.Component.Component' -}
        -> Int32
        {- ^ /@width@/: width to set for /@component@/ -}
        -> Int32
        {- ^ /@height@/: height to set for /@component@/ -}
        -> m Bool
        {- ^ __Returns:__ 'True' or 'False' whether the size was set or not -}
    componentSetSize component width height = liftIO $ do
        component' <- unsafeManagedPtrCastPtr component
        result <- atk_component_set_size component' width height
        let result' = (/= 0) result
        touchManagedPtr component
        return result'

    #if ENABLE_OVERLOADING
    data ComponentSetSizeMethodInfo
    instance (signature ~ (Int32 -> Int32 -> m Bool), MonadIO m, IsComponent a) => O.MethodInfo ComponentSetSizeMethodInfo a signature where
        overloadedMethod _ = componentSetSize

    #endif