module Graphics.XHB.Gen.Input
       (extension, getExtensionVersion, listInputDevices, openDevice,
        closeDevice, setDeviceMode, selectExtensionEvent,
        getSelectedExtensionEvents, changeDeviceDontPropagateList,
        getDeviceDontPropagateList, getDeviceMotionEvents,
        changeKeyboardDevice, changePointerDevice, grabDevice,
        ungrabDevice, grabDeviceKey, ungrabDeviceKey, grabDeviceButton,
        ungrabDeviceButton, allowDeviceEvents, getDeviceFocus,
        setDeviceFocus, getFeedbackControl, getDeviceKeyMapping,
        changeDeviceKeyMapping, getDeviceModifierMapping,
        setDeviceModifierMapping, getDeviceButtonMapping,
        setDeviceButtonMapping, queryDeviceState, sendExtensionEvent,
        deviceBell, setDeviceValuators, getDeviceControl,
        module Graphics.XHB.Gen.Input.Types)
       where
import Graphics.XHB.Gen.Input.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(..))
import Graphics.XHB.Gen.Xproto.Types
       hiding (FocusIn(..), FocusOut(..), deserializeError,
               deserializeEvent)
import qualified Graphics.XHB.Gen.Xproto.Types
 
extension :: ExtensionId
extension = "XInputExtension"
 
getExtensionVersion ::
                      Graphics.XHB.Connection.Types.Connection ->
                        CARD16 -> [CChar] -> IO (Receipt GetExtensionVersionReply)
getExtensionVersion c name_len name
  = do receipt <- newEmptyReceiptIO
       let req = MkGetExtensionVersion name_len name
       putAction <- serializeExtensionRequest c req
       let chunk = runPut putAction
       sendRequestWithReply c chunk receipt
       return receipt
 
listInputDevices ::
                   Graphics.XHB.Connection.Types.Connection ->
                     IO (Receipt ListInputDevicesReply)
listInputDevices c
  = do receipt <- newEmptyReceiptIO
       let req = MkListInputDevices
       putAction <- serializeExtensionRequest c req
       let chunk = runPut putAction
       sendRequestWithReply c chunk receipt
       return receipt
 
openDevice ::
             Graphics.XHB.Connection.Types.Connection ->
               CARD8 -> IO (Receipt OpenDeviceReply)
openDevice c device_id
  = do receipt <- newEmptyReceiptIO
       let req = MkOpenDevice device_id
       putAction <- serializeExtensionRequest c req
       let chunk = runPut putAction
       sendRequestWithReply c chunk receipt
       return receipt
 
closeDevice ::
              Graphics.XHB.Connection.Types.Connection -> CARD8 -> IO ()
closeDevice c device_id
  = do let req = MkCloseDevice device_id
       putAction <- serializeExtensionRequest c req
       let chunk = runPut putAction
       sendRequest c chunk
 
setDeviceMode ::
                Graphics.XHB.Connection.Types.Connection ->
                  CARD8 -> CARD8 -> IO (Receipt SetDeviceModeReply)
setDeviceMode c device_id mode
  = do receipt <- newEmptyReceiptIO
       let req = MkSetDeviceMode device_id mode
       putAction <- serializeExtensionRequest c req
       let chunk = runPut putAction
       sendRequestWithReply c chunk receipt
       return receipt
 
selectExtensionEvent ::
                       Graphics.XHB.Connection.Types.Connection ->
                         SelectExtensionEvent -> IO ()
selectExtensionEvent c req
  = do putAction <- serializeExtensionRequest c req
       let chunk = runPut putAction
       sendRequest c chunk
 
getSelectedExtensionEvents ::
                             Graphics.XHB.Connection.Types.Connection ->
                               WINDOW -> IO (Receipt GetSelectedExtensionEventsReply)
getSelectedExtensionEvents c window
  = do receipt <- newEmptyReceiptIO
       let req = MkGetSelectedExtensionEvents window
       putAction <- serializeExtensionRequest c req
       let chunk = runPut putAction
       sendRequestWithReply c chunk receipt
       return receipt
 
changeDeviceDontPropagateList ::
                                Graphics.XHB.Connection.Types.Connection ->
                                  ChangeDeviceDontPropagateList -> IO ()
changeDeviceDontPropagateList c req
  = do putAction <- serializeExtensionRequest c req
       let chunk = runPut putAction
       sendRequest c chunk
 
getDeviceDontPropagateList ::
                             Graphics.XHB.Connection.Types.Connection ->
                               WINDOW -> IO (Receipt GetDeviceDontPropagateListReply)
getDeviceDontPropagateList c window
  = do receipt <- newEmptyReceiptIO
       let req = MkGetDeviceDontPropagateList window
       putAction <- serializeExtensionRequest c req
       let chunk = runPut putAction
       sendRequestWithReply c chunk receipt
       return receipt
 
getDeviceMotionEvents ::
                        Graphics.XHB.Connection.Types.Connection ->
                          GetDeviceMotionEvents -> IO (Receipt GetDeviceMotionEventsReply)
getDeviceMotionEvents c req
  = do receipt <- newEmptyReceiptIO
       putAction <- serializeExtensionRequest c req
       let chunk = runPut putAction
       sendRequestWithReply c chunk receipt
       return receipt
 
changeKeyboardDevice ::
                       Graphics.XHB.Connection.Types.Connection ->
                         CARD8 -> IO (Receipt ChangeKeyboardDeviceReply)
changeKeyboardDevice c device_id
  = do receipt <- newEmptyReceiptIO
       let req = MkChangeKeyboardDevice device_id
       putAction <- serializeExtensionRequest c req
       let chunk = runPut putAction
       sendRequestWithReply c chunk receipt
       return receipt
 
changePointerDevice ::
                      Graphics.XHB.Connection.Types.Connection ->
                        ChangePointerDevice -> IO (Receipt ChangePointerDeviceReply)
changePointerDevice c req
  = do receipt <- newEmptyReceiptIO
       putAction <- serializeExtensionRequest c req
       let chunk = runPut putAction
       sendRequestWithReply c chunk receipt
       return receipt
 
grabDevice ::
             Graphics.XHB.Connection.Types.Connection ->
               GrabDevice -> IO (Receipt GrabDeviceReply)
grabDevice c req
  = do receipt <- newEmptyReceiptIO
       putAction <- serializeExtensionRequest c req
       let chunk = runPut putAction
       sendRequestWithReply c chunk receipt
       return receipt
 
ungrabDevice ::
               Graphics.XHB.Connection.Types.Connection ->
                 TIMESTAMP -> CARD8 -> IO ()
ungrabDevice c time device_id
  = do let req = MkUngrabDevice time device_id
       putAction <- serializeExtensionRequest c req
       let chunk = runPut putAction
       sendRequest c chunk
 
grabDeviceKey ::
                Graphics.XHB.Connection.Types.Connection -> GrabDeviceKey -> IO ()
grabDeviceKey c req
  = do putAction <- serializeExtensionRequest c req
       let chunk = runPut putAction
       sendRequest c chunk
 
ungrabDeviceKey ::
                  Graphics.XHB.Connection.Types.Connection ->
                    UngrabDeviceKey -> IO ()
ungrabDeviceKey c req
  = do putAction <- serializeExtensionRequest c req
       let chunk = runPut putAction
       sendRequest c chunk
 
grabDeviceButton ::
                   Graphics.XHB.Connection.Types.Connection ->
                     GrabDeviceButton -> IO ()
grabDeviceButton c req
  = do putAction <- serializeExtensionRequest c req
       let chunk = runPut putAction
       sendRequest c chunk
 
ungrabDeviceButton ::
                     Graphics.XHB.Connection.Types.Connection ->
                       UngrabDeviceButton -> IO ()
ungrabDeviceButton c req
  = do putAction <- serializeExtensionRequest c req
       let chunk = runPut putAction
       sendRequest c chunk
 
allowDeviceEvents ::
                    Graphics.XHB.Connection.Types.Connection ->
                      AllowDeviceEvents -> IO ()
allowDeviceEvents c req
  = do putAction <- serializeExtensionRequest c req
       let chunk = runPut putAction
       sendRequest c chunk
 
getDeviceFocus ::
                 Graphics.XHB.Connection.Types.Connection ->
                   CARD8 -> IO (Receipt GetDeviceFocusReply)
getDeviceFocus c device_id
  = do receipt <- newEmptyReceiptIO
       let req = MkGetDeviceFocus device_id
       putAction <- serializeExtensionRequest c req
       let chunk = runPut putAction
       sendRequestWithReply c chunk receipt
       return receipt
 
setDeviceFocus ::
                 Graphics.XHB.Connection.Types.Connection -> SetDeviceFocus -> IO ()
setDeviceFocus c req
  = do putAction <- serializeExtensionRequest c req
       let chunk = runPut putAction
       sendRequest c chunk
 
getFeedbackControl ::
                     Graphics.XHB.Connection.Types.Connection ->
                       CARD8 -> IO (Receipt GetFeedbackControlReply)
getFeedbackControl c device_id
  = do receipt <- newEmptyReceiptIO
       let req = MkGetFeedbackControl device_id
       putAction <- serializeExtensionRequest c req
       let chunk = runPut putAction
       sendRequestWithReply c chunk receipt
       return receipt
 
getDeviceKeyMapping ::
                      Graphics.XHB.Connection.Types.Connection ->
                        GetDeviceKeyMapping -> IO (Receipt GetDeviceKeyMappingReply)
getDeviceKeyMapping c req
  = do receipt <- newEmptyReceiptIO
       putAction <- serializeExtensionRequest c req
       let chunk = runPut putAction
       sendRequestWithReply c chunk receipt
       return receipt
 
changeDeviceKeyMapping ::
                         Graphics.XHB.Connection.Types.Connection ->
                           ChangeDeviceKeyMapping -> IO ()
changeDeviceKeyMapping c req
  = do putAction <- serializeExtensionRequest c req
       let chunk = runPut putAction
       sendRequest c chunk
 
getDeviceModifierMapping ::
                           Graphics.XHB.Connection.Types.Connection ->
                             CARD8 -> IO (Receipt GetDeviceModifierMappingReply)
getDeviceModifierMapping c device_id
  = do receipt <- newEmptyReceiptIO
       let req = MkGetDeviceModifierMapping device_id
       putAction <- serializeExtensionRequest c req
       let chunk = runPut putAction
       sendRequestWithReply c chunk receipt
       return receipt
 
setDeviceModifierMapping ::
                           Graphics.XHB.Connection.Types.Connection ->
                             SetDeviceModifierMapping ->
                               IO (Receipt SetDeviceModifierMappingReply)
setDeviceModifierMapping c req
  = do receipt <- newEmptyReceiptIO
       putAction <- serializeExtensionRequest c req
       let chunk = runPut putAction
       sendRequestWithReply c chunk receipt
       return receipt
 
getDeviceButtonMapping ::
                         Graphics.XHB.Connection.Types.Connection ->
                           CARD8 -> IO (Receipt GetDeviceButtonMappingReply)
getDeviceButtonMapping c device_id
  = do receipt <- newEmptyReceiptIO
       let req = MkGetDeviceButtonMapping device_id
       putAction <- serializeExtensionRequest c req
       let chunk = runPut putAction
       sendRequestWithReply c chunk receipt
       return receipt
 
setDeviceButtonMapping ::
                         Graphics.XHB.Connection.Types.Connection ->
                           SetDeviceButtonMapping -> IO (Receipt SetDeviceButtonMappingReply)
setDeviceButtonMapping c req
  = do receipt <- newEmptyReceiptIO
       putAction <- serializeExtensionRequest c req
       let chunk = runPut putAction
       sendRequestWithReply c chunk receipt
       return receipt
 
queryDeviceState ::
                   Graphics.XHB.Connection.Types.Connection ->
                     CARD8 -> IO (Receipt QueryDeviceStateReply)
queryDeviceState c device_id
  = do receipt <- newEmptyReceiptIO
       let req = MkQueryDeviceState device_id
       putAction <- serializeExtensionRequest c req
       let chunk = runPut putAction
       sendRequestWithReply c chunk receipt
       return receipt
 
sendExtensionEvent ::
                     Graphics.XHB.Connection.Types.Connection ->
                       SendExtensionEvent -> IO ()
sendExtensionEvent c req
  = do putAction <- serializeExtensionRequest c req
       let chunk = runPut putAction
       sendRequest c chunk
 
deviceBell ::
             Graphics.XHB.Connection.Types.Connection -> DeviceBell -> IO ()
deviceBell c req
  = do putAction <- serializeExtensionRequest c req
       let chunk = runPut putAction
       sendRequest c chunk
 
setDeviceValuators ::
                     Graphics.XHB.Connection.Types.Connection ->
                       SetDeviceValuators -> IO (Receipt SetDeviceValuatorsReply)
setDeviceValuators c req
  = do receipt <- newEmptyReceiptIO
       putAction <- serializeExtensionRequest c req
       let chunk = runPut putAction
       sendRequestWithReply c chunk receipt
       return receipt
 
getDeviceControl ::
                   Graphics.XHB.Connection.Types.Connection ->
                     CARD16 -> CARD8 -> IO (Receipt GetDeviceControlReply)
getDeviceControl c control_id device_id
  = do receipt <- newEmptyReceiptIO
       let req = MkGetDeviceControl control_id device_id
       putAction <- serializeExtensionRequest c req
       let chunk = runPut putAction
       sendRequestWithReply c chunk receipt
       return receipt