    {-# LANGUAGE TypeApplications #-}

    -- | Copyright  : Will Thompson and Iñaki García Etxebarria
    -- License    : LGPL-2.1
    -- Maintainer : Iñaki García Etxebarria
    --
    -- An interface for accessible objects containing links.
    --
    -- The @GtkAccessibleHypertext@ interfaces is meant to be implemented by accessible
    -- objects that contain links. Those links don\'t necessarily have to be part
    -- of text, they can be associated with images and other things.
    --
    -- /Since: 4.22/

    #if !defined(__HADDOCK_VERSION__)
    #define ENABLE_OVERLOADING
    #endif

    module GI.Gtk.Interfaces.AccessibleHypertext
        (

    -- * Exported types
        AccessibleHypertext(..)                 ,
        IsAccessibleHypertext                   ,
        toAccessibleHypertext                   ,

     -- * Methods
    -- |
    --
    --  === __Click to display all available methods, including inherited ones__
    -- ==== Methods
    -- [announce]("GI.Gtk.Interfaces.Accessible#g:method:announce"), [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"), [notify]("GI.GObject.Objects.Object#g:method:notify"), [notifyByPspec]("GI.GObject.Objects.Object#g:method:notifyByPspec"), [ref]("GI.GObject.Objects.Object#g:method:ref"), [refSink]("GI.GObject.Objects.Object#g:method:refSink"), [resetProperty]("GI.Gtk.Interfaces.Accessible#g:method:resetProperty"), [resetRelation]("GI.Gtk.Interfaces.Accessible#g:method:resetRelation"), [resetState]("GI.Gtk.Interfaces.Accessible#g:method:resetState"), [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"), [updateNextAccessibleSibling]("GI.Gtk.Interfaces.Accessible#g:method:updateNextAccessibleSibling"), [updatePlatformState]("GI.Gtk.Interfaces.Accessible#g:method:updatePlatformState"), [updateProperty]("GI.Gtk.Interfaces.Accessible#g:method:updateProperty"), [updateRelation]("GI.Gtk.Interfaces.Accessible#g:method:updateRelation"), [updateState]("GI.Gtk.Interfaces.Accessible#g:method:updateState"), [watchClosure]("GI.GObject.Objects.Object#g:method:watchClosure").
    --
    -- ==== Getters
    -- [getAccessibleId]("GI.Gtk.Interfaces.Accessible#g:method:getAccessibleId"), [getAccessibleParent]("GI.Gtk.Interfaces.Accessible#g:method:getAccessibleParent"), [getAccessibleRole]("GI.Gtk.Interfaces.Accessible#g:method:getAccessibleRole"), [getAtContext]("GI.Gtk.Interfaces.Accessible#g:method:getAtContext"), [getBounds]("GI.Gtk.Interfaces.Accessible#g:method:getBounds"), [getData]("GI.GObject.Objects.Object#g:method:getData"), [getFirstAccessibleChild]("GI.Gtk.Interfaces.Accessible#g:method:getFirstAccessibleChild"), [getNextAccessibleSibling]("GI.Gtk.Interfaces.Accessible#g:method:getNextAccessibleSibling"), [getPlatformState]("GI.Gtk.Interfaces.Accessible#g:method:getPlatformState"), [getProperty]("GI.GObject.Objects.Object#g:method:getProperty"), [getQdata]("GI.GObject.Objects.Object#g:method:getQdata").
    --
    -- ==== Setters
    -- [setAccessibleParent]("GI.Gtk.Interfaces.Accessible#g:method:setAccessibleParent"), [setData]("GI.GObject.Objects.Object#g:method:setData"), [setDataFull]("GI.GObject.Objects.Object#g:method:setDataFull"), [setProperty]("GI.GObject.Objects.Object#g:method:setProperty").

    #if defined(ENABLE_OVERLOADING)
        ResolveAccessibleHypertextMethod        ,
    #endif

        ) 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.GHashTable as B.GHT
    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.Kind as DK
    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 qualified Data.Word as DW
    import qualified Data.Int as DI
    import qualified System.Posix.Types as SPT
    import qualified Foreign.C.Types as FCT

    -- Workaround for https://gitlab.haskell.org/ghc/ghc/-/issues/23392
    #if MIN_VERSION_base(4,18,0)
    import qualified GI.GObject.Objects.Object as GObject.Object
    import qualified GI.Gdk.Objects.Display as Gdk.Display
    import {-# SOURCE #-} qualified GI.Gtk.Enums as Gtk.Enums
    import {-# SOURCE #-} qualified GI.Gtk.Interfaces.Accessible as Gtk.Accessible
    import {-# SOURCE #-} qualified GI.Gtk.Objects.ATContext as Gtk.ATContext

    #else
    import qualified GI.GObject.Objects.Object as GObject.Object
    import {-# SOURCE #-} qualified GI.Gtk.Interfaces.Accessible as Gtk.Accessible

    #endif

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

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

    foreign import ccall "gtk_accessible_hypertext_get_type"
        c_gtk_accessible_hypertext_get_type :: IO B.Types.GType

    instance B.Types.TypedObject AccessibleHypertext where
        glibType :: IO GType
    glibType = IO GType
    c_gtk_accessible_hypertext_get_type

    instance B.Types.GObject AccessibleHypertext

    -- | Type class for types which can be safely cast to t'AccessibleHypertext', for instance with `toAccessibleHypertext`.
    class (SP.GObject o, O.IsDescendantOf AccessibleHypertext o) => IsAccessibleHypertext o
    instance (SP.GObject o, O.IsDescendantOf AccessibleHypertext o) => IsAccessibleHypertext o

    instance O.HasParentTypes AccessibleHypertext
    type instance O.ParentTypes AccessibleHypertext = '[Gtk.Accessible.Accessible, GObject.Object.Object]

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

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

    #if defined(ENABLE_OVERLOADING)
    instance O.HasAttributeList AccessibleHypertext
    type instance O.AttributeList AccessibleHypertext = AccessibleHypertextAttributeList
    type AccessibleHypertextAttributeList = ('[ '("accessibleRole", Gtk.Accessible.AccessibleAccessibleRolePropertyInfo)] :: [(Symbol, DK.Type)])
    #endif

    #if defined(ENABLE_OVERLOADING)
    #endif

    #if defined(ENABLE_OVERLOADING)
    type family ResolveAccessibleHypertextMethod (t :: Symbol) (o :: DK.Type) :: DK.Type where
        ResolveAccessibleHypertextMethod "announce" o = Gtk.Accessible.AccessibleAnnounceMethodInfo
        ResolveAccessibleHypertextMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
        ResolveAccessibleHypertextMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
        ResolveAccessibleHypertextMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
        ResolveAccessibleHypertextMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
        ResolveAccessibleHypertextMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
        ResolveAccessibleHypertextMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
        ResolveAccessibleHypertextMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
        ResolveAccessibleHypertextMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
        ResolveAccessibleHypertextMethod "ref" o = GObject.Object.ObjectRefMethodInfo
        ResolveAccessibleHypertextMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
        ResolveAccessibleHypertextMethod "resetProperty" o = Gtk.Accessible.AccessibleResetPropertyMethodInfo
        ResolveAccessibleHypertextMethod "resetRelation" o = Gtk.Accessible.AccessibleResetRelationMethodInfo
        ResolveAccessibleHypertextMethod "resetState" o = Gtk.Accessible.AccessibleResetStateMethodInfo
        ResolveAccessibleHypertextMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
        ResolveAccessibleHypertextMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
        ResolveAccessibleHypertextMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
        ResolveAccessibleHypertextMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
        ResolveAccessibleHypertextMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo
        ResolveAccessibleHypertextMethod "updateNextAccessibleSibling" o = Gtk.Accessible.AccessibleUpdateNextAccessibleSiblingMethodInfo
        ResolveAccessibleHypertextMethod "updatePlatformState" o = Gtk.Accessible.AccessibleUpdatePlatformStateMethodInfo
        ResolveAccessibleHypertextMethod "updateProperty" o = Gtk.Accessible.AccessibleUpdatePropertyMethodInfo
        ResolveAccessibleHypertextMethod "updateRelation" o = Gtk.Accessible.AccessibleUpdateRelationMethodInfo
        ResolveAccessibleHypertextMethod "updateState" o = Gtk.Accessible.AccessibleUpdateStateMethodInfo
        ResolveAccessibleHypertextMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
        ResolveAccessibleHypertextMethod "getAccessibleId" o = Gtk.Accessible.AccessibleGetAccessibleIdMethodInfo
        ResolveAccessibleHypertextMethod "getAccessibleParent" o = Gtk.Accessible.AccessibleGetAccessibleParentMethodInfo
        ResolveAccessibleHypertextMethod "getAccessibleRole" o = Gtk.Accessible.AccessibleGetAccessibleRoleMethodInfo
        ResolveAccessibleHypertextMethod "getAtContext" o = Gtk.Accessible.AccessibleGetAtContextMethodInfo
        ResolveAccessibleHypertextMethod "getBounds" o = Gtk.Accessible.AccessibleGetBoundsMethodInfo
        ResolveAccessibleHypertextMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
        ResolveAccessibleHypertextMethod "getFirstAccessibleChild" o = Gtk.Accessible.AccessibleGetFirstAccessibleChildMethodInfo
        ResolveAccessibleHypertextMethod "getNextAccessibleSibling" o = Gtk.Accessible.AccessibleGetNextAccessibleSiblingMethodInfo
        ResolveAccessibleHypertextMethod "getPlatformState" o = Gtk.Accessible.AccessibleGetPlatformStateMethodInfo
        ResolveAccessibleHypertextMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
        ResolveAccessibleHypertextMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
        ResolveAccessibleHypertextMethod "setAccessibleParent" o = Gtk.Accessible.AccessibleSetAccessibleParentMethodInfo
        ResolveAccessibleHypertextMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
        ResolveAccessibleHypertextMethod "setDataFull" o = GObject.Object.ObjectSetDataFullMethodInfo
        ResolveAccessibleHypertextMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
        ResolveAccessibleHypertextMethod l o = O.MethodResolutionFailed l o

    instance (info ~ ResolveAccessibleHypertextMethod t AccessibleHypertext, O.OverloadedMethod info AccessibleHypertext p) => OL.IsLabel t (AccessibleHypertext -> 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 ~ ResolveAccessibleHypertextMethod t AccessibleHypertext, O.OverloadedMethod info AccessibleHypertext p, R.HasField t AccessibleHypertext p) => R.HasField t AccessibleHypertext p where
        getField = O.overloadedMethod @info

    #endif

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

    #endif

    #if defined(ENABLE_OVERLOADING)
    type instance O.SignalList AccessibleHypertext = AccessibleHypertextSignalList
    type AccessibleHypertextSignalList = ('[ '("notify", GObject.Object.ObjectNotifySignalInfo)] :: [(Symbol, DK.Type)])

    #endif