module Graphics.XHB.Gen.Xevie
       (extension, queryVersion, start, end, send, selectInput,
        module Graphics.XHB.Gen.Xevie.Types)
       where
import Graphics.XHB.Gen.Xevie.Types
import Graphics.XHB.Connection.Internal
import Graphics.XHB.Connection.Extension
import Graphics.XHB.Connection.Types
import Control.Concurrent.STM
import Foreign.C.Types
import Data.Binary.Put (runPut)
import Graphics.XHB.Shared hiding (Event(..), Error(..))
 
extension :: ExtensionId
extension = "XEVIE"
 
queryVersion ::
               Graphics.XHB.Connection.Types.Connection ->
                 CARD16 -> CARD16 -> IO (Receipt QueryVersionReply)
queryVersion c client_major_version client_minor_version
  = do receipt <- newEmptyReceiptIO
       let req = MkQueryVersion client_major_version client_minor_version
       putAction <- serializeExtensionRequest c req
       let chunk = runPut putAction
       sendRequestWithReply c chunk receipt
       return receipt
 
start ::
        Graphics.XHB.Connection.Types.Connection ->
          CARD32 -> IO (Receipt StartReply)
start c screen
  = do receipt <- newEmptyReceiptIO
       let req = MkStart screen
       putAction <- serializeExtensionRequest c req
       let chunk = runPut putAction
       sendRequestWithReply c chunk receipt
       return receipt
 
end ::
      Graphics.XHB.Connection.Types.Connection ->
        CARD32 -> IO (Receipt EndReply)
end c cmap
  = do receipt <- newEmptyReceiptIO
       let req = MkEnd cmap
       putAction <- serializeExtensionRequest c req
       let chunk = runPut putAction
       sendRequestWithReply c chunk receipt
       return receipt
 
send ::
       Graphics.XHB.Connection.Types.Connection ->
         Event -> CARD32 -> IO (Receipt SendReply)
send c event data_type
  = do receipt <- newEmptyReceiptIO
       let req = MkSend event data_type
       putAction <- serializeExtensionRequest c req
       let chunk = runPut putAction
       sendRequestWithReply c chunk receipt
       return receipt
 
selectInput ::
              Graphics.XHB.Connection.Types.Connection ->
                CARD32 -> IO (Receipt SelectInputReply)
selectInput c event_mask
  = do receipt <- newEmptyReceiptIO
       let req = MkSelectInput event_mask
       putAction <- serializeExtensionRequest c req
       let chunk = runPut putAction
       sendRequestWithReply c chunk receipt
       return receipt