#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
       && !defined(__HADDOCK_VERSION__))
module GI.Gio.Objects.AppInfoMonitor
    (
    AppInfoMonitor(..)                      ,
    IsAppInfoMonitor                        ,
    toAppInfoMonitor                        ,
    noAppInfoMonitor                        ,
 
    appInfoMonitorGet                       ,
 
    AppInfoMonitorChangedCallback           ,
#if ENABLE_OVERLOADING
    AppInfoMonitorChangedSignalInfo         ,
#endif
    C_AppInfoMonitorChangedCallback         ,
    afterAppInfoMonitorChanged              ,
    genClosure_AppInfoMonitorChanged        ,
    mk_AppInfoMonitorChangedCallback        ,
    noAppInfoMonitorChangedCallback         ,
    onAppInfoMonitorChanged                 ,
    wrap_AppInfoMonitorChangedCallback      ,
    ) 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.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.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 GI.GObject.Objects.Object as GObject.Object
newtype AppInfoMonitor = AppInfoMonitor (ManagedPtr AppInfoMonitor)
foreign import ccall "g_app_info_monitor_get_type"
    c_g_app_info_monitor_get_type :: IO GType
instance GObject AppInfoMonitor where
    gobjectType = c_g_app_info_monitor_get_type
class (GObject o, O.IsDescendantOf AppInfoMonitor o) => IsAppInfoMonitor o
instance (GObject o, O.IsDescendantOf AppInfoMonitor o) => IsAppInfoMonitor o
instance O.HasParentTypes AppInfoMonitor
type instance O.ParentTypes AppInfoMonitor = '[GObject.Object.Object]
toAppInfoMonitor :: (MonadIO m, IsAppInfoMonitor o) => o -> m AppInfoMonitor
toAppInfoMonitor = liftIO . unsafeCastTo AppInfoMonitor
noAppInfoMonitor :: Maybe AppInfoMonitor
noAppInfoMonitor = Nothing
#if ENABLE_OVERLOADING
type family ResolveAppInfoMonitorMethod (t :: Symbol) (o :: *) :: * where
    ResolveAppInfoMonitorMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
    ResolveAppInfoMonitorMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
    ResolveAppInfoMonitorMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
    ResolveAppInfoMonitorMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
    ResolveAppInfoMonitorMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
    ResolveAppInfoMonitorMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
    ResolveAppInfoMonitorMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
    ResolveAppInfoMonitorMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
    ResolveAppInfoMonitorMethod "ref" o = GObject.Object.ObjectRefMethodInfo
    ResolveAppInfoMonitorMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
    ResolveAppInfoMonitorMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
    ResolveAppInfoMonitorMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
    ResolveAppInfoMonitorMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
    ResolveAppInfoMonitorMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
    ResolveAppInfoMonitorMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo
    ResolveAppInfoMonitorMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
    ResolveAppInfoMonitorMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
    ResolveAppInfoMonitorMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
    ResolveAppInfoMonitorMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
    ResolveAppInfoMonitorMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
    ResolveAppInfoMonitorMethod "setDataFull" o = GObject.Object.ObjectSetDataFullMethodInfo
    ResolveAppInfoMonitorMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
    ResolveAppInfoMonitorMethod l o = O.MethodResolutionFailed l o
instance (info ~ ResolveAppInfoMonitorMethod t AppInfoMonitor, O.MethodInfo info AppInfoMonitor p) => OL.IsLabel t (AppInfoMonitor -> 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
type AppInfoMonitorChangedCallback =
    IO ()
noAppInfoMonitorChangedCallback :: Maybe AppInfoMonitorChangedCallback
noAppInfoMonitorChangedCallback = Nothing
type C_AppInfoMonitorChangedCallback =
    Ptr () ->                               
    Ptr () ->                               
    IO ()
foreign import ccall "wrapper"
    mk_AppInfoMonitorChangedCallback :: C_AppInfoMonitorChangedCallback -> IO (FunPtr C_AppInfoMonitorChangedCallback)
genClosure_AppInfoMonitorChanged :: MonadIO m => AppInfoMonitorChangedCallback -> m (GClosure C_AppInfoMonitorChangedCallback)
genClosure_AppInfoMonitorChanged cb = liftIO $ do
    let cb' = wrap_AppInfoMonitorChangedCallback cb
    mk_AppInfoMonitorChangedCallback cb' >>= B.GClosure.newGClosure
wrap_AppInfoMonitorChangedCallback ::
    AppInfoMonitorChangedCallback ->
    C_AppInfoMonitorChangedCallback
wrap_AppInfoMonitorChangedCallback _cb _ _ = do
    _cb
onAppInfoMonitorChanged :: (IsAppInfoMonitor a, MonadIO m) => a -> AppInfoMonitorChangedCallback -> m SignalHandlerId
onAppInfoMonitorChanged obj cb = liftIO $ do
    let cb' = wrap_AppInfoMonitorChangedCallback cb
    cb'' <- mk_AppInfoMonitorChangedCallback cb'
    connectSignalFunPtr obj "changed" cb'' SignalConnectBefore
afterAppInfoMonitorChanged :: (IsAppInfoMonitor a, MonadIO m) => a -> AppInfoMonitorChangedCallback -> m SignalHandlerId
afterAppInfoMonitorChanged obj cb = liftIO $ do
    let cb' = wrap_AppInfoMonitorChangedCallback cb
    cb'' <- mk_AppInfoMonitorChangedCallback cb'
    connectSignalFunPtr obj "changed" cb'' SignalConnectAfter
#if ENABLE_OVERLOADING
instance O.HasAttributeList AppInfoMonitor
type instance O.AttributeList AppInfoMonitor = AppInfoMonitorAttributeList
type AppInfoMonitorAttributeList = ('[ ] :: [(Symbol, *)])
#endif
#if ENABLE_OVERLOADING
#endif
#if ENABLE_OVERLOADING
data AppInfoMonitorChangedSignalInfo
instance SignalInfo AppInfoMonitorChangedSignalInfo where
    type HaskellCallbackType AppInfoMonitorChangedSignalInfo = AppInfoMonitorChangedCallback
    connectSignal _ obj cb connectMode = do
        let cb' = wrap_AppInfoMonitorChangedCallback cb
        cb'' <- mk_AppInfoMonitorChangedCallback cb'
        connectSignalFunPtr obj "changed" cb'' connectMode
type instance O.SignalList AppInfoMonitor = AppInfoMonitorSignalList
type AppInfoMonitorSignalList = ('[ '("changed", AppInfoMonitorChangedSignalInfo), '("notify", GObject.Object.ObjectNotifySignalInfo)] :: [(Symbol, *)])
#endif
foreign import ccall "g_app_info_monitor_get" g_app_info_monitor_get ::
    IO (Ptr AppInfoMonitor)
appInfoMonitorGet ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    m AppInfoMonitor
    
appInfoMonitorGet  = liftIO $ do
    result <- g_app_info_monitor_get
    checkUnexpectedReturnNULL "appInfoMonitorGet" result
    result' <- (wrapObject AppInfoMonitor) result
    return result'
#if ENABLE_OVERLOADING
#endif