{-# LANGUAGE TypeApplications #-}


-- | Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
-- License    : LGPL-2.1
-- Maintainer : Iñaki García Etxebarria
-- 
-- /No description available in the introspection data./

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

module GI.Gio.Objects.NativeVolumeMonitor
    ( 

-- * Exported types
    NativeVolumeMonitor(..)                 ,
    IsNativeVolumeMonitor                   ,
    toNativeVolumeMonitor                   ,


 -- * Methods
-- | 
-- 
--  === __Click to display all available methods, including inherited ones__
-- ==== Methods
-- [bindProperty]("GI.GObject.Objects.Object#g:method:bindProperty"), [bindPropertyFull]("GI.GObject.Objects.Object#g:method:bindPropertyFull"), [forceFloating]("GI.GObject.Objects.Object#g:method:forceFloating"), [freezeNotify]("GI.GObject.Objects.Object#g:method:freezeNotify"), [getv]("GI.GObject.Objects.Object#g:method:getv"), [isFloating]("GI.GObject.Objects.Object#g:method:isFloating"), [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"), [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
-- [getConnectedDrives]("GI.Gio.Objects.VolumeMonitor#g:method:getConnectedDrives"), [getData]("GI.GObject.Objects.Object#g:method:getData"), [getMountForUuid]("GI.Gio.Objects.VolumeMonitor#g:method:getMountForUuid"), [getMounts]("GI.Gio.Objects.VolumeMonitor#g:method:getMounts"), [getProperty]("GI.GObject.Objects.Object#g:method:getProperty"), [getQdata]("GI.GObject.Objects.Object#g:method:getQdata"), [getVolumeForUuid]("GI.Gio.Objects.VolumeMonitor#g:method:getVolumeForUuid"), [getVolumes]("GI.Gio.Objects.VolumeMonitor#g:method:getVolumes").
-- 
-- ==== 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)
    ResolveNativeVolumeMonitorMethod        ,
#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.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.Text as T
import qualified Data.ByteString.Char8 as B
import qualified Data.Map as Map
import qualified Foreign.Ptr as FP
import qualified GHC.OverloadedLabels as OL
import qualified GHC.Records as R

import qualified GI.GObject.Objects.Object as GObject.Object
import {-# SOURCE #-} qualified GI.Gio.Objects.VolumeMonitor as Gio.VolumeMonitor

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

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

foreign import ccall "g_native_volume_monitor_get_type"
    c_g_native_volume_monitor_get_type :: IO B.Types.GType

instance B.Types.TypedObject NativeVolumeMonitor where
    glibType :: IO GType
glibType = IO GType
c_g_native_volume_monitor_get_type

instance B.Types.GObject NativeVolumeMonitor

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

instance O.HasParentTypes NativeVolumeMonitor
type instance O.ParentTypes NativeVolumeMonitor = '[Gio.VolumeMonitor.VolumeMonitor, GObject.Object.Object]

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

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

#if defined(ENABLE_OVERLOADING)
type family ResolveNativeVolumeMonitorMethod (t :: Symbol) (o :: *) :: * where
    ResolveNativeVolumeMonitorMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
    ResolveNativeVolumeMonitorMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
    ResolveNativeVolumeMonitorMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
    ResolveNativeVolumeMonitorMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
    ResolveNativeVolumeMonitorMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
    ResolveNativeVolumeMonitorMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
    ResolveNativeVolumeMonitorMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
    ResolveNativeVolumeMonitorMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
    ResolveNativeVolumeMonitorMethod "ref" o = GObject.Object.ObjectRefMethodInfo
    ResolveNativeVolumeMonitorMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
    ResolveNativeVolumeMonitorMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
    ResolveNativeVolumeMonitorMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
    ResolveNativeVolumeMonitorMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
    ResolveNativeVolumeMonitorMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
    ResolveNativeVolumeMonitorMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo
    ResolveNativeVolumeMonitorMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
    ResolveNativeVolumeMonitorMethod "getConnectedDrives" o = Gio.VolumeMonitor.VolumeMonitorGetConnectedDrivesMethodInfo
    ResolveNativeVolumeMonitorMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
    ResolveNativeVolumeMonitorMethod "getMountForUuid" o = Gio.VolumeMonitor.VolumeMonitorGetMountForUuidMethodInfo
    ResolveNativeVolumeMonitorMethod "getMounts" o = Gio.VolumeMonitor.VolumeMonitorGetMountsMethodInfo
    ResolveNativeVolumeMonitorMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
    ResolveNativeVolumeMonitorMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
    ResolveNativeVolumeMonitorMethod "getVolumeForUuid" o = Gio.VolumeMonitor.VolumeMonitorGetVolumeForUuidMethodInfo
    ResolveNativeVolumeMonitorMethod "getVolumes" o = Gio.VolumeMonitor.VolumeMonitorGetVolumesMethodInfo
    ResolveNativeVolumeMonitorMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
    ResolveNativeVolumeMonitorMethod "setDataFull" o = GObject.Object.ObjectSetDataFullMethodInfo
    ResolveNativeVolumeMonitorMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
    ResolveNativeVolumeMonitorMethod l o = O.MethodResolutionFailed l o

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

#endif

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

#endif

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

#if defined(ENABLE_OVERLOADING)
#endif

#if defined(ENABLE_OVERLOADING)
type instance O.SignalList NativeVolumeMonitor = NativeVolumeMonitorSignalList
type NativeVolumeMonitorSignalList = ('[ '("driveChanged", Gio.VolumeMonitor.VolumeMonitorDriveChangedSignalInfo), '("driveConnected", Gio.VolumeMonitor.VolumeMonitorDriveConnectedSignalInfo), '("driveDisconnected", Gio.VolumeMonitor.VolumeMonitorDriveDisconnectedSignalInfo), '("driveEjectButton", Gio.VolumeMonitor.VolumeMonitorDriveEjectButtonSignalInfo), '("driveStopButton", Gio.VolumeMonitor.VolumeMonitorDriveStopButtonSignalInfo), '("mountAdded", Gio.VolumeMonitor.VolumeMonitorMountAddedSignalInfo), '("mountChanged", Gio.VolumeMonitor.VolumeMonitorMountChangedSignalInfo), '("mountPreUnmount", Gio.VolumeMonitor.VolumeMonitorMountPreUnmountSignalInfo), '("mountRemoved", Gio.VolumeMonitor.VolumeMonitorMountRemovedSignalInfo), '("notify", GObject.Object.ObjectNotifySignalInfo), '("volumeAdded", Gio.VolumeMonitor.VolumeMonitorVolumeAddedSignalInfo), '("volumeChanged", Gio.VolumeMonitor.VolumeMonitorVolumeChangedSignalInfo), '("volumeRemoved", Gio.VolumeMonitor.VolumeMonitorVolumeRemovedSignalInfo)] :: [(Symbol, *)])

#endif