{- | Copyright : Will Thompson, Iñaki García Etxebarria and Jonas Platte License : LGPL-2.1 Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc) Contains the fields which are common to all event structs. Any event pointer can safely be cast to a pointer to a 'GI.Gdk.Structs.EventAny.EventAny' to access these fields. -} #define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \ && !defined(__HADDOCK_VERSION__)) module GI.Gdk.Structs.EventAny ( -- * Exported types EventAny(..) , newZeroEventAny , noEventAny , -- * Properties -- ** sendEvent #attr:sendEvent# {- | 'True' if the event was sent explicitly. -} #if ENABLE_OVERLOADING eventAny_sendEvent , #endif getEventAnySendEvent , setEventAnySendEvent , -- ** type #attr:type# {- | the type of the event. -} #if ENABLE_OVERLOADING eventAny_type , #endif getEventAnyType , setEventAnyType , -- ** window #attr:window# {- | the window which received the event. -} clearEventAnyWindow , #if ENABLE_OVERLOADING eventAny_window , #endif getEventAnyWindow , setEventAnyWindow , ) where import Data.GI.Base.ShortPrelude import qualified Data.GI.Base.ShortPrelude as SP import qualified Data.GI.Base.Overloading as O import qualified Prelude as P import qualified Data.GI.Base.Attributes as GI.Attributes import qualified Data.GI.Base.ManagedPtr as B.ManagedPtr import qualified Data.GI.Base.GClosure as B.GClosure import qualified Data.GI.Base.GError as B.GError import qualified Data.GI.Base.GVariant as B.GVariant import qualified Data.GI.Base.GValue as B.GValue import qualified Data.GI.Base.GParamSpec as B.GParamSpec import qualified Data.GI.Base.CallStack as B.CallStack import qualified Data.GI.Base.Properties as B.Properties import qualified Data.Text as T import qualified Data.ByteString.Char8 as B import qualified Data.Map as Map import qualified Foreign.Ptr as FP import qualified GHC.OverloadedLabels as OL import {-# SOURCE #-} qualified GI.Gdk.Enums as Gdk.Enums import {-# SOURCE #-} qualified GI.Gdk.Objects.Window as Gdk.Window -- | Memory-managed wrapper type. newtype EventAny = EventAny (ManagedPtr EventAny) instance WrappedPtr EventAny where wrappedPtrCalloc = callocBytes 24 wrappedPtrCopy = \p -> withManagedPtr p (copyBytes 24 >=> wrapPtr EventAny) wrappedPtrFree = Just ptr_to_g_free -- | Construct a `EventAny` struct initialized to zero. newZeroEventAny :: MonadIO m => m EventAny newZeroEventAny = liftIO $ wrappedPtrCalloc >>= wrapPtr EventAny instance tag ~ 'AttrSet => Constructible EventAny tag where new _ attrs = do o <- newZeroEventAny GI.Attributes.set o attrs return o -- | A convenience alias for `Nothing` :: `Maybe` `EventAny`. noEventAny :: Maybe EventAny noEventAny = Nothing {- | Get the value of the “@type@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.get' eventAny #type @ -} getEventAnyType :: MonadIO m => EventAny -> m Gdk.Enums.EventType getEventAnyType s = liftIO $ withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 0) :: IO CInt let val' = (toEnum . fromIntegral) val return val' {- | Set the value of the “@type@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.set' eventAny [ #type 'Data.GI.Base.Attributes.:=' value ] @ -} setEventAnyType :: MonadIO m => EventAny -> Gdk.Enums.EventType -> m () setEventAnyType s val = liftIO $ withManagedPtr s $ \ptr -> do let val' = (fromIntegral . fromEnum) val poke (ptr `plusPtr` 0) (val' :: CInt) #if ENABLE_OVERLOADING data EventAnyTypeFieldInfo instance AttrInfo EventAnyTypeFieldInfo where type AttrAllowedOps EventAnyTypeFieldInfo = '[ 'AttrSet, 'AttrGet] type AttrSetTypeConstraint EventAnyTypeFieldInfo = (~) Gdk.Enums.EventType type AttrBaseTypeConstraint EventAnyTypeFieldInfo = (~) EventAny type AttrGetType EventAnyTypeFieldInfo = Gdk.Enums.EventType type AttrLabel EventAnyTypeFieldInfo = "type" type AttrOrigin EventAnyTypeFieldInfo = EventAny attrGet _ = getEventAnyType attrSet _ = setEventAnyType attrConstruct = undefined attrClear _ = undefined eventAny_type :: AttrLabelProxy "type" eventAny_type = AttrLabelProxy #endif {- | Get the value of the “@window@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.get' eventAny #window @ -} getEventAnyWindow :: MonadIO m => EventAny -> m (Maybe Gdk.Window.Window) getEventAnyWindow s = liftIO $ withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 8) :: IO (Ptr Gdk.Window.Window) result <- SP.convertIfNonNull val $ \val' -> do val'' <- (newObject Gdk.Window.Window) val' return val'' return result {- | Set the value of the “@window@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.set' eventAny [ #window 'Data.GI.Base.Attributes.:=' value ] @ -} setEventAnyWindow :: MonadIO m => EventAny -> Ptr Gdk.Window.Window -> m () setEventAnyWindow s val = liftIO $ withManagedPtr s $ \ptr -> do poke (ptr `plusPtr` 8) (val :: Ptr Gdk.Window.Window) {- | Set the value of the “@window@” field to `Nothing`. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.clear' #window @ -} clearEventAnyWindow :: MonadIO m => EventAny -> m () clearEventAnyWindow s = liftIO $ withManagedPtr s $ \ptr -> do poke (ptr `plusPtr` 8) (FP.nullPtr :: Ptr Gdk.Window.Window) #if ENABLE_OVERLOADING data EventAnyWindowFieldInfo instance AttrInfo EventAnyWindowFieldInfo where type AttrAllowedOps EventAnyWindowFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear] type AttrSetTypeConstraint EventAnyWindowFieldInfo = (~) (Ptr Gdk.Window.Window) type AttrBaseTypeConstraint EventAnyWindowFieldInfo = (~) EventAny type AttrGetType EventAnyWindowFieldInfo = Maybe Gdk.Window.Window type AttrLabel EventAnyWindowFieldInfo = "window" type AttrOrigin EventAnyWindowFieldInfo = EventAny attrGet _ = getEventAnyWindow attrSet _ = setEventAnyWindow attrConstruct = undefined attrClear _ = clearEventAnyWindow eventAny_window :: AttrLabelProxy "window" eventAny_window = AttrLabelProxy #endif {- | Get the value of the “@send_event@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.get' eventAny #sendEvent @ -} getEventAnySendEvent :: MonadIO m => EventAny -> m Int8 getEventAnySendEvent s = liftIO $ withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 16) :: IO Int8 return val {- | Set the value of the “@send_event@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.set' eventAny [ #sendEvent 'Data.GI.Base.Attributes.:=' value ] @ -} setEventAnySendEvent :: MonadIO m => EventAny -> Int8 -> m () setEventAnySendEvent s val = liftIO $ withManagedPtr s $ \ptr -> do poke (ptr `plusPtr` 16) (val :: Int8) #if ENABLE_OVERLOADING data EventAnySendEventFieldInfo instance AttrInfo EventAnySendEventFieldInfo where type AttrAllowedOps EventAnySendEventFieldInfo = '[ 'AttrSet, 'AttrGet] type AttrSetTypeConstraint EventAnySendEventFieldInfo = (~) Int8 type AttrBaseTypeConstraint EventAnySendEventFieldInfo = (~) EventAny type AttrGetType EventAnySendEventFieldInfo = Int8 type AttrLabel EventAnySendEventFieldInfo = "send_event" type AttrOrigin EventAnySendEventFieldInfo = EventAny attrGet _ = getEventAnySendEvent attrSet _ = setEventAnySendEvent attrConstruct = undefined attrClear _ = undefined eventAny_sendEvent :: AttrLabelProxy "sendEvent" eventAny_sendEvent = AttrLabelProxy #endif #if ENABLE_OVERLOADING instance O.HasAttributeList EventAny type instance O.AttributeList EventAny = EventAnyAttributeList type EventAnyAttributeList = ('[ '("type", EventAnyTypeFieldInfo), '("window", EventAnyWindowFieldInfo), '("sendEvent", EventAnySendEventFieldInfo)] :: [(Symbol, *)]) #endif #if ENABLE_OVERLOADING type family ResolveEventAnyMethod (t :: Symbol) (o :: *) :: * where ResolveEventAnyMethod l o = O.MethodResolutionFailed l o instance (info ~ ResolveEventAnyMethod t EventAny, O.MethodInfo info EventAny p) => OL.IsLabel t (EventAny -> p) where #if MIN_VERSION_base(4,10,0) fromLabel = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info) #else fromLabel _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info) #endif #endif