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

The purpose of the 'GI.Gdk.Objects.DisplayManager.DisplayManager' singleton object is to offer
notification when displays appear or disappear or the default display
changes.

You can use 'GI.Gdk.Objects.DisplayManager.displayManagerGet' to obtain the 'GI.Gdk.Objects.DisplayManager.DisplayManager'
singleton, but that should be rarely necessary. Typically, initializing
GTK+ opens a display that you can work with without ever accessing the
'GI.Gdk.Objects.DisplayManager.DisplayManager'.

The GDK library can be built with support for multiple backends.
The 'GI.Gdk.Objects.DisplayManager.DisplayManager' object determines which backend is used
at runtime.

When writing backend-specific code that is supposed to work with
multiple GDK backends, you have to consider both compile time and
runtime. At compile time, use the @/GDK_WINDOWING_X11/@, @/GDK_WINDOWING_WIN32/@
macros, etc. to find out which backends are present in the GDK library
you are building your application against. At runtime, use type-check
macros like @/GDK_IS_X11_DISPLAY()/@ to find out which backend is in use:

## Backend-specific code ## {@/backend/@-specific}


=== /C code/
>
>#ifdef GDK_WINDOWING_X11
>  if (GDK_IS_X11_DISPLAY (display))
>    {
>      // make X11-specific calls here
>    }
>  else
>#endif
>#ifdef GDK_WINDOWING_QUARTZ
>  if (GDK_IS_QUARTZ_DISPLAY (display))
>    {
>      // make Quartz-specific calls here
>    }
>  else
>#endif
>  g_error ("Unsupported GDK backend");

-}

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

module GI.Gdk.Objects.DisplayManager
    (

-- * Exported types
    DisplayManager(..)                      ,
    IsDisplayManager                        ,
    toDisplayManager                        ,
    noDisplayManager                        ,


 -- * Methods
-- ** get #method:get#

    displayManagerGet                       ,


-- ** getDefaultDisplay #method:getDefaultDisplay#

#if ENABLE_OVERLOADING
    DisplayManagerGetDefaultDisplayMethodInfo,
#endif
    displayManagerGetDefaultDisplay         ,


-- ** listDisplays #method:listDisplays#

#if ENABLE_OVERLOADING
    DisplayManagerListDisplaysMethodInfo    ,
#endif
    displayManagerListDisplays              ,


-- ** openDisplay #method:openDisplay#

#if ENABLE_OVERLOADING
    DisplayManagerOpenDisplayMethodInfo     ,
#endif
    displayManagerOpenDisplay               ,


-- ** setDefaultDisplay #method:setDefaultDisplay#

#if ENABLE_OVERLOADING
    DisplayManagerSetDefaultDisplayMethodInfo,
#endif
    displayManagerSetDefaultDisplay         ,




 -- * Properties
-- ** defaultDisplay #attr:defaultDisplay#
{- | /No description available in the introspection data./
-}
#if ENABLE_OVERLOADING
    DisplayManagerDefaultDisplayPropertyInfo,
#endif
    constructDisplayManagerDefaultDisplay   ,
#if ENABLE_OVERLOADING
    displayManagerDefaultDisplay            ,
#endif
    getDisplayManagerDefaultDisplay         ,
    setDisplayManagerDefaultDisplay         ,




 -- * Signals
-- ** displayOpened #signal:displayOpened#

    C_DisplayManagerDisplayOpenedCallback   ,
    DisplayManagerDisplayOpenedCallback     ,
#if ENABLE_OVERLOADING
    DisplayManagerDisplayOpenedSignalInfo   ,
#endif
    afterDisplayManagerDisplayOpened        ,
    genClosure_DisplayManagerDisplayOpened  ,
    mk_DisplayManagerDisplayOpenedCallback  ,
    noDisplayManagerDisplayOpenedCallback   ,
    onDisplayManagerDisplayOpened           ,
    wrap_DisplayManagerDisplayOpenedCallback,




    ) 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
import {-# SOURCE #-} qualified GI.Gdk.Objects.Display as Gdk.Display

-- | Memory-managed wrapper type.
newtype DisplayManager = DisplayManager (ManagedPtr DisplayManager)
foreign import ccall "gdk_display_manager_get_type"
    c_gdk_display_manager_get_type :: IO GType

instance GObject DisplayManager where
    gobjectType = c_gdk_display_manager_get_type


-- | Type class for types which can be safely cast to `DisplayManager`, for instance with `toDisplayManager`.
class (GObject o, O.IsDescendantOf DisplayManager o) => IsDisplayManager o
instance (GObject o, O.IsDescendantOf DisplayManager o) => IsDisplayManager o

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

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

-- | A convenience alias for `Nothing` :: `Maybe` `DisplayManager`.
noDisplayManager :: Maybe DisplayManager
noDisplayManager = Nothing

#if ENABLE_OVERLOADING
type family ResolveDisplayManagerMethod (t :: Symbol) (o :: *) :: * where
    ResolveDisplayManagerMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
    ResolveDisplayManagerMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
    ResolveDisplayManagerMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
    ResolveDisplayManagerMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
    ResolveDisplayManagerMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
    ResolveDisplayManagerMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
    ResolveDisplayManagerMethod "listDisplays" o = DisplayManagerListDisplaysMethodInfo
    ResolveDisplayManagerMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
    ResolveDisplayManagerMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
    ResolveDisplayManagerMethod "openDisplay" o = DisplayManagerOpenDisplayMethodInfo
    ResolveDisplayManagerMethod "ref" o = GObject.Object.ObjectRefMethodInfo
    ResolveDisplayManagerMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
    ResolveDisplayManagerMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
    ResolveDisplayManagerMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
    ResolveDisplayManagerMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
    ResolveDisplayManagerMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
    ResolveDisplayManagerMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo
    ResolveDisplayManagerMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
    ResolveDisplayManagerMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
    ResolveDisplayManagerMethod "getDefaultDisplay" o = DisplayManagerGetDefaultDisplayMethodInfo
    ResolveDisplayManagerMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
    ResolveDisplayManagerMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
    ResolveDisplayManagerMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
    ResolveDisplayManagerMethod "setDataFull" o = GObject.Object.ObjectSetDataFullMethodInfo
    ResolveDisplayManagerMethod "setDefaultDisplay" o = DisplayManagerSetDefaultDisplayMethodInfo
    ResolveDisplayManagerMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
    ResolveDisplayManagerMethod l o = O.MethodResolutionFailed l o

instance (info ~ ResolveDisplayManagerMethod t DisplayManager, O.MethodInfo info DisplayManager p) => OL.IsLabel t (DisplayManager -> 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

-- signal DisplayManager::display-opened
{- |
The ::display-opened signal is emitted when a display is opened.

/Since: 2.2/
-}
type DisplayManagerDisplayOpenedCallback =
    Gdk.Display.Display
    {- ^ /@display@/: the opened display -}
    -> IO ()

-- | A convenience synonym for @`Nothing` :: `Maybe` `DisplayManagerDisplayOpenedCallback`@.
noDisplayManagerDisplayOpenedCallback :: Maybe DisplayManagerDisplayOpenedCallback
noDisplayManagerDisplayOpenedCallback = Nothing

-- | Type for the callback on the (unwrapped) C side.
type C_DisplayManagerDisplayOpenedCallback =
    Ptr () ->                               -- object
    Ptr Gdk.Display.Display ->
    Ptr () ->                               -- user_data
    IO ()

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

-- | Wrap the callback into a `GClosure`.
genClosure_DisplayManagerDisplayOpened :: MonadIO m => DisplayManagerDisplayOpenedCallback -> m (GClosure C_DisplayManagerDisplayOpenedCallback)
genClosure_DisplayManagerDisplayOpened cb = liftIO $ do
    let cb' = wrap_DisplayManagerDisplayOpenedCallback cb
    mk_DisplayManagerDisplayOpenedCallback cb' >>= B.GClosure.newGClosure


-- | Wrap a `DisplayManagerDisplayOpenedCallback` into a `C_DisplayManagerDisplayOpenedCallback`.
wrap_DisplayManagerDisplayOpenedCallback ::
    DisplayManagerDisplayOpenedCallback ->
    C_DisplayManagerDisplayOpenedCallback
wrap_DisplayManagerDisplayOpenedCallback _cb _ display _ = do
    display' <- (newObject Gdk.Display.Display) display
    _cb  display'


{- |
Connect a signal handler for the “@display-opened@” 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' displayManager #displayOpened callback
@
-}
onDisplayManagerDisplayOpened :: (IsDisplayManager a, MonadIO m) => a -> DisplayManagerDisplayOpenedCallback -> m SignalHandlerId
onDisplayManagerDisplayOpened obj cb = liftIO $ do
    let cb' = wrap_DisplayManagerDisplayOpenedCallback cb
    cb'' <- mk_DisplayManagerDisplayOpenedCallback cb'
    connectSignalFunPtr obj "display-opened" cb'' SignalConnectBefore

{- |
Connect a signal handler for the “@display-opened@” 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' displayManager #displayOpened callback
@
-}
afterDisplayManagerDisplayOpened :: (IsDisplayManager a, MonadIO m) => a -> DisplayManagerDisplayOpenedCallback -> m SignalHandlerId
afterDisplayManagerDisplayOpened obj cb = liftIO $ do
    let cb' = wrap_DisplayManagerDisplayOpenedCallback cb
    cb'' <- mk_DisplayManagerDisplayOpenedCallback cb'
    connectSignalFunPtr obj "display-opened" cb'' SignalConnectAfter


-- VVV Prop "default-display"
   -- Type: TInterface (Name {namespace = "Gdk", name = "Display"})
   -- Flags: [PropertyReadable,PropertyWritable]
   -- Nullable: (Just True,Just False)

{- |
Get the value of the “@default-display@” property.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.get' displayManager #defaultDisplay
@
-}
getDisplayManagerDefaultDisplay :: (MonadIO m, IsDisplayManager o) => o -> m (Maybe Gdk.Display.Display)
getDisplayManagerDefaultDisplay obj = liftIO $ B.Properties.getObjectPropertyObject obj "default-display" Gdk.Display.Display

{- |
Set the value of the “@default-display@” property.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.set' displayManager [ #defaultDisplay 'Data.GI.Base.Attributes.:=' value ]
@
-}
setDisplayManagerDefaultDisplay :: (MonadIO m, IsDisplayManager o, Gdk.Display.IsDisplay a) => o -> a -> m ()
setDisplayManagerDefaultDisplay obj val = liftIO $ B.Properties.setObjectPropertyObject obj "default-display" (Just val)

{- |
Construct a `GValueConstruct` with valid value for the “@default-display@” property. This is rarely needed directly, but it is used by `Data.GI.Base.Constructible.new`.
-}
constructDisplayManagerDefaultDisplay :: (IsDisplayManager o, Gdk.Display.IsDisplay a) => a -> IO (GValueConstruct o)
constructDisplayManagerDefaultDisplay val = B.Properties.constructObjectPropertyObject "default-display" (Just val)

#if ENABLE_OVERLOADING
data DisplayManagerDefaultDisplayPropertyInfo
instance AttrInfo DisplayManagerDefaultDisplayPropertyInfo where
    type AttrAllowedOps DisplayManagerDefaultDisplayPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint DisplayManagerDefaultDisplayPropertyInfo = Gdk.Display.IsDisplay
    type AttrBaseTypeConstraint DisplayManagerDefaultDisplayPropertyInfo = IsDisplayManager
    type AttrGetType DisplayManagerDefaultDisplayPropertyInfo = (Maybe Gdk.Display.Display)
    type AttrLabel DisplayManagerDefaultDisplayPropertyInfo = "default-display"
    type AttrOrigin DisplayManagerDefaultDisplayPropertyInfo = DisplayManager
    attrGet _ = getDisplayManagerDefaultDisplay
    attrSet _ = setDisplayManagerDefaultDisplay
    attrConstruct _ = constructDisplayManagerDefaultDisplay
    attrClear _ = undefined
#endif

#if ENABLE_OVERLOADING
instance O.HasAttributeList DisplayManager
type instance O.AttributeList DisplayManager = DisplayManagerAttributeList
type DisplayManagerAttributeList = ('[ '("defaultDisplay", DisplayManagerDefaultDisplayPropertyInfo)] :: [(Symbol, *)])
#endif

#if ENABLE_OVERLOADING
displayManagerDefaultDisplay :: AttrLabelProxy "defaultDisplay"
displayManagerDefaultDisplay = AttrLabelProxy

#endif

#if ENABLE_OVERLOADING
data DisplayManagerDisplayOpenedSignalInfo
instance SignalInfo DisplayManagerDisplayOpenedSignalInfo where
    type HaskellCallbackType DisplayManagerDisplayOpenedSignalInfo = DisplayManagerDisplayOpenedCallback
    connectSignal _ obj cb connectMode = do
        let cb' = wrap_DisplayManagerDisplayOpenedCallback cb
        cb'' <- mk_DisplayManagerDisplayOpenedCallback cb'
        connectSignalFunPtr obj "display-opened" cb'' connectMode

type instance O.SignalList DisplayManager = DisplayManagerSignalList
type DisplayManagerSignalList = ('[ '("displayOpened", DisplayManagerDisplayOpenedSignalInfo), '("notify", GObject.Object.ObjectNotifySignalInfo)] :: [(Symbol, *)])

#endif

-- method DisplayManager::get_default_display
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "manager", argType = TInterface (Name {namespace = "Gdk", name = "DisplayManager"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GdkDisplayManager", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "Gdk", name = "Display"}))
-- throws : False
-- Skip return : False

foreign import ccall "gdk_display_manager_get_default_display" gdk_display_manager_get_default_display ::
    Ptr DisplayManager ->                   -- manager : TInterface (Name {namespace = "Gdk", name = "DisplayManager"})
    IO (Ptr Gdk.Display.Display)

{- |
Gets the default 'GI.Gdk.Objects.Display.Display'.

/Since: 2.2/
-}
displayManagerGetDefaultDisplay ::
    (B.CallStack.HasCallStack, MonadIO m, IsDisplayManager a) =>
    a
    {- ^ /@manager@/: a 'GI.Gdk.Objects.DisplayManager.DisplayManager' -}
    -> m (Maybe Gdk.Display.Display)
    {- ^ __Returns:__ a 'GI.Gdk.Objects.Display.Display', or 'Nothing' if
    there is no default display. -}
displayManagerGetDefaultDisplay manager = liftIO $ do
    manager' <- unsafeManagedPtrCastPtr manager
    result <- gdk_display_manager_get_default_display manager'
    maybeResult <- convertIfNonNull result $ \result' -> do
        result'' <- (newObject Gdk.Display.Display) result'
        return result''
    touchManagedPtr manager
    return maybeResult

#if ENABLE_OVERLOADING
data DisplayManagerGetDefaultDisplayMethodInfo
instance (signature ~ (m (Maybe Gdk.Display.Display)), MonadIO m, IsDisplayManager a) => O.MethodInfo DisplayManagerGetDefaultDisplayMethodInfo a signature where
    overloadedMethod _ = displayManagerGetDefaultDisplay

#endif

-- method DisplayManager::list_displays
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "manager", argType = TInterface (Name {namespace = "Gdk", name = "DisplayManager"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GdkDisplayManager", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TGSList (TInterface (Name {namespace = "Gdk", name = "Display"})))
-- throws : False
-- Skip return : False

foreign import ccall "gdk_display_manager_list_displays" gdk_display_manager_list_displays ::
    Ptr DisplayManager ->                   -- manager : TInterface (Name {namespace = "Gdk", name = "DisplayManager"})
    IO (Ptr (GSList (Ptr Gdk.Display.Display)))

{- |
List all currently open displays.

/Since: 2.2/
-}
displayManagerListDisplays ::
    (B.CallStack.HasCallStack, MonadIO m, IsDisplayManager a) =>
    a
    {- ^ /@manager@/: a 'GI.Gdk.Objects.DisplayManager.DisplayManager' -}
    -> m [Gdk.Display.Display]
    {- ^ __Returns:__ a newly
    allocated 'GI.GLib.Structs.SList.SList' of 'GI.Gdk.Objects.Display.Display' objects. Free with @/g_slist_free()/@
    when you are done with it. -}
displayManagerListDisplays manager = liftIO $ do
    manager' <- unsafeManagedPtrCastPtr manager
    result <- gdk_display_manager_list_displays manager'
    result' <- unpackGSList result
    result'' <- mapM (newObject Gdk.Display.Display) result'
    g_slist_free result
    touchManagedPtr manager
    return result''

#if ENABLE_OVERLOADING
data DisplayManagerListDisplaysMethodInfo
instance (signature ~ (m [Gdk.Display.Display]), MonadIO m, IsDisplayManager a) => O.MethodInfo DisplayManagerListDisplaysMethodInfo a signature where
    overloadedMethod _ = displayManagerListDisplays

#endif

-- method DisplayManager::open_display
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "manager", argType = TInterface (Name {namespace = "Gdk", name = "DisplayManager"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GdkDisplayManager", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "name", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the name of the display to open", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "Gdk", name = "Display"}))
-- throws : False
-- Skip return : False

foreign import ccall "gdk_display_manager_open_display" gdk_display_manager_open_display ::
    Ptr DisplayManager ->                   -- manager : TInterface (Name {namespace = "Gdk", name = "DisplayManager"})
    CString ->                              -- name : TBasicType TUTF8
    IO (Ptr Gdk.Display.Display)

{- |
Opens a display.

/Since: 3.0/
-}
displayManagerOpenDisplay ::
    (B.CallStack.HasCallStack, MonadIO m, IsDisplayManager a) =>
    a
    {- ^ /@manager@/: a 'GI.Gdk.Objects.DisplayManager.DisplayManager' -}
    -> T.Text
    {- ^ /@name@/: the name of the display to open -}
    -> m (Maybe Gdk.Display.Display)
    {- ^ __Returns:__ a 'GI.Gdk.Objects.Display.Display', or 'Nothing' if the
    display could not be opened -}
displayManagerOpenDisplay manager name = liftIO $ do
    manager' <- unsafeManagedPtrCastPtr manager
    name' <- textToCString name
    result <- gdk_display_manager_open_display manager' name'
    maybeResult <- convertIfNonNull result $ \result' -> do
        result'' <- (newObject Gdk.Display.Display) result'
        return result''
    touchManagedPtr manager
    freeMem name'
    return maybeResult

#if ENABLE_OVERLOADING
data DisplayManagerOpenDisplayMethodInfo
instance (signature ~ (T.Text -> m (Maybe Gdk.Display.Display)), MonadIO m, IsDisplayManager a) => O.MethodInfo DisplayManagerOpenDisplayMethodInfo a signature where
    overloadedMethod _ = displayManagerOpenDisplay

#endif

-- method DisplayManager::set_default_display
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "manager", argType = TInterface (Name {namespace = "Gdk", name = "DisplayManager"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GdkDisplayManager", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "display", argType = TInterface (Name {namespace = "Gdk", name = "Display"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GdkDisplay", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "gdk_display_manager_set_default_display" gdk_display_manager_set_default_display ::
    Ptr DisplayManager ->                   -- manager : TInterface (Name {namespace = "Gdk", name = "DisplayManager"})
    Ptr Gdk.Display.Display ->              -- display : TInterface (Name {namespace = "Gdk", name = "Display"})
    IO ()

{- |
Sets /@display@/ as the default display.

/Since: 2.2/
-}
displayManagerSetDefaultDisplay ::
    (B.CallStack.HasCallStack, MonadIO m, IsDisplayManager a, Gdk.Display.IsDisplay b) =>
    a
    {- ^ /@manager@/: a 'GI.Gdk.Objects.DisplayManager.DisplayManager' -}
    -> b
    {- ^ /@display@/: a 'GI.Gdk.Objects.Display.Display' -}
    -> m ()
displayManagerSetDefaultDisplay manager display = liftIO $ do
    manager' <- unsafeManagedPtrCastPtr manager
    display' <- unsafeManagedPtrCastPtr display
    gdk_display_manager_set_default_display manager' display'
    touchManagedPtr manager
    touchManagedPtr display
    return ()

#if ENABLE_OVERLOADING
data DisplayManagerSetDefaultDisplayMethodInfo
instance (signature ~ (b -> m ()), MonadIO m, IsDisplayManager a, Gdk.Display.IsDisplay b) => O.MethodInfo DisplayManagerSetDefaultDisplayMethodInfo a signature where
    overloadedMethod _ = displayManagerSetDefaultDisplay

#endif

-- method DisplayManager::get
-- method type : MemberFunction
-- Args : []
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "Gdk", name = "DisplayManager"}))
-- throws : False
-- Skip return : False

foreign import ccall "gdk_display_manager_get" gdk_display_manager_get ::
    IO (Ptr DisplayManager)

{- |
Gets the singleton 'GI.Gdk.Objects.DisplayManager.DisplayManager' object.

When called for the first time, this function consults the
@GDK_BACKEND@ environment variable to find out which
of the supported GDK backends to use (in case GDK has been compiled
with multiple backends). Applications can use 'GI.Gdk.Functions.setAllowedBackends'
to limit what backends can be used.

/Since: 2.2/
-}
displayManagerGet ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    m DisplayManager
    {- ^ __Returns:__ The global 'GI.Gdk.Objects.DisplayManager.DisplayManager' singleton;
    'GI.Gdk.Functions.parseArgs', 'GI.Gdk.Functions.init', or 'GI.Gdk.Functions.initCheck' must have
    been called first. -}
displayManagerGet  = liftIO $ do
    result <- gdk_display_manager_get
    checkUnexpectedReturnNULL "displayManagerGet" result
    result' <- (newObject DisplayManager) result
    return result'

#if ENABLE_OVERLOADING
#endif