{-# INCLUDE #-} {-# INCLUDE #-} {-# INCLUDE #-} {-# INCLUDE #-} {-# INCLUDE #-} {-# LINE 1 "ClientMessage.hsc" #-} {-# OPTIONS -fglasgow-exts #-} {-# LINE 2 "ClientMessage.hsc" #-} module ClientMessage where import Data.Int import Foreign import Foreign.C.String import Foreign.C.Types import Graphics.X11.Xlib.Event import Graphics.X11.Types import Graphics.X11.Xlib.Types {-# LINE 13 "ClientMessage.hsc" #-} {-# LINE 14 "ClientMessage.hsc" #-} {-# LINE 15 "ClientMessage.hsc" #-} {-# LINE 16 "ClientMessage.hsc" #-} {-# LINE 17 "ClientMessage.hsc" #-} type XClientMessageEvent = (Atom, ClientData) data ClientData = ClientData8 [Int8] | ClientData16 [Int16] | ClientData32 [Int32] deriving Show peekXButtonEvent :: Ptr XClientMessageEvent -> IO XClientMessageEvent peekXButtonEvent p = do message_type <- (\hsc_ptr -> peekByteOff hsc_ptr 20) p {-# LINE 29 "ClientMessage.hsc" #-} format <- (\hsc_ptr -> peekByteOff hsc_ptr 24) p :: IO CInt {-# LINE 30 "ClientMessage.hsc" #-} let dataPtr = (\hsc_ptr -> hsc_ptr `plusPtr` 28) p :: Ptr () {-# LINE 31 "ClientMessage.hsc" #-} data' <- case format of 8 -> peekArray 20 ((castPtr dataPtr) :: Ptr Int8) >>= return . ClientData8 16 -> peekArray 10 ((castPtr dataPtr) :: Ptr Int16) >>= return . ClientData16 32 -> peekArray 5 ((castPtr dataPtr) :: Ptr Int32) >>= return . ClientData32 return (message_type, data') get_ClientMessageEvent :: XEventPtr -> IO XClientMessageEvent get_ClientMessageEvent p = peekXButtonEvent (castPtr p) foreign import ccall "XGetAtomName" c_xGetAtomName :: Ptr Display -> Atom -> IO CString getAtomName :: Display -> Atom -> IO String getAtomName (Display d) a = c_xGetAtomName d a >>= peekCString