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

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");

-}

module GI.Gdk.Objects.DisplayManager
    ( 

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


 -- * Methods
-- ** get #method:get#
    displayManagerGet                       ,


-- ** getDefaultDisplay #method:getDefaultDisplay#
    DisplayManagerGetDefaultDisplayMethodInfo,
    displayManagerGetDefaultDisplay         ,


-- ** listDisplays #method:listDisplays#
    DisplayManagerListDisplaysMethodInfo    ,
    displayManagerListDisplays              ,


-- ** openDisplay #method:openDisplay#
    DisplayManagerOpenDisplayMethodInfo     ,
    displayManagerOpenDisplay               ,


-- ** setDefaultDisplay #method:setDefaultDisplay#
    DisplayManagerSetDefaultDisplayMethodInfo,
    displayManagerSetDefaultDisplay         ,




 -- * Properties
-- ** defaultDisplay #attr:defaultDisplay#
    DisplayManagerDefaultDisplayPropertyInfo,
    constructDisplayManagerDefaultDisplay   ,
    displayManagerDefaultDisplay            ,
    getDisplayManagerDefaultDisplay         ,
    setDisplayManagerDefaultDisplay         ,




 -- * Signals
-- ** displayOpened #signal:displayOpened#
    C_DisplayManagerDisplayOpenedCallback   ,
    DisplayManagerDisplayOpenedCallback     ,
    DisplayManagerDisplayOpenedSignalInfo   ,
    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.GError as B.GError
import qualified Data.GI.Base.GVariant as B.GVariant
import qualified Data.GI.Base.GParamSpec as B.GParamSpec
import qualified Data.GI.Base.CallStack as B.CallStack
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 GI.GObject.Objects.Object as GObject.Object
import {-# SOURCE #-} qualified GI.Gdk.Objects.Display as Gdk.Display

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
    

class GObject o => IsDisplayManager o
#if MIN_VERSION_base(4,9,0)
instance {-# OVERLAPPABLE #-} (GObject a, O.UnknownAncestorError DisplayManager a) =>
    IsDisplayManager a
#endif
instance IsDisplayManager DisplayManager
instance GObject.Object.IsObject DisplayManager

toDisplayManager :: IsDisplayManager o => o -> IO DisplayManager
toDisplayManager = unsafeCastTo DisplayManager

noDisplayManager :: Maybe DisplayManager
noDisplayManager = Nothing

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 "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 "replaceData" o = GObject.Object.ObjectReplaceDataMethodInfo
    ResolveDisplayManagerMethod "replaceQdata" o = GObject.Object.ObjectReplaceQdataMethodInfo
    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 "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) => O.IsLabelProxy t (DisplayManager -> p) where
    fromLabelProxy _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)

#if MIN_VERSION_base(4,9,0)
instance (info ~ ResolveDisplayManagerMethod t DisplayManager, O.MethodInfo info DisplayManager p) => O.IsLabel t (DisplayManager -> p) where
    fromLabel _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)
#endif

-- signal DisplayManager::display-opened
type DisplayManagerDisplayOpenedCallback =
    Gdk.Display.Display ->
    IO ()

noDisplayManagerDisplayOpenedCallback :: Maybe DisplayManagerDisplayOpenedCallback
noDisplayManagerDisplayOpenedCallback = Nothing

type C_DisplayManagerDisplayOpenedCallback =
    Ptr () ->                               -- object
    Ptr Gdk.Display.Display ->
    Ptr () ->                               -- user_data
    IO ()

foreign import ccall "wrapper"
    mk_DisplayManagerDisplayOpenedCallback :: C_DisplayManagerDisplayOpenedCallback -> IO (FunPtr C_DisplayManagerDisplayOpenedCallback)

genClosure_DisplayManagerDisplayOpened :: DisplayManagerDisplayOpenedCallback -> IO Closure
genClosure_DisplayManagerDisplayOpened cb = do
    let cb' = wrap_DisplayManagerDisplayOpenedCallback cb
    mk_DisplayManagerDisplayOpenedCallback cb' >>= newCClosure


wrap_DisplayManagerDisplayOpenedCallback ::
    DisplayManagerDisplayOpenedCallback ->
    Ptr () ->
    Ptr Gdk.Display.Display ->
    Ptr () ->
    IO ()
wrap_DisplayManagerDisplayOpenedCallback _cb _ display _ = do
    display' <- (newObject Gdk.Display.Display) display
    _cb  display'


onDisplayManagerDisplayOpened :: (GObject a, MonadIO m) => a -> DisplayManagerDisplayOpenedCallback -> m SignalHandlerId
onDisplayManagerDisplayOpened obj cb = liftIO $ connectDisplayManagerDisplayOpened obj cb SignalConnectBefore
afterDisplayManagerDisplayOpened :: (GObject a, MonadIO m) => a -> DisplayManagerDisplayOpenedCallback -> m SignalHandlerId
afterDisplayManagerDisplayOpened obj cb = connectDisplayManagerDisplayOpened obj cb SignalConnectAfter

connectDisplayManagerDisplayOpened :: (GObject a, MonadIO m) =>
                                      a -> DisplayManagerDisplayOpenedCallback -> SignalConnectMode -> m SignalHandlerId
connectDisplayManagerDisplayOpened obj cb after = liftIO $ do
    let cb' = wrap_DisplayManagerDisplayOpenedCallback cb
    cb'' <- mk_DisplayManagerDisplayOpenedCallback cb'
    connectSignalFunPtr obj "display-opened" cb'' after

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

getDisplayManagerDefaultDisplay :: (MonadIO m, IsDisplayManager o) => o -> m (Maybe Gdk.Display.Display)
getDisplayManagerDefaultDisplay obj = liftIO $ getObjectPropertyObject obj "default-display" Gdk.Display.Display

setDisplayManagerDefaultDisplay :: (MonadIO m, IsDisplayManager o, Gdk.Display.IsDisplay a) => o -> a -> m ()
setDisplayManagerDefaultDisplay obj val = liftIO $ setObjectPropertyObject obj "default-display" (Just val)

constructDisplayManagerDefaultDisplay :: (IsDisplayManager o, Gdk.Display.IsDisplay a) => a -> IO (GValueConstruct o)
constructDisplayManagerDefaultDisplay val = constructObjectPropertyObject "default-display" (Just val)

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

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

displayManagerDefaultDisplay :: AttrLabelProxy "defaultDisplay"
displayManagerDefaultDisplay = AttrLabelProxy

data DisplayManagerDisplayOpenedSignalInfo
instance SignalInfo DisplayManagerDisplayOpenedSignalInfo where
    type HaskellCallbackType DisplayManagerDisplayOpenedSignalInfo = DisplayManagerDisplayOpenedCallback
    connectSignal _ = connectDisplayManagerDisplayOpened

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

-- 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

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

-- 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''

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

-- 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

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

-- 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 ()

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

-- 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'