-- GENERATED by C->Haskell Compiler, version 0.28.6 Switcheroo, 25 November 2017 (Haskell)
-- Edit the ORIGNAL .chs file instead!


{-# LINE 1 "src/Graphics/UI/FLTK/LowLevel/X.chs" #-}
{-# LANGUAGE CPP, FlexibleContexts #-}

module Graphics.UI.FLTK.LowLevel.X (flcOpenDisplay, flcXid, openCallback) where
import qualified Foreign.C.Types as C2HSImp
import qualified Foreign.Ptr as C2HSImp


import Graphics.UI.FLTK.LowLevel.Fl_Types
import Graphics.UI.FLTK.LowLevel.Hierarchy
import Graphics.UI.FLTK.LowLevel.Dispatch
import Graphics.UI.FLTK.LowLevel.Utils
import Foreign.Ptr



flcOpenDisplay :: IO ()
flcOpenDisplay =
  flcOpenDisplay'_ >>
  return ()

{-# LINE 12 "src/Graphics/UI/FLTK/LowLevel/X.chs" #-}


flcXid' :: (Ptr ()) -> IO ((Ptr ()))
flcXid' a1 =
  let {a1' = id a1} in 
  flcXid''_ a1' >>= \res ->
  let {res' = id res} in
  return (res')

{-# LINE 14 "src/Graphics/UI/FLTK/LowLevel/X.chs" #-}

flcXid :: (Parent a WindowBase) => Ref a -> IO (Maybe WindowHandle)
flcXid win =
  withRef
    win
    (
      \winPtr -> do
         res <- flcXid' winPtr
         if (res == nullPtr)
         then return Nothing
         else return (Just (WindowHandle res))
    )

openCallback' :: (FunPtr OpenCallbackPrim) -> IO ()
openCallback' :: FunPtr OpenCallbackPrim -> IO ()
openCallback' a1 :: FunPtr OpenCallbackPrim
a1 =
  let {a1' :: FunPtr OpenCallbackPrim
a1' = FunPtr OpenCallbackPrim -> FunPtr OpenCallbackPrim
forall a. a -> a
id FunPtr OpenCallbackPrim
a1} in 
  openCallback''_ a1' >>
  return ()

{-# LINE 27 "src/Graphics/UI/FLTK/LowLevel/X.chs" #-}


openCallback :: Maybe OpenCallback -> IO (Maybe (FunPtr OpenCallbackPrim))
openCallback Nothing   = openCallback' nullFunPtr >> return Nothing
openCallback (Just cb) = do
  ptr <- mkOpenCallbackPtr $ \cstr -> do
    txt <- cStringToText cstr
    cb txt
  openCallback' ptr
  return (Just ptr)

foreign import ccall safe "Graphics/UI/FLTK/LowLevel/X.chs.h flc_open_display"
  flcOpenDisplay'_ :: (IO ())

foreign import ccall safe "Graphics/UI/FLTK/LowLevel/X.chs.h flc_xid"
  flcXid''_ :: ((C2HSImp.Ptr ()) -> (IO (C2HSImp.Ptr ())))

foreign import ccall safe "Graphics/UI/FLTK/LowLevel/X.chs.h flc_open_callback"
  openCallback''_ :: ((C2HSImp.FunPtr ((C2HSImp.Ptr C2HSImp.CChar) -> (IO ()))) -> (IO ()))