{-# LANGUAGE TypeApplications #-}


-- | Copyright  : Will Thompson and Iñaki García Etxebarria
-- License    : LGPL-2.1
-- Maintainer : Iñaki García Etxebarria
-- 
-- Interactive tooltips.
-- 
-- @GtkSourceHover@ allows a [class/@view@/] to provide contextual information.
-- When enabled, if the user hovers over a word in the text editor, a series
-- of registered [iface/@hoverProvider@/] can populate a [class/@hoverDisplay@/]
-- with useful information.
-- 
-- To enable call [method/@view@/.get_hover] and add [iface/@hoverProvider@/]
-- using [method/@hover@/.add_provider]. To disable, remove all registered
-- providers with [method/@hover@/.remove_provider].
-- 
-- You can change how long to wait to display the interactive tooltip by
-- setting the [property/@hover@/:hover-delay] property in milliseconds.

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

module GI.GtkSource.Objects.Hover
    ( 

-- * Exported types
    Hover(..)                               ,
    IsHover                                 ,
    toHover                                 ,


 -- * Methods
-- | 
-- 
--  === __Click to display all available methods, including inherited ones__
-- ==== Methods
-- [addProvider]("GI.GtkSource.Objects.Hover#g:method:addProvider"), [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"), [removeProvider]("GI.GtkSource.Objects.Hover#g:method:removeProvider"), [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"), [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"), [setProperty]("GI.GObject.Objects.Object#g:method:setProperty").

#if defined(ENABLE_OVERLOADING)
    ResolveHoverMethod                      ,
#endif

-- ** addProvider #method:addProvider#

#if defined(ENABLE_OVERLOADING)
    HoverAddProviderMethodInfo              ,
#endif
    hoverAddProvider                        ,


-- ** removeProvider #method:removeProvider#

#if defined(ENABLE_OVERLOADING)
    HoverRemoveProviderMethodInfo           ,
#endif
    hoverRemoveProvider                     ,




 -- * Properties


-- ** hoverDelay #attr:hoverDelay#
-- | Contains the number of milliseconds to delay before showing the hover assistant.

#if defined(ENABLE_OVERLOADING)
    HoverHoverDelayPropertyInfo             ,
#endif
    constructHoverHoverDelay                ,
    getHoverHoverDelay                      ,
#if defined(ENABLE_OVERLOADING)
    hoverHoverDelay                         ,
#endif
    setHoverHoverDelay                      ,




    ) 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 GI.GObject.Objects.Object as GObject.Object
import {-# SOURCE #-} qualified GI.GtkSource.Interfaces.HoverProvider as GtkSource.HoverProvider

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

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

foreign import ccall "gtk_source_hover_get_type"
    c_gtk_source_hover_get_type :: IO B.Types.GType

instance B.Types.TypedObject Hover where
    glibType :: IO GType
glibType = IO GType
c_gtk_source_hover_get_type

instance B.Types.GObject Hover

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

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

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

-- | Convert 'Hover' 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 Hover) where
    gvalueGType_ :: IO GType
gvalueGType_ = IO GType
c_gtk_source_hover_get_type
    gvalueSet_ :: Ptr GValue -> Maybe Hover -> IO ()
gvalueSet_ Ptr GValue
gv Maybe Hover
P.Nothing = Ptr GValue -> Ptr Hover -> IO ()
forall a. GObject a => Ptr GValue -> Ptr a -> IO ()
B.GValue.set_object Ptr GValue
gv (Ptr Hover
forall a. Ptr a
FP.nullPtr :: FP.Ptr Hover)
    gvalueSet_ Ptr GValue
gv (P.Just Hover
obj) = Hover -> (Ptr Hover -> IO ()) -> IO ()
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
B.ManagedPtr.withManagedPtr Hover
obj (Ptr GValue -> Ptr Hover -> IO ()
forall a. GObject a => Ptr GValue -> Ptr a -> IO ()
B.GValue.set_object Ptr GValue
gv)
    gvalueGet_ :: Ptr GValue -> IO (Maybe Hover)
gvalueGet_ Ptr GValue
gv = do
        Ptr Hover
ptr <- Ptr GValue -> IO (Ptr Hover)
forall a. GObject a => Ptr GValue -> IO (Ptr a)
B.GValue.get_object Ptr GValue
gv :: IO (FP.Ptr Hover)
        if Ptr Hover
ptr Ptr Hover -> Ptr Hover -> Bool
forall a. Eq a => a -> a -> Bool
/= Ptr Hover
forall a. Ptr a
FP.nullPtr
        then Hover -> Maybe Hover
forall a. a -> Maybe a
P.Just (Hover -> Maybe Hover) -> IO Hover -> IO (Maybe Hover)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (ManagedPtr Hover -> Hover) -> Ptr Hover -> IO Hover
forall a b.
(HasCallStack, GObject a, GObject b) =>
(ManagedPtr a -> a) -> Ptr b -> IO a
B.ManagedPtr.newObject ManagedPtr Hover -> Hover
Hover Ptr Hover
ptr
        else Maybe Hover -> IO (Maybe Hover)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe Hover
forall a. Maybe a
P.Nothing
        
    

#if defined(ENABLE_OVERLOADING)
type family ResolveHoverMethod (t :: Symbol) (o :: DK.Type) :: DK.Type where
    ResolveHoverMethod "addProvider" o = HoverAddProviderMethodInfo
    ResolveHoverMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
    ResolveHoverMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
    ResolveHoverMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
    ResolveHoverMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
    ResolveHoverMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
    ResolveHoverMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
    ResolveHoverMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
    ResolveHoverMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
    ResolveHoverMethod "ref" o = GObject.Object.ObjectRefMethodInfo
    ResolveHoverMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
    ResolveHoverMethod "removeProvider" o = HoverRemoveProviderMethodInfo
    ResolveHoverMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
    ResolveHoverMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
    ResolveHoverMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
    ResolveHoverMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
    ResolveHoverMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo
    ResolveHoverMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
    ResolveHoverMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
    ResolveHoverMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
    ResolveHoverMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
    ResolveHoverMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
    ResolveHoverMethod "setDataFull" o = GObject.Object.ObjectSetDataFullMethodInfo
    ResolveHoverMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
    ResolveHoverMethod l o = O.MethodResolutionFailed l o

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

#endif

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

#endif

-- VVV Prop "hover-delay"
   -- Type: TBasicType TUInt
   -- Flags: [PropertyReadable,PropertyWritable]
   -- Nullable: (Nothing,Nothing)

-- | Get the value of the “@hover-delay@” property.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.get' hover #hoverDelay
-- @
getHoverHoverDelay :: (MonadIO m, IsHover o) => o -> m Word32
getHoverHoverDelay :: forall (m :: * -> *) o. (MonadIO m, IsHover o) => o -> m Word32
getHoverHoverDelay o
obj = IO Word32 -> m Word32
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
MIO.liftIO (IO Word32 -> m Word32) -> IO Word32 -> m Word32
forall a b. (a -> b) -> a -> b
$ o -> String -> IO Word32
forall a. GObject a => a -> String -> IO Word32
B.Properties.getObjectPropertyUInt32 o
obj String
"hover-delay"

-- | Set the value of the “@hover-delay@” property.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.set' hover [ #hoverDelay 'Data.GI.Base.Attributes.:=' value ]
-- @
setHoverHoverDelay :: (MonadIO m, IsHover o) => o -> Word32 -> m ()
setHoverHoverDelay :: forall (m :: * -> *) o.
(MonadIO m, IsHover o) =>
o -> Word32 -> m ()
setHoverHoverDelay o
obj Word32
val = IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
MIO.liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ do
    o -> String -> Word32 -> IO ()
forall a. GObject a => a -> String -> Word32 -> IO ()
B.Properties.setObjectPropertyUInt32 o
obj String
"hover-delay" Word32
val

-- | Construct a `GValueConstruct` with valid value for the “@hover-delay@” property. This is rarely needed directly, but it is used by `Data.GI.Base.Constructible.new`.
constructHoverHoverDelay :: (IsHover o, MIO.MonadIO m) => Word32 -> m (GValueConstruct o)
constructHoverHoverDelay :: forall o (m :: * -> *).
(IsHover o, MonadIO m) =>
Word32 -> m (GValueConstruct o)
constructHoverHoverDelay Word32
val = IO (GValueConstruct o) -> m (GValueConstruct o)
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
MIO.liftIO (IO (GValueConstruct o) -> m (GValueConstruct o))
-> IO (GValueConstruct o) -> m (GValueConstruct o)
forall a b. (a -> b) -> a -> b
$ do
    IO (GValueConstruct o) -> IO (GValueConstruct o)
forall a. IO a -> IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
MIO.liftIO (IO (GValueConstruct o) -> IO (GValueConstruct o))
-> IO (GValueConstruct o) -> IO (GValueConstruct o)
forall a b. (a -> b) -> a -> b
$ String -> Word32 -> IO (GValueConstruct o)
forall o. String -> Word32 -> IO (GValueConstruct o)
B.Properties.constructObjectPropertyUInt32 String
"hover-delay" Word32
val

#if defined(ENABLE_OVERLOADING)
data HoverHoverDelayPropertyInfo
instance AttrInfo HoverHoverDelayPropertyInfo where
    type AttrAllowedOps HoverHoverDelayPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrBaseTypeConstraint HoverHoverDelayPropertyInfo = IsHover
    type AttrSetTypeConstraint HoverHoverDelayPropertyInfo = (~) Word32
    type AttrTransferTypeConstraint HoverHoverDelayPropertyInfo = (~) Word32
    type AttrTransferType HoverHoverDelayPropertyInfo = Word32
    type AttrGetType HoverHoverDelayPropertyInfo = Word32
    type AttrLabel HoverHoverDelayPropertyInfo = "hover-delay"
    type AttrOrigin HoverHoverDelayPropertyInfo = Hover
    attrGet = getHoverHoverDelay
    attrSet = setHoverHoverDelay
    attrTransfer _ v = do
        return v
    attrConstruct = constructHoverHoverDelay
    attrClear = undefined
    dbgAttrInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.GtkSource.Objects.Hover.hoverDelay"
        , O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-gtksource-5.0.0/docs/GI-GtkSource-Objects-Hover.html#g:attr:hoverDelay"
        })
#endif

#if defined(ENABLE_OVERLOADING)
instance O.HasAttributeList Hover
type instance O.AttributeList Hover = HoverAttributeList
type HoverAttributeList = ('[ '("hoverDelay", HoverHoverDelayPropertyInfo)] :: [(Symbol, DK.Type)])
#endif

#if defined(ENABLE_OVERLOADING)
hoverHoverDelay :: AttrLabelProxy "hoverDelay"
hoverHoverDelay = AttrLabelProxy

#endif

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

#endif

-- method Hover::add_provider
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "self"
--           , argType =
--               TInterface Name { namespace = "GtkSource" , name = "Hover" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , argCallbackUserData = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "provider"
--           , argType =
--               TInterface
--                 Name { namespace = "GtkSource" , name = "HoverProvider" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , argCallbackUserData = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Nothing
-- throws : False
-- Skip return : False

foreign import ccall "gtk_source_hover_add_provider" gtk_source_hover_add_provider :: 
    Ptr Hover ->                            -- self : TInterface (Name {namespace = "GtkSource", name = "Hover"})
    Ptr GtkSource.HoverProvider.HoverProvider -> -- provider : TInterface (Name {namespace = "GtkSource", name = "HoverProvider"})
    IO ()

-- | /No description available in the introspection data./
hoverAddProvider ::
    (B.CallStack.HasCallStack, MonadIO m, IsHover a, GtkSource.HoverProvider.IsHoverProvider b) =>
    a
    -> b
    -> m ()
hoverAddProvider :: forall (m :: * -> *) a b.
(HasCallStack, MonadIO m, IsHover a, IsHoverProvider b) =>
a -> b -> m ()
hoverAddProvider a
self b
provider = IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ do
    Ptr Hover
self' <- a -> IO (Ptr Hover)
forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
unsafeManagedPtrCastPtr a
self
    Ptr HoverProvider
provider' <- b -> IO (Ptr HoverProvider)
forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
unsafeManagedPtrCastPtr b
provider
    Ptr Hover -> Ptr HoverProvider -> IO ()
gtk_source_hover_add_provider Ptr Hover
self' Ptr HoverProvider
provider'
    a -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr a
self
    b -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr b
provider
    () -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()

#if defined(ENABLE_OVERLOADING)
data HoverAddProviderMethodInfo
instance (signature ~ (b -> m ()), MonadIO m, IsHover a, GtkSource.HoverProvider.IsHoverProvider b) => O.OverloadedMethod HoverAddProviderMethodInfo a signature where
    overloadedMethod = hoverAddProvider

instance O.OverloadedMethodInfo HoverAddProviderMethodInfo a where
    overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.GtkSource.Objects.Hover.hoverAddProvider",
        O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-gtksource-5.0.0/docs/GI-GtkSource-Objects-Hover.html#v:hoverAddProvider"
        })


#endif

-- method Hover::remove_provider
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "self"
--           , argType =
--               TInterface Name { namespace = "GtkSource" , name = "Hover" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , argCallbackUserData = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "provider"
--           , argType =
--               TInterface
--                 Name { namespace = "GtkSource" , name = "HoverProvider" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , argCallbackUserData = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Nothing
-- throws : False
-- Skip return : False

foreign import ccall "gtk_source_hover_remove_provider" gtk_source_hover_remove_provider :: 
    Ptr Hover ->                            -- self : TInterface (Name {namespace = "GtkSource", name = "Hover"})
    Ptr GtkSource.HoverProvider.HoverProvider -> -- provider : TInterface (Name {namespace = "GtkSource", name = "HoverProvider"})
    IO ()

-- | /No description available in the introspection data./
hoverRemoveProvider ::
    (B.CallStack.HasCallStack, MonadIO m, IsHover a, GtkSource.HoverProvider.IsHoverProvider b) =>
    a
    -> b
    -> m ()
hoverRemoveProvider :: forall (m :: * -> *) a b.
(HasCallStack, MonadIO m, IsHover a, IsHoverProvider b) =>
a -> b -> m ()
hoverRemoveProvider a
self b
provider = IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ do
    Ptr Hover
self' <- a -> IO (Ptr Hover)
forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
unsafeManagedPtrCastPtr a
self
    Ptr HoverProvider
provider' <- b -> IO (Ptr HoverProvider)
forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
unsafeManagedPtrCastPtr b
provider
    Ptr Hover -> Ptr HoverProvider -> IO ()
gtk_source_hover_remove_provider Ptr Hover
self' Ptr HoverProvider
provider'
    a -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr a
self
    b -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr b
provider
    () -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()

#if defined(ENABLE_OVERLOADING)
data HoverRemoveProviderMethodInfo
instance (signature ~ (b -> m ()), MonadIO m, IsHover a, GtkSource.HoverProvider.IsHoverProvider b) => O.OverloadedMethod HoverRemoveProviderMethodInfo a signature where
    overloadedMethod = hoverRemoveProvider

instance O.OverloadedMethodInfo HoverRemoveProviderMethodInfo a where
    overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.GtkSource.Objects.Hover.hoverRemoveProvider",
        O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-gtksource-5.0.0/docs/GI-GtkSource-Objects-Hover.html#v:hoverRemoveProvider"
        })


#endif