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

module GI.Gdk.Unions.Event
    ( 

-- * Exported types
    Event(..)                               ,
    noEvent                                 ,


 -- * Methods
-- ** eventCopy
    eventCopy                               ,


-- ** eventFree
    eventFree                               ,


-- ** eventGetAxis
    eventGetAxis                            ,


-- ** eventGetButton
    eventGetButton                          ,


-- ** eventGetClickCount
    eventGetClickCount                      ,


-- ** eventGetCoords
    eventGetCoords                          ,


-- ** eventGetDevice
    eventGetDevice                          ,


-- ** eventGetEventSequence
    eventGetEventSequence                   ,


-- ** eventGetEventType
    eventGetEventType                       ,


-- ** eventGetKeycode
    eventGetKeycode                         ,


-- ** eventGetKeyval
    eventGetKeyval                          ,


-- ** eventGetRootCoords
    eventGetRootCoords                      ,


-- ** eventGetScreen
    eventGetScreen                          ,


-- ** eventGetScrollDeltas
    eventGetScrollDeltas                    ,


-- ** eventGetScrollDirection
    eventGetScrollDirection                 ,


-- ** eventGetSourceDevice
    eventGetSourceDevice                    ,


-- ** eventGetState
    eventGetState                           ,


-- ** eventGetTime
    eventGetTime                            ,


-- ** eventGetWindow
    eventGetWindow                          ,


-- ** eventNew
    eventNew                                ,


-- ** eventPut
    eventPut                                ,


-- ** eventSetDevice
    eventSetDevice                          ,


-- ** eventSetScreen
    eventSetScreen                          ,


-- ** eventSetSourceDevice
    eventSetSourceDevice                    ,


-- ** eventTriggersContextMenu
    eventTriggersContextMenu                ,




 -- * Properties
-- ** Any
    eventReadAny                            ,


-- ** Button
    eventReadButton                         ,


-- ** Configure
    eventReadConfigure                      ,


-- ** Crossing
    eventReadCrossing                       ,


-- ** Dnd
    eventReadDnd                            ,


-- ** Expose
    eventReadExpose                         ,


-- ** FocusChange
    eventReadFocusChange                    ,


-- ** GrabBroken
    eventReadGrabBroken                     ,


-- ** Key
    eventReadKey                            ,


-- ** Motion
    eventReadMotion                         ,


-- ** OwnerChange
    eventReadOwnerChange                    ,


-- ** Property
    eventReadProperty                       ,


-- ** Proximity
    eventReadProximity                      ,


-- ** Scroll
    eventReadScroll                         ,


-- ** Selection
    eventReadSelection                      ,


-- ** Setting
    eventReadSetting                        ,


-- ** Touch
    eventReadTouch                          ,


-- ** TouchpadPinch
    eventReadTouchpadPinch                  ,


-- ** TouchpadSwipe
    eventReadTouchpadSwipe                  ,


-- ** Type
    eventReadType                           ,


-- ** Visibility
    eventReadVisibility                     ,


-- ** WindowState
    eventReadWindowState                    ,




    ) where

import Prelude ()
import Data.GI.Base.ShortPrelude

import qualified Data.Text as T
import qualified Data.ByteString.Char8 as B
import qualified Data.Map as Map

import GI.Gdk.Types
import GI.Gdk.Callbacks

newtype Event = Event (ForeignPtr Event)
foreign import ccall "gdk_event_get_type" c_gdk_event_get_type :: 
    IO GType

instance BoxedObject Event where
    boxedType _ = c_gdk_event_get_type

noEvent :: Maybe Event
noEvent = Nothing

eventReadType :: Event -> IO EventType
eventReadType s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO CUInt
    let val' = (toEnum . fromIntegral) val
    return val'

eventReadAny :: Event -> IO EventAny
eventReadAny s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO (Ptr EventAny)
    val' <- (newPtr 24 EventAny) val
    return val'

eventReadExpose :: Event -> IO EventExpose
eventReadExpose s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO (Ptr EventExpose)
    val' <- (newPtr 56 EventExpose) val
    return val'

eventReadVisibility :: Event -> IO EventVisibility
eventReadVisibility s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO (Ptr EventVisibility)
    val' <- (newPtr 24 EventVisibility) val
    return val'

eventReadMotion :: Event -> IO EventMotion
eventReadMotion s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO (Ptr EventMotion)
    val' <- (newPtr 80 EventMotion) val
    return val'

eventReadButton :: Event -> IO EventButton
eventReadButton s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO (Ptr EventButton)
    val' <- (newPtr 80 EventButton) val
    return val'

eventReadTouch :: Event -> IO EventTouch
eventReadTouch s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO (Ptr EventTouch)
    val' <- (newPtr 96 EventTouch) val
    return val'

eventReadScroll :: Event -> IO EventScroll
eventReadScroll s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO (Ptr EventScroll)
    val' <- (newPtr 88 EventScroll) val
    return val'

eventReadKey :: Event -> IO EventKey
eventReadKey s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO (Ptr EventKey)
    val' <- (newPtr 56 EventKey) val
    return val'

eventReadCrossing :: Event -> IO EventCrossing
eventReadCrossing s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO (Ptr EventCrossing)
    val' <- (newPtr 88 EventCrossing) val
    return val'

eventReadFocusChange :: Event -> IO EventFocus
eventReadFocusChange s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO (Ptr EventFocus)
    val' <- (newPtr 24 EventFocus) val
    return val'

eventReadConfigure :: Event -> IO EventConfigure
eventReadConfigure s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO (Ptr EventConfigure)
    val' <- (newPtr 40 EventConfigure) val
    return val'

eventReadProperty :: Event -> IO EventProperty
eventReadProperty s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO (Ptr EventProperty)
    val' <- (newPtr 40 EventProperty) val
    return val'

eventReadSelection :: Event -> IO EventSelection
eventReadSelection s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO (Ptr EventSelection)
    val' <- (newPtr 64 EventSelection) val
    return val'

eventReadOwnerChange :: Event -> IO EventOwnerChange
eventReadOwnerChange s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO (Ptr EventOwnerChange)
    val' <- (newPtr 56 EventOwnerChange) val
    return val'

eventReadProximity :: Event -> IO EventProximity
eventReadProximity s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO (Ptr EventProximity)
    val' <- (newPtr 32 EventProximity) val
    return val'

eventReadDnd :: Event -> IO EventDND
eventReadDnd s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO (Ptr EventDND)
    val' <- (newPtr 40 EventDND) val
    return val'

eventReadWindowState :: Event -> IO EventWindowState
eventReadWindowState s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO (Ptr EventWindowState)
    val' <- (newPtr 32 EventWindowState) val
    return val'

eventReadSetting :: Event -> IO EventSetting
eventReadSetting s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO (Ptr EventSetting)
    val' <- (newPtr 32 EventSetting) val
    return val'

eventReadGrabBroken :: Event -> IO EventGrabBroken
eventReadGrabBroken s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO (Ptr EventGrabBroken)
    val' <- (newPtr 40 EventGrabBroken) val
    return val'

eventReadTouchpadSwipe :: Event -> IO EventTouchpadSwipe
eventReadTouchpadSwipe s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO (Ptr EventTouchpadSwipe)
    val' <- (newPtr 88 EventTouchpadSwipe) val
    return val'

eventReadTouchpadPinch :: Event -> IO EventTouchpadPinch
eventReadTouchpadPinch s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO (Ptr EventTouchpadPinch)
    val' <- (newPtr 104 EventTouchpadPinch) val
    return val'

-- method Event::new
-- method type : Constructor
-- Args : [Arg {argName = "type", argType = TInterface "Gdk" "EventType", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "type", argType = TInterface "Gdk" "EventType", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TInterface "Gdk" "Event"
-- throws : False
-- Skip return : False

foreign import ccall "gdk_event_new" gdk_event_new :: 
    CUInt ->                                -- type : TInterface "Gdk" "EventType"
    IO (Ptr Event)


eventNew ::
    (MonadIO m) =>
    EventType ->                            -- type
    m Event
eventNew type_ = liftIO $ do
    let type_' = (fromIntegral . fromEnum) type_
    result <- gdk_event_new type_'
    checkUnexpectedReturnNULL "gdk_event_new" result
    result' <- (wrapBoxed Event) result
    return result'

-- method Event::copy
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gdk" "Event", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gdk" "Event", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TInterface "Gdk" "Event"
-- throws : False
-- Skip return : False

foreign import ccall "gdk_event_copy" gdk_event_copy :: 
    Ptr Event ->                            -- _obj : TInterface "Gdk" "Event"
    IO (Ptr Event)


eventCopy ::
    (MonadIO m) =>
    Event ->                                -- _obj
    m Event
eventCopy _obj = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    result <- gdk_event_copy _obj'
    checkUnexpectedReturnNULL "gdk_event_copy" result
    result' <- (wrapBoxed Event) result
    touchManagedPtr _obj
    return result'

-- method Event::free
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gdk" "Event", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gdk" "Event", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gdk_event_free" gdk_event_free :: 
    Ptr Event ->                            -- _obj : TInterface "Gdk" "Event"
    IO ()


eventFree ::
    (MonadIO m) =>
    Event ->                                -- _obj
    m ()
eventFree _obj = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    gdk_event_free _obj'
    touchManagedPtr _obj
    return ()

-- method Event::get_axis
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gdk" "Event", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "axis_use", argType = TInterface "Gdk" "AxisUse", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "value", argType = TBasicType TDouble, direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferEverything}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gdk" "Event", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "axis_use", argType = TInterface "Gdk" "AxisUse", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TBoolean
-- throws : False
-- Skip return : False

foreign import ccall "gdk_event_get_axis" gdk_event_get_axis :: 
    Ptr Event ->                            -- _obj : TInterface "Gdk" "Event"
    CUInt ->                                -- axis_use : TInterface "Gdk" "AxisUse"
    Ptr CDouble ->                          -- value : TBasicType TDouble
    IO CInt


eventGetAxis ::
    (MonadIO m) =>
    Event ->                                -- _obj
    AxisUse ->                              -- axis_use
    m (Bool,Double)
eventGetAxis _obj axis_use = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    let axis_use' = (fromIntegral . fromEnum) axis_use
    value <- allocMem :: IO (Ptr CDouble)
    result <- gdk_event_get_axis _obj' axis_use' value
    let result' = (/= 0) result
    value' <- peek value
    let value'' = realToFrac value'
    touchManagedPtr _obj
    freeMem value
    return (result', value'')

-- method Event::get_button
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gdk" "Event", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "button", argType = TBasicType TUInt32, direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferEverything}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gdk" "Event", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TBoolean
-- throws : False
-- Skip return : False

foreign import ccall "gdk_event_get_button" gdk_event_get_button :: 
    Ptr Event ->                            -- _obj : TInterface "Gdk" "Event"
    Ptr Word32 ->                           -- button : TBasicType TUInt32
    IO CInt


eventGetButton ::
    (MonadIO m) =>
    Event ->                                -- _obj
    m (Bool,Word32)
eventGetButton _obj = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    button <- allocMem :: IO (Ptr Word32)
    result <- gdk_event_get_button _obj' button
    let result' = (/= 0) result
    button' <- peek button
    touchManagedPtr _obj
    freeMem button
    return (result', button')

-- method Event::get_click_count
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gdk" "Event", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "click_count", argType = TBasicType TUInt32, direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferEverything}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gdk" "Event", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TBoolean
-- throws : False
-- Skip return : False

foreign import ccall "gdk_event_get_click_count" gdk_event_get_click_count :: 
    Ptr Event ->                            -- _obj : TInterface "Gdk" "Event"
    Ptr Word32 ->                           -- click_count : TBasicType TUInt32
    IO CInt


eventGetClickCount ::
    (MonadIO m) =>
    Event ->                                -- _obj
    m (Bool,Word32)
eventGetClickCount _obj = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    click_count <- allocMem :: IO (Ptr Word32)
    result <- gdk_event_get_click_count _obj' click_count
    let result' = (/= 0) result
    click_count' <- peek click_count
    touchManagedPtr _obj
    freeMem click_count
    return (result', click_count')

-- method Event::get_coords
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gdk" "Event", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "x_win", argType = TBasicType TDouble, direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferEverything},Arg {argName = "y_win", argType = TBasicType TDouble, direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferEverything}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gdk" "Event", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TBoolean
-- throws : False
-- Skip return : False

foreign import ccall "gdk_event_get_coords" gdk_event_get_coords :: 
    Ptr Event ->                            -- _obj : TInterface "Gdk" "Event"
    Ptr CDouble ->                          -- x_win : TBasicType TDouble
    Ptr CDouble ->                          -- y_win : TBasicType TDouble
    IO CInt


eventGetCoords ::
    (MonadIO m) =>
    Event ->                                -- _obj
    m (Bool,Double,Double)
eventGetCoords _obj = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    x_win <- allocMem :: IO (Ptr CDouble)
    y_win <- allocMem :: IO (Ptr CDouble)
    result <- gdk_event_get_coords _obj' x_win y_win
    let result' = (/= 0) result
    x_win' <- peek x_win
    let x_win'' = realToFrac x_win'
    y_win' <- peek y_win
    let y_win'' = realToFrac y_win'
    touchManagedPtr _obj
    freeMem x_win
    freeMem y_win
    return (result', x_win'', y_win'')

-- method Event::get_device
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gdk" "Event", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gdk" "Event", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TInterface "Gdk" "Device"
-- throws : False
-- Skip return : False

foreign import ccall "gdk_event_get_device" gdk_event_get_device :: 
    Ptr Event ->                            -- _obj : TInterface "Gdk" "Event"
    IO (Ptr Device)


eventGetDevice ::
    (MonadIO m) =>
    Event ->                                -- _obj
    m Device
eventGetDevice _obj = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    result <- gdk_event_get_device _obj'
    checkUnexpectedReturnNULL "gdk_event_get_device" result
    result' <- (newObject Device) result
    touchManagedPtr _obj
    return result'

-- method Event::get_event_sequence
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gdk" "Event", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gdk" "Event", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TInterface "Gdk" "EventSequence"
-- throws : False
-- Skip return : False

foreign import ccall "gdk_event_get_event_sequence" gdk_event_get_event_sequence :: 
    Ptr Event ->                            -- _obj : TInterface "Gdk" "Event"
    IO (Ptr EventSequence)


eventGetEventSequence ::
    (MonadIO m) =>
    Event ->                                -- _obj
    m EventSequence
eventGetEventSequence _obj = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    result <- gdk_event_get_event_sequence _obj'
    checkUnexpectedReturnNULL "gdk_event_get_event_sequence" result
    result' <- (newBoxed EventSequence) result
    touchManagedPtr _obj
    return result'

-- method Event::get_event_type
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gdk" "Event", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gdk" "Event", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TInterface "Gdk" "EventType"
-- throws : False
-- Skip return : False

foreign import ccall "gdk_event_get_event_type" gdk_event_get_event_type :: 
    Ptr Event ->                            -- _obj : TInterface "Gdk" "Event"
    IO CUInt


eventGetEventType ::
    (MonadIO m) =>
    Event ->                                -- _obj
    m EventType
eventGetEventType _obj = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    result <- gdk_event_get_event_type _obj'
    let result' = (toEnum . fromIntegral) result
    touchManagedPtr _obj
    return result'

-- method Event::get_keycode
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gdk" "Event", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "keycode", argType = TBasicType TUInt16, direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferEverything}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gdk" "Event", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TBoolean
-- throws : False
-- Skip return : False

foreign import ccall "gdk_event_get_keycode" gdk_event_get_keycode :: 
    Ptr Event ->                            -- _obj : TInterface "Gdk" "Event"
    Ptr Word16 ->                           -- keycode : TBasicType TUInt16
    IO CInt


eventGetKeycode ::
    (MonadIO m) =>
    Event ->                                -- _obj
    m (Bool,Word16)
eventGetKeycode _obj = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    keycode <- allocMem :: IO (Ptr Word16)
    result <- gdk_event_get_keycode _obj' keycode
    let result' = (/= 0) result
    keycode' <- peek keycode
    touchManagedPtr _obj
    freeMem keycode
    return (result', keycode')

-- method Event::get_keyval
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gdk" "Event", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "keyval", argType = TBasicType TUInt32, direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferEverything}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gdk" "Event", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TBoolean
-- throws : False
-- Skip return : False

foreign import ccall "gdk_event_get_keyval" gdk_event_get_keyval :: 
    Ptr Event ->                            -- _obj : TInterface "Gdk" "Event"
    Ptr Word32 ->                           -- keyval : TBasicType TUInt32
    IO CInt


eventGetKeyval ::
    (MonadIO m) =>
    Event ->                                -- _obj
    m (Bool,Word32)
eventGetKeyval _obj = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    keyval <- allocMem :: IO (Ptr Word32)
    result <- gdk_event_get_keyval _obj' keyval
    let result' = (/= 0) result
    keyval' <- peek keyval
    touchManagedPtr _obj
    freeMem keyval
    return (result', keyval')

-- method Event::get_root_coords
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gdk" "Event", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "x_root", argType = TBasicType TDouble, direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferEverything},Arg {argName = "y_root", argType = TBasicType TDouble, direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferEverything}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gdk" "Event", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TBoolean
-- throws : False
-- Skip return : False

foreign import ccall "gdk_event_get_root_coords" gdk_event_get_root_coords :: 
    Ptr Event ->                            -- _obj : TInterface "Gdk" "Event"
    Ptr CDouble ->                          -- x_root : TBasicType TDouble
    Ptr CDouble ->                          -- y_root : TBasicType TDouble
    IO CInt


eventGetRootCoords ::
    (MonadIO m) =>
    Event ->                                -- _obj
    m (Bool,Double,Double)
eventGetRootCoords _obj = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    x_root <- allocMem :: IO (Ptr CDouble)
    y_root <- allocMem :: IO (Ptr CDouble)
    result <- gdk_event_get_root_coords _obj' x_root y_root
    let result' = (/= 0) result
    x_root' <- peek x_root
    let x_root'' = realToFrac x_root'
    y_root' <- peek y_root
    let y_root'' = realToFrac y_root'
    touchManagedPtr _obj
    freeMem x_root
    freeMem y_root
    return (result', x_root'', y_root'')

-- method Event::get_screen
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gdk" "Event", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gdk" "Event", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TInterface "Gdk" "Screen"
-- throws : False
-- Skip return : False

foreign import ccall "gdk_event_get_screen" gdk_event_get_screen :: 
    Ptr Event ->                            -- _obj : TInterface "Gdk" "Event"
    IO (Ptr Screen)


eventGetScreen ::
    (MonadIO m) =>
    Event ->                                -- _obj
    m Screen
eventGetScreen _obj = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    result <- gdk_event_get_screen _obj'
    checkUnexpectedReturnNULL "gdk_event_get_screen" result
    result' <- (newObject Screen) result
    touchManagedPtr _obj
    return result'

-- method Event::get_scroll_deltas
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gdk" "Event", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "delta_x", argType = TBasicType TDouble, direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferEverything},Arg {argName = "delta_y", argType = TBasicType TDouble, direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferEverything}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gdk" "Event", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TBoolean
-- throws : False
-- Skip return : False

foreign import ccall "gdk_event_get_scroll_deltas" gdk_event_get_scroll_deltas :: 
    Ptr Event ->                            -- _obj : TInterface "Gdk" "Event"
    Ptr CDouble ->                          -- delta_x : TBasicType TDouble
    Ptr CDouble ->                          -- delta_y : TBasicType TDouble
    IO CInt


eventGetScrollDeltas ::
    (MonadIO m) =>
    Event ->                                -- _obj
    m (Bool,Double,Double)
eventGetScrollDeltas _obj = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    delta_x <- allocMem :: IO (Ptr CDouble)
    delta_y <- allocMem :: IO (Ptr CDouble)
    result <- gdk_event_get_scroll_deltas _obj' delta_x delta_y
    let result' = (/= 0) result
    delta_x' <- peek delta_x
    let delta_x'' = realToFrac delta_x'
    delta_y' <- peek delta_y
    let delta_y'' = realToFrac delta_y'
    touchManagedPtr _obj
    freeMem delta_x
    freeMem delta_y
    return (result', delta_x'', delta_y'')

-- method Event::get_scroll_direction
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gdk" "Event", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "direction", argType = TInterface "Gdk" "ScrollDirection", direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferEverything}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gdk" "Event", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TBoolean
-- throws : False
-- Skip return : False

foreign import ccall "gdk_event_get_scroll_direction" gdk_event_get_scroll_direction :: 
    Ptr Event ->                            -- _obj : TInterface "Gdk" "Event"
    Ptr CUInt ->                            -- direction : TInterface "Gdk" "ScrollDirection"
    IO CInt


eventGetScrollDirection ::
    (MonadIO m) =>
    Event ->                                -- _obj
    m (Bool,ScrollDirection)
eventGetScrollDirection _obj = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    direction <- allocMem :: IO (Ptr CUInt)
    result <- gdk_event_get_scroll_direction _obj' direction
    let result' = (/= 0) result
    direction' <- peek direction
    let direction'' = (toEnum . fromIntegral) direction'
    touchManagedPtr _obj
    freeMem direction
    return (result', direction'')

-- method Event::get_source_device
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gdk" "Event", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gdk" "Event", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TInterface "Gdk" "Device"
-- throws : False
-- Skip return : False

foreign import ccall "gdk_event_get_source_device" gdk_event_get_source_device :: 
    Ptr Event ->                            -- _obj : TInterface "Gdk" "Event"
    IO (Ptr Device)


eventGetSourceDevice ::
    (MonadIO m) =>
    Event ->                                -- _obj
    m Device
eventGetSourceDevice _obj = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    result <- gdk_event_get_source_device _obj'
    checkUnexpectedReturnNULL "gdk_event_get_source_device" result
    result' <- (newObject Device) result
    touchManagedPtr _obj
    return result'

-- method Event::get_state
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gdk" "Event", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "state", argType = TInterface "Gdk" "ModifierType", direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferEverything}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gdk" "Event", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TBoolean
-- throws : False
-- Skip return : False

foreign import ccall "gdk_event_get_state" gdk_event_get_state :: 
    Ptr Event ->                            -- _obj : TInterface "Gdk" "Event"
    Ptr CUInt ->                            -- state : TInterface "Gdk" "ModifierType"
    IO CInt


eventGetState ::
    (MonadIO m) =>
    Event ->                                -- _obj
    m (Bool,[ModifierType])
eventGetState _obj = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    state <- allocMem :: IO (Ptr CUInt)
    result <- gdk_event_get_state _obj' state
    let result' = (/= 0) result
    state' <- peek state
    let state'' = wordToGFlags state'
    touchManagedPtr _obj
    freeMem state
    return (result', state'')

-- method Event::get_time
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gdk" "Event", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gdk" "Event", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TUInt32
-- throws : False
-- Skip return : False

foreign import ccall "gdk_event_get_time" gdk_event_get_time :: 
    Ptr Event ->                            -- _obj : TInterface "Gdk" "Event"
    IO Word32


eventGetTime ::
    (MonadIO m) =>
    Event ->                                -- _obj
    m Word32
eventGetTime _obj = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    result <- gdk_event_get_time _obj'
    touchManagedPtr _obj
    return result

-- method Event::get_window
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gdk" "Event", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gdk" "Event", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TInterface "Gdk" "Window"
-- throws : False
-- Skip return : False

foreign import ccall "gdk_event_get_window" gdk_event_get_window :: 
    Ptr Event ->                            -- _obj : TInterface "Gdk" "Event"
    IO (Ptr Window)


eventGetWindow ::
    (MonadIO m) =>
    Event ->                                -- _obj
    m Window
eventGetWindow _obj = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    result <- gdk_event_get_window _obj'
    checkUnexpectedReturnNULL "gdk_event_get_window" result
    result' <- (newObject Window) result
    touchManagedPtr _obj
    return result'

-- method Event::put
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gdk" "Event", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gdk" "Event", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gdk_event_put" gdk_event_put :: 
    Ptr Event ->                            -- _obj : TInterface "Gdk" "Event"
    IO ()


eventPut ::
    (MonadIO m) =>
    Event ->                                -- _obj
    m ()
eventPut _obj = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    gdk_event_put _obj'
    touchManagedPtr _obj
    return ()

-- method Event::set_device
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gdk" "Event", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "device", argType = TInterface "Gdk" "Device", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gdk" "Event", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "device", argType = TInterface "Gdk" "Device", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gdk_event_set_device" gdk_event_set_device :: 
    Ptr Event ->                            -- _obj : TInterface "Gdk" "Event"
    Ptr Device ->                           -- device : TInterface "Gdk" "Device"
    IO ()


eventSetDevice ::
    (MonadIO m, DeviceK a) =>
    Event ->                                -- _obj
    a ->                                    -- device
    m ()
eventSetDevice _obj device = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    let device' = unsafeManagedPtrCastPtr device
    gdk_event_set_device _obj' device'
    touchManagedPtr _obj
    touchManagedPtr device
    return ()

-- method Event::set_screen
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gdk" "Event", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "screen", argType = TInterface "Gdk" "Screen", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gdk" "Event", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "screen", argType = TInterface "Gdk" "Screen", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gdk_event_set_screen" gdk_event_set_screen :: 
    Ptr Event ->                            -- _obj : TInterface "Gdk" "Event"
    Ptr Screen ->                           -- screen : TInterface "Gdk" "Screen"
    IO ()


eventSetScreen ::
    (MonadIO m, ScreenK a) =>
    Event ->                                -- _obj
    a ->                                    -- screen
    m ()
eventSetScreen _obj screen = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    let screen' = unsafeManagedPtrCastPtr screen
    gdk_event_set_screen _obj' screen'
    touchManagedPtr _obj
    touchManagedPtr screen
    return ()

-- method Event::set_source_device
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gdk" "Event", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "device", argType = TInterface "Gdk" "Device", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gdk" "Event", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "device", argType = TInterface "Gdk" "Device", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gdk_event_set_source_device" gdk_event_set_source_device :: 
    Ptr Event ->                            -- _obj : TInterface "Gdk" "Event"
    Ptr Device ->                           -- device : TInterface "Gdk" "Device"
    IO ()


eventSetSourceDevice ::
    (MonadIO m, DeviceK a) =>
    Event ->                                -- _obj
    a ->                                    -- device
    m ()
eventSetSourceDevice _obj device = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    let device' = unsafeManagedPtrCastPtr device
    gdk_event_set_source_device _obj' device'
    touchManagedPtr _obj
    touchManagedPtr device
    return ()

-- method Event::triggers_context_menu
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gdk" "Event", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gdk" "Event", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TBoolean
-- throws : False
-- Skip return : False

foreign import ccall "gdk_event_triggers_context_menu" gdk_event_triggers_context_menu :: 
    Ptr Event ->                            -- _obj : TInterface "Gdk" "Event"
    IO CInt


eventTriggersContextMenu ::
    (MonadIO m) =>
    Event ->                                -- _obj
    m Bool
eventTriggersContextMenu _obj = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    result <- gdk_event_triggers_context_menu _obj'
    let result' = (/= 0) result
    touchManagedPtr _obj
    return result'