packages feed

gi-gdk-0.3.18.14: GI/Gdk/Structs/EventProperty.hs


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

Describes a property change on a window.
-}

module GI.Gdk.Structs.EventProperty
    ( 

-- * Exported types
    EventProperty(..)                       ,
    newZeroEventProperty                    ,
    noEventProperty                         ,


 -- * Properties
-- ** Atom
    eventPropertyAtom                       ,
    eventPropertyClearAtom                  ,
    eventPropertyReadAtom                   ,
    eventPropertyWriteAtom                  ,


-- ** SendEvent
    eventPropertyReadSendEvent              ,
    eventPropertySendEvent                  ,
    eventPropertyWriteSendEvent             ,


-- ** State
    eventPropertyReadState                  ,
    eventPropertyState                      ,
    eventPropertyWriteState                 ,


-- ** Time
    eventPropertyReadTime                   ,
    eventPropertyTime                       ,
    eventPropertyWriteTime                  ,


-- ** Type
    eventPropertyReadType                   ,
    eventPropertyType                       ,
    eventPropertyWriteType                  ,


-- ** Window
    eventPropertyClearWindow                ,
    eventPropertyReadWindow                 ,
    eventPropertyWindow                     ,
    eventPropertyWriteWindow                ,




    ) where

import Data.GI.Base.ShortPrelude

import qualified Data.GI.Base.Attributes as GI.Attributes
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 EventProperty = EventProperty (ForeignPtr EventProperty)
-- | Construct a `EventProperty` struct initialized to zero.
newZeroEventProperty :: MonadIO m => m EventProperty
newZeroEventProperty = liftIO $ callocBytes 40 >>= wrapPtr EventProperty

instance tag ~ 'AttrSet => Constructible EventProperty tag where
    new _ attrs = do
        o <- newZeroEventProperty
        GI.Attributes.set o attrs
        return o


noEventProperty :: Maybe EventProperty
noEventProperty = Nothing

eventPropertyReadType :: MonadIO m => EventProperty -> m EventType
eventPropertyReadType s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO CUInt
    let val' = (toEnum . fromIntegral) val
    return val'

eventPropertyWriteType :: MonadIO m => EventProperty -> EventType -> m ()
eventPropertyWriteType s val = liftIO $ withManagedPtr s $ \ptr -> do
    let val' = (fromIntegral . fromEnum) val
    poke (ptr `plusPtr` 0) (val' :: CUInt)

data EventPropertyTypeFieldInfo
instance AttrInfo EventPropertyTypeFieldInfo where
    type AttrAllowedOps EventPropertyTypeFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint EventPropertyTypeFieldInfo = (~) EventType
    type AttrBaseTypeConstraint EventPropertyTypeFieldInfo = (~) EventProperty
    type AttrGetType EventPropertyTypeFieldInfo = EventType
    type AttrLabel EventPropertyTypeFieldInfo = "type"
    attrGet _ = eventPropertyReadType
    attrSet _ = eventPropertyWriteType
    attrConstruct = undefined
    attrClear _ = undefined

eventPropertyType :: AttrLabelProxy "type"
eventPropertyType = AttrLabelProxy


eventPropertyReadWindow :: MonadIO m => EventProperty -> m (Maybe Window)
eventPropertyReadWindow s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 8) :: IO (Ptr Window)
    result <- convertIfNonNull val $ \val' -> do
        val'' <- (newObject Window) val'
        return val''
    return result

eventPropertyWriteWindow :: MonadIO m => EventProperty -> Ptr Window -> m ()
eventPropertyWriteWindow s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 8) (val :: Ptr Window)

eventPropertyClearWindow :: MonadIO m => EventProperty -> m ()
eventPropertyClearWindow s = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 8) (nullPtr :: Ptr Window)

data EventPropertyWindowFieldInfo
instance AttrInfo EventPropertyWindowFieldInfo where
    type AttrAllowedOps EventPropertyWindowFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
    type AttrSetTypeConstraint EventPropertyWindowFieldInfo = (~) (Ptr Window)
    type AttrBaseTypeConstraint EventPropertyWindowFieldInfo = (~) EventProperty
    type AttrGetType EventPropertyWindowFieldInfo = Maybe Window
    type AttrLabel EventPropertyWindowFieldInfo = "window"
    attrGet _ = eventPropertyReadWindow
    attrSet _ = eventPropertyWriteWindow
    attrConstruct = undefined
    attrClear _ = eventPropertyClearWindow

eventPropertyWindow :: AttrLabelProxy "window"
eventPropertyWindow = AttrLabelProxy


eventPropertyReadSendEvent :: MonadIO m => EventProperty -> m Int8
eventPropertyReadSendEvent s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 16) :: IO Int8
    return val

eventPropertyWriteSendEvent :: MonadIO m => EventProperty -> Int8 -> m ()
eventPropertyWriteSendEvent s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 16) (val :: Int8)

data EventPropertySendEventFieldInfo
instance AttrInfo EventPropertySendEventFieldInfo where
    type AttrAllowedOps EventPropertySendEventFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint EventPropertySendEventFieldInfo = (~) Int8
    type AttrBaseTypeConstraint EventPropertySendEventFieldInfo = (~) EventProperty
    type AttrGetType EventPropertySendEventFieldInfo = Int8
    type AttrLabel EventPropertySendEventFieldInfo = "send_event"
    attrGet _ = eventPropertyReadSendEvent
    attrSet _ = eventPropertyWriteSendEvent
    attrConstruct = undefined
    attrClear _ = undefined

eventPropertySendEvent :: AttrLabelProxy "sendEvent"
eventPropertySendEvent = AttrLabelProxy


eventPropertyReadAtom :: MonadIO m => EventProperty -> m (Maybe Atom)
eventPropertyReadAtom s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 24) :: IO (Ptr Atom)
    result <- convertIfNonNull val $ \val' -> do
        -- XXX Wrapping a foreign struct/union with no known destructor, leak?
        val'' <- (\x -> Atom <$> newForeignPtr_ x) val'
        return val''
    return result

eventPropertyWriteAtom :: MonadIO m => EventProperty -> Ptr Atom -> m ()
eventPropertyWriteAtom s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 24) (val :: Ptr Atom)

eventPropertyClearAtom :: MonadIO m => EventProperty -> m ()
eventPropertyClearAtom s = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 24) (nullPtr :: Ptr Atom)

data EventPropertyAtomFieldInfo
instance AttrInfo EventPropertyAtomFieldInfo where
    type AttrAllowedOps EventPropertyAtomFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
    type AttrSetTypeConstraint EventPropertyAtomFieldInfo = (~) (Ptr Atom)
    type AttrBaseTypeConstraint EventPropertyAtomFieldInfo = (~) EventProperty
    type AttrGetType EventPropertyAtomFieldInfo = Maybe Atom
    type AttrLabel EventPropertyAtomFieldInfo = "atom"
    attrGet _ = eventPropertyReadAtom
    attrSet _ = eventPropertyWriteAtom
    attrConstruct = undefined
    attrClear _ = eventPropertyClearAtom

eventPropertyAtom :: AttrLabelProxy "atom"
eventPropertyAtom = AttrLabelProxy


eventPropertyReadTime :: MonadIO m => EventProperty -> m Word32
eventPropertyReadTime s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 32) :: IO Word32
    return val

eventPropertyWriteTime :: MonadIO m => EventProperty -> Word32 -> m ()
eventPropertyWriteTime s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 32) (val :: Word32)

data EventPropertyTimeFieldInfo
instance AttrInfo EventPropertyTimeFieldInfo where
    type AttrAllowedOps EventPropertyTimeFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint EventPropertyTimeFieldInfo = (~) Word32
    type AttrBaseTypeConstraint EventPropertyTimeFieldInfo = (~) EventProperty
    type AttrGetType EventPropertyTimeFieldInfo = Word32
    type AttrLabel EventPropertyTimeFieldInfo = "time"
    attrGet _ = eventPropertyReadTime
    attrSet _ = eventPropertyWriteTime
    attrConstruct = undefined
    attrClear _ = undefined

eventPropertyTime :: AttrLabelProxy "time"
eventPropertyTime = AttrLabelProxy


eventPropertyReadState :: MonadIO m => EventProperty -> m PropertyState
eventPropertyReadState s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 36) :: IO CUInt
    let val' = (toEnum . fromIntegral) val
    return val'

eventPropertyWriteState :: MonadIO m => EventProperty -> PropertyState -> m ()
eventPropertyWriteState s val = liftIO $ withManagedPtr s $ \ptr -> do
    let val' = (fromIntegral . fromEnum) val
    poke (ptr `plusPtr` 36) (val' :: CUInt)

data EventPropertyStateFieldInfo
instance AttrInfo EventPropertyStateFieldInfo where
    type AttrAllowedOps EventPropertyStateFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint EventPropertyStateFieldInfo = (~) PropertyState
    type AttrBaseTypeConstraint EventPropertyStateFieldInfo = (~) EventProperty
    type AttrGetType EventPropertyStateFieldInfo = PropertyState
    type AttrLabel EventPropertyStateFieldInfo = "state"
    attrGet _ = eventPropertyReadState
    attrSet _ = eventPropertyWriteState
    attrConstruct = undefined
    attrClear _ = undefined

eventPropertyState :: AttrLabelProxy "state"
eventPropertyState = AttrLabelProxy



type instance AttributeList EventProperty = EventPropertyAttributeList
type EventPropertyAttributeList = ('[ '("type", EventPropertyTypeFieldInfo), '("window", EventPropertyWindowFieldInfo), '("sendEvent", EventPropertySendEventFieldInfo), '("atom", EventPropertyAtomFieldInfo), '("time", EventPropertyTimeFieldInfo), '("state", EventPropertyStateFieldInfo)] :: [(Symbol, *)])

type family ResolveEventPropertyMethod (t :: Symbol) (o :: *) :: * where
    ResolveEventPropertyMethod l o = MethodResolutionFailed l o

instance (info ~ ResolveEventPropertyMethod t EventProperty, MethodInfo info EventProperty p) => IsLabelProxy t (EventProperty -> p) where
    fromLabelProxy _ = overloadedMethod (MethodProxy :: MethodProxy info)

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