{-# LINE 1 "Graphics/X11/Xlib/Extras.hsc" #-}
{-# LANGUAGE DeriveDataTypeable #-}
module Graphics.X11.Xlib.Extras (
module Graphics.X11.Xlib.Extras,
module Graphics.X11.Xlib.Internal
) where
import Data.Maybe
import Data.Typeable ( Typeable )
import Graphics.X11.Xrandr
{-# LINE 25 "Graphics/X11/Xlib/Extras.hsc" #-}
import Graphics.X11.Xlib
import Graphics.X11.Xlib.Internal
import Graphics.X11.Xlib.Types
import Foreign (Storable, Ptr, peek, poke, peekElemOff, pokeElemOff, peekByteOff, pokeByteOff, peekArray, throwIfNull, nullPtr, sizeOf, alignment, alloca, with, throwIf, Word8, Word16, Word64, Int32, plusPtr, castPtr, withArrayLen, setBit, testBit, allocaBytes, FunPtr)
{-# LINE 29 "Graphics/X11/Xlib/Extras.hsc" #-}
import Foreign.C.Types
import Foreign.C.String
import Control.Monad
import System.IO.Unsafe
data Event
= AnyEvent
{ ev_event_type :: !EventType
, ev_serial :: !CULong
, ev_send_event :: !Bool
, ev_event_display :: Display
, ev_window :: !Window
}
| ConfigureRequestEvent
{ ev_event_type :: !EventType
, ev_serial :: !CULong
, ev_send_event :: !Bool
, ev_event_display :: Display
, ev_parent :: !Window
, ev_window :: !Window
, ev_x :: !CInt
, ev_y :: !CInt
, ev_width :: !CInt
, ev_height :: !CInt
, ev_border_width :: !CInt
, ev_above :: !Window
, ev_detail :: !NotifyDetail
, ev_value_mask :: !CULong
}
| ConfigureEvent
{ ev_event_type :: !EventType
, ev_serial :: !CULong
, ev_send_event :: !Bool
, ev_event_display :: Display
, ev_event :: !Window
, ev_window :: !Window
, ev_x :: !CInt
, ev_y :: !CInt
, ev_width :: !CInt
, ev_height :: !CInt
, ev_border_width :: !CInt
, ev_above :: !Window
, ev_override_redirect :: !Bool
}
| MapRequestEvent
{ ev_event_type :: !EventType
, ev_serial :: !CULong
, ev_send_event :: !Bool
, ev_event_display :: Display
, ev_parent :: !Window
, ev_window :: !Window
}
| KeyEvent
{ ev_event_type :: !EventType
, ev_serial :: !CULong
, ev_send_event :: !Bool
, ev_event_display :: Display
, ev_window :: !Window
, ev_root :: !Window
, ev_subwindow :: !Window
, ev_time :: !Time
, ev_x :: !CInt
, ev_y :: !CInt
, ev_x_root :: !CInt
, ev_y_root :: !CInt
, ev_state :: !KeyMask
, ev_keycode :: !KeyCode
, ev_same_screen :: !Bool
}
| ButtonEvent
{ ev_event_type :: !EventType
, ev_serial :: !CULong
, ev_send_event :: !Bool
, ev_event_display :: Display
, ev_window :: !Window
, ev_root :: !Window
, ev_subwindow :: !Window
, ev_time :: !Time
, ev_x :: !CInt
, ev_y :: !CInt
, ev_x_root :: !CInt
, ev_y_root :: !CInt
, ev_state :: !KeyMask
, ev_button :: !Button
, ev_same_screen :: !Bool
}
| MotionEvent
{ ev_event_type :: !EventType
, ev_serial :: !CULong
, ev_send_event :: !Bool
, ev_event_display :: Display
, ev_x :: !CInt
, ev_y :: !CInt
, ev_window :: !Window
}
| DestroyWindowEvent
{ ev_event_type :: !EventType
, ev_serial :: !CULong
, ev_send_event :: !Bool
, ev_event_display :: Display
, ev_event :: !Window
, ev_window :: !Window
}
| UnmapEvent
{ ev_event_type :: !EventType
, ev_serial :: !CULong
, ev_send_event :: !Bool
, ev_event_display :: Display
, ev_event :: !Window
, ev_window :: !Window
, ev_from_configure :: !Bool
}
| MapNotifyEvent
{ ev_event_type :: !EventType
, ev_serial :: !CULong
, ev_send_event :: !Bool
, ev_event_display :: Display
, ev_event :: !Window
, ev_window :: !Window
, ev_override_redirect :: !Bool
}
| MappingNotifyEvent
{ ev_event_type :: !EventType
, ev_serial :: !CULong
, ev_send_event :: !Bool
, ev_event_display :: Display
, ev_window :: !Window
, ev_request :: !MappingRequest
, ev_first_keycode :: !KeyCode
, ev_count :: !CInt
}
| CrossingEvent
{ ev_event_type :: !EventType
, ev_serial :: !CULong
, ev_send_event :: !Bool
, ev_event_display :: Display
, ev_window :: !Window
, ev_root :: !Window
, ev_subwindow :: !Window
, ev_time :: !Time
, ev_x :: !CInt
, ev_y :: !CInt
, ev_x_root :: !CInt
, ev_y_root :: !CInt
, ev_mode :: !NotifyMode
, ev_detail :: !NotifyDetail
, ev_same_screen :: !Bool
, ev_focus :: !Bool
, ev_state :: !Modifier
}
| SelectionRequest
{ ev_event_type :: !EventType
, ev_serial :: !CULong
, ev_send_event :: !Bool
, ev_event_display :: Display
, ev_owner :: !Window
, ev_requestor :: !Window
, ev_selection :: !Atom
, ev_target :: !Atom
, ev_property :: !Atom
, ev_time :: !Time
}
| SelectionClear
{ ev_event_type :: !EventType
, ev_serial :: !CULong
, ev_send_event :: !Bool
, ev_event_display :: Display
, ev_window :: !Window
, ev_selection :: !Atom
, ev_time :: !Time
}
| PropertyEvent
{ ev_event_type :: !EventType
, ev_serial :: !CULong
, ev_send_event :: !Bool
, ev_event_display :: Display
, ev_window :: !Window
, ev_atom :: !Atom
, ev_time :: !Time
, ev_propstate :: !CInt
}
| ExposeEvent
{ ev_event_type :: !EventType
, ev_serial :: !CULong
, ev_send_event :: !Bool
, ev_event_display :: Display
, ev_window :: !Window
, ev_x :: !CInt
, ev_y :: !CInt
, ev_width :: !CInt
, ev_height :: !CInt
, ev_count :: !CInt
}
| ClientMessageEvent
{ ev_event_type :: !EventType
, ev_serial :: !CULong
, ev_send_event :: !Bool
, ev_event_display :: Display
, ev_window :: !Window
, ev_message_type :: !Atom
, ev_data :: ![CInt]
}
| RRScreenChangeNotifyEvent
{ ev_event_type :: !EventType
, ev_serial :: !CULong
, ev_send_event :: !Bool
, ev_event_display :: Display
, ev_window :: !Window
, ev_root :: !Window
, ev_timestamp :: !Time
, ev_config_timestamp :: !Time
, ev_size_index :: !SizeID
, ev_subpixel_order :: !SubpixelOrder
, ev_rotation :: !Rotation
, ev_width :: !CInt
, ev_height :: !CInt
, ev_mwidth :: !CInt
, ev_mheight :: !CInt
}
| RRNotifyEvent
{ ev_event_type :: !EventType
, ev_serial :: !CULong
, ev_send_event :: !Bool
, ev_event_display :: Display
, ev_window :: !Window
, ev_subtype :: !CInt
}
| RRCrtcChangeNotifyEvent
{ ev_event_type :: !EventType
, ev_serial :: !CULong
, ev_send_event :: !Bool
, ev_event_display :: Display
, ev_window :: !Window
, ev_subtype :: !CInt
, ev_crtc :: !RRCrtc
, ev_rr_mode :: !RRMode
, ev_rotation :: !Rotation
, ev_x :: !CInt
, ev_y :: !CInt
, ev_rr_width :: !CUInt
, ev_rr_height :: !CUInt
}
| RROutputChangeNotifyEvent
{ ev_event_type :: !EventType
, ev_serial :: !CULong
, ev_send_event :: !Bool
, ev_event_display :: Display
, ev_window :: !Window
, ev_subtype :: !CInt
, ev_output :: !RROutput
, ev_crtc :: !RRCrtc
, ev_rr_mode :: !RRMode
, ev_rotation :: !Rotation
, ev_connection :: !Connection
, ev_subpixel_order :: !SubpixelOrder
}
| RROutputPropertyNotifyEvent
{ ev_event_type :: !EventType
, ev_serial :: !CULong
, ev_send_event :: !Bool
, ev_event_display :: Display
, ev_window :: !Window
, ev_subtype :: !CInt
, ev_output :: !RROutput
, ev_property :: !Atom
, ev_timestamp :: !Time
, ev_rr_state :: !CInt
}
{-# LINE 314 "Graphics/X11/Xlib/Extras.hsc" #-}
deriving ( Show, Typeable )
eventTable :: [(EventType, String)]
eventTable =
[ (keyPress , "KeyPress")
, (keyRelease , "KeyRelease")
, (buttonPress , "ButtonPress")
, (buttonRelease , "ButtonRelease")
, (motionNotify , "MotionNotify")
, (enterNotify , "EnterNotify")
, (leaveNotify , "LeaveNotify")
, (focusIn , "FocusIn")
, (focusOut , "FocusOut")
, (keymapNotify , "KeymapNotify")
, (expose , "Expose")
, (graphicsExpose , "GraphicsExpose")
, (noExpose , "NoExpose")
, (visibilityNotify , "VisibilityNotify")
, (createNotify , "CreateNotify")
, (destroyNotify , "DestroyNotify")
, (unmapNotify , "UnmapNotify")
, (mapNotify , "MapNotify")
, (mapRequest , "MapRequest")
, (reparentNotify , "ReparentNotify")
, (configureNotify , "ConfigureNotify")
, (configureRequest , "ConfigureRequest")
, (gravityNotify , "GravityNotify")
, (resizeRequest , "ResizeRequest")
, (circulateNotify , "CirculateNotify")
, (circulateRequest , "CirculateRequest")
, (propertyNotify , "PropertyNotify")
, (selectionClear , "SelectionClear")
, (selectionRequest , "SelectionRequest")
, (selectionNotify , "SelectionNotify")
, (colormapNotify , "ColormapNotify")
, (clientMessage , "ClientMessage")
, (mappingNotify , "MappingNotify")
, (lASTEvent , "LASTEvent")
{-# LINE 355 "Graphics/X11/Xlib/Extras.hsc" #-}
]
eventName :: Event -> String
eventName e = maybe ("unknown " ++ show x) id $ lookup x eventTable
where x = fromIntegral $ ev_event_type e
getEvent :: XEventPtr -> IO Event
getEvent p = do
type_ <- (\hsc_ptr -> peekByteOff hsc_ptr 0) p
{-# LINE 366 "Graphics/X11/Xlib/Extras.hsc" #-}
serial <- (\hsc_ptr -> peekByteOff hsc_ptr 8) p
{-# LINE 367 "Graphics/X11/Xlib/Extras.hsc" #-}
send_event <- (\hsc_ptr -> peekByteOff hsc_ptr 16) p
{-# LINE 368 "Graphics/X11/Xlib/Extras.hsc" #-}
display <- fmap Display ((\hsc_ptr -> peekByteOff hsc_ptr 24) p)
{-# LINE 369 "Graphics/X11/Xlib/Extras.hsc" #-}
rrData <- xrrQueryExtension display
let rrHasExtension = isJust rrData
let rrEventBase = fromIntegral $ fst $ fromMaybe (0, 0) rrData
case () of
_ | type_ == configureRequest -> do
parent <- (\hsc_ptr -> peekByteOff hsc_ptr 32) p
{-# LINE 379 "Graphics/X11/Xlib/Extras.hsc" #-}
window <- (\hsc_ptr -> peekByteOff hsc_ptr 40) p
{-# LINE 380 "Graphics/X11/Xlib/Extras.hsc" #-}
x <- (\hsc_ptr -> peekByteOff hsc_ptr 48) p
{-# LINE 381 "Graphics/X11/Xlib/Extras.hsc" #-}
y <- (\hsc_ptr -> peekByteOff hsc_ptr 52) p
{-# LINE 382 "Graphics/X11/Xlib/Extras.hsc" #-}
width <- (\hsc_ptr -> peekByteOff hsc_ptr 56) p
{-# LINE 383 "Graphics/X11/Xlib/Extras.hsc" #-}
height <- (\hsc_ptr -> peekByteOff hsc_ptr 60) p
{-# LINE 384 "Graphics/X11/Xlib/Extras.hsc" #-}
border_width <- (\hsc_ptr -> peekByteOff hsc_ptr 64) p
{-# LINE 385 "Graphics/X11/Xlib/Extras.hsc" #-}
above <- (\hsc_ptr -> peekByteOff hsc_ptr 72) p
{-# LINE 386 "Graphics/X11/Xlib/Extras.hsc" #-}
detail <- (\hsc_ptr -> peekByteOff hsc_ptr 80) p
{-# LINE 387 "Graphics/X11/Xlib/Extras.hsc" #-}
value_mask <- (\hsc_ptr -> peekByteOff hsc_ptr 88) p
{-# LINE 388 "Graphics/X11/Xlib/Extras.hsc" #-}
return $ ConfigureRequestEvent
{ ev_event_type = type_
, ev_serial = serial
, ev_send_event = send_event
, ev_event_display = display
, ev_parent = parent
, ev_window = window
, ev_x = x
, ev_y = y
, ev_width = width
, ev_height = height
, ev_border_width = border_width
, ev_above = above
, ev_detail = detail
, ev_value_mask = value_mask
}
| type_ == configureNotify -> do
return (ConfigureEvent type_ serial send_event display)
`ap` (\hsc_ptr -> peekByteOff hsc_ptr 32) p
{-# LINE 411 "Graphics/X11/Xlib/Extras.hsc" #-}
`ap` (\hsc_ptr -> peekByteOff hsc_ptr 40) p
{-# LINE 412 "Graphics/X11/Xlib/Extras.hsc" #-}
`ap` (\hsc_ptr -> peekByteOff hsc_ptr 48) p
{-# LINE 413 "Graphics/X11/Xlib/Extras.hsc" #-}
`ap` (\hsc_ptr -> peekByteOff hsc_ptr 52) p
{-# LINE 414 "Graphics/X11/Xlib/Extras.hsc" #-}
`ap` (\hsc_ptr -> peekByteOff hsc_ptr 56) p
{-# LINE 415 "Graphics/X11/Xlib/Extras.hsc" #-}
`ap` (\hsc_ptr -> peekByteOff hsc_ptr 60) p
{-# LINE 416 "Graphics/X11/Xlib/Extras.hsc" #-}
`ap` (\hsc_ptr -> peekByteOff hsc_ptr 64) p
{-# LINE 417 "Graphics/X11/Xlib/Extras.hsc" #-}
`ap` (\hsc_ptr -> peekByteOff hsc_ptr 72) p
{-# LINE 418 "Graphics/X11/Xlib/Extras.hsc" #-}
`ap` (\hsc_ptr -> peekByteOff hsc_ptr 80) p
{-# LINE 419 "Graphics/X11/Xlib/Extras.hsc" #-}
| type_ == mapRequest -> do
parent <- (\hsc_ptr -> peekByteOff hsc_ptr 32) p
{-# LINE 425 "Graphics/X11/Xlib/Extras.hsc" #-}
window <- (\hsc_ptr -> peekByteOff hsc_ptr 40) p
{-# LINE 426 "Graphics/X11/Xlib/Extras.hsc" #-}
return $ MapRequestEvent
{ ev_event_type = type_
, ev_serial = serial
, ev_send_event = send_event
, ev_event_display = display
, ev_parent = parent
, ev_window = window
}
| type_ == mapNotify -> do
event <- (\hsc_ptr -> peekByteOff hsc_ptr 32) p
{-# LINE 440 "Graphics/X11/Xlib/Extras.hsc" #-}
window <- (\hsc_ptr -> peekByteOff hsc_ptr 40) p
{-# LINE 441 "Graphics/X11/Xlib/Extras.hsc" #-}
override_redirect <- (\hsc_ptr -> peekByteOff hsc_ptr 48) p
{-# LINE 442 "Graphics/X11/Xlib/Extras.hsc" #-}
return $ MapNotifyEvent
{ ev_event_type = type_
, ev_serial = serial
, ev_send_event = send_event
, ev_event_display = display
, ev_event = event
, ev_window = window
, ev_override_redirect = override_redirect
}
| type_ == mappingNotify -> do
window <- (\hsc_ptr -> peekByteOff hsc_ptr 32) p
{-# LINE 457 "Graphics/X11/Xlib/Extras.hsc" #-}
request <- (\hsc_ptr -> peekByteOff hsc_ptr 40) p
{-# LINE 458 "Graphics/X11/Xlib/Extras.hsc" #-}
first_keycode <- (\hsc_ptr -> peekByteOff hsc_ptr 44) p
{-# LINE 459 "Graphics/X11/Xlib/Extras.hsc" #-}
count <- (\hsc_ptr -> peekByteOff hsc_ptr 48) p
{-# LINE 460 "Graphics/X11/Xlib/Extras.hsc" #-}
return $ MappingNotifyEvent
{ ev_event_type = type_
, ev_serial = serial
, ev_send_event = send_event
, ev_event_display = display
, ev_window = window
, ev_request = request
, ev_first_keycode = first_keycode
, ev_count = count
}
| type_ == keyPress || type_ == keyRelease -> do
window <- (\hsc_ptr -> peekByteOff hsc_ptr 32) p
{-# LINE 477 "Graphics/X11/Xlib/Extras.hsc" #-}
root <- (\hsc_ptr -> peekByteOff hsc_ptr 40) p
{-# LINE 478 "Graphics/X11/Xlib/Extras.hsc" #-}
subwindow <- (\hsc_ptr -> peekByteOff hsc_ptr 48) p
{-# LINE 479 "Graphics/X11/Xlib/Extras.hsc" #-}
time <- (\hsc_ptr -> peekByteOff hsc_ptr 56) p
{-# LINE 480 "Graphics/X11/Xlib/Extras.hsc" #-}
x <- (\hsc_ptr -> peekByteOff hsc_ptr 64) p
{-# LINE 481 "Graphics/X11/Xlib/Extras.hsc" #-}
y <- (\hsc_ptr -> peekByteOff hsc_ptr 68) p
{-# LINE 482 "Graphics/X11/Xlib/Extras.hsc" #-}
x_root <- (\hsc_ptr -> peekByteOff hsc_ptr 72) p
{-# LINE 483 "Graphics/X11/Xlib/Extras.hsc" #-}
y_root <- (\hsc_ptr -> peekByteOff hsc_ptr 76) p
{-# LINE 484 "Graphics/X11/Xlib/Extras.hsc" #-}
state <- ((\hsc_ptr -> peekByteOff hsc_ptr 80) p) :: IO CUInt
{-# LINE 485 "Graphics/X11/Xlib/Extras.hsc" #-}
keycode <- ((\hsc_ptr -> peekByteOff hsc_ptr 84) p) :: IO CUInt
{-# LINE 486 "Graphics/X11/Xlib/Extras.hsc" #-}
same_screen <- (\hsc_ptr -> peekByteOff hsc_ptr 88) p
{-# LINE 487 "Graphics/X11/Xlib/Extras.hsc" #-}
return $ KeyEvent
{ ev_event_type = type_
, ev_serial = serial
, ev_send_event = send_event
, ev_event_display = display
, ev_window = window
, ev_root = root
, ev_subwindow = subwindow
, ev_time = time
, ev_x = x
, ev_y = y
, ev_x_root = x_root
, ev_y_root = y_root
, ev_state = fromIntegral state
, ev_keycode = fromIntegral keycode
, ev_same_screen = same_screen
}
| type_ == buttonPress || type_ == buttonRelease -> do
window <- (\hsc_ptr -> peekByteOff hsc_ptr 32) p
{-# LINE 511 "Graphics/X11/Xlib/Extras.hsc" #-}
root <- (\hsc_ptr -> peekByteOff hsc_ptr 40) p
{-# LINE 512 "Graphics/X11/Xlib/Extras.hsc" #-}
subwindow <- (\hsc_ptr -> peekByteOff hsc_ptr 48) p
{-# LINE 513 "Graphics/X11/Xlib/Extras.hsc" #-}
time <- (\hsc_ptr -> peekByteOff hsc_ptr 56) p
{-# LINE 514 "Graphics/X11/Xlib/Extras.hsc" #-}
x <- (\hsc_ptr -> peekByteOff hsc_ptr 64) p
{-# LINE 515 "Graphics/X11/Xlib/Extras.hsc" #-}
y <- (\hsc_ptr -> peekByteOff hsc_ptr 68) p
{-# LINE 516 "Graphics/X11/Xlib/Extras.hsc" #-}
x_root <- (\hsc_ptr -> peekByteOff hsc_ptr 72) p
{-# LINE 517 "Graphics/X11/Xlib/Extras.hsc" #-}
y_root <- (\hsc_ptr -> peekByteOff hsc_ptr 76) p
{-# LINE 518 "Graphics/X11/Xlib/Extras.hsc" #-}
state <- ((\hsc_ptr -> peekByteOff hsc_ptr 80) p) :: IO CUInt
{-# LINE 519 "Graphics/X11/Xlib/Extras.hsc" #-}
button <- (\hsc_ptr -> peekByteOff hsc_ptr 84) p
{-# LINE 520 "Graphics/X11/Xlib/Extras.hsc" #-}
same_screen <- (\hsc_ptr -> peekByteOff hsc_ptr 88) p
{-# LINE 521 "Graphics/X11/Xlib/Extras.hsc" #-}
return $ ButtonEvent
{ ev_event_type = type_
, ev_serial = serial
, ev_send_event = send_event
, ev_event_display = display
, ev_window = window
, ev_root = root
, ev_subwindow = subwindow
, ev_time = time
, ev_x = x
, ev_y = y
, ev_x_root = x_root
, ev_y_root = y_root
, ev_state = fromIntegral state
, ev_button = button
, ev_same_screen = same_screen
}
| type_ == motionNotify -> do
window <- (\hsc_ptr -> peekByteOff hsc_ptr 32) p
{-# LINE 545 "Graphics/X11/Xlib/Extras.hsc" #-}
x <- (\hsc_ptr -> peekByteOff hsc_ptr 64) p
{-# LINE 546 "Graphics/X11/Xlib/Extras.hsc" #-}
y <- (\hsc_ptr -> peekByteOff hsc_ptr 68) p
{-# LINE 547 "Graphics/X11/Xlib/Extras.hsc" #-}
return $ MotionEvent
{ ev_event_type = type_
, ev_serial = serial
, ev_send_event = send_event
, ev_event_display = display
, ev_x = x
, ev_y = y
, ev_window = window
}
| type_ == destroyNotify -> do
event <- (\hsc_ptr -> peekByteOff hsc_ptr 32) p
{-# LINE 563 "Graphics/X11/Xlib/Extras.hsc" #-}
window <- (\hsc_ptr -> peekByteOff hsc_ptr 40) p
{-# LINE 564 "Graphics/X11/Xlib/Extras.hsc" #-}
return $ DestroyWindowEvent
{ ev_event_type = type_
, ev_serial = serial
, ev_send_event = send_event
, ev_event_display = display
, ev_event = event
, ev_window = window
}
| type_ == unmapNotify -> do
event <- (\hsc_ptr -> peekByteOff hsc_ptr 32) p
{-# LINE 579 "Graphics/X11/Xlib/Extras.hsc" #-}
window <- (\hsc_ptr -> peekByteOff hsc_ptr 40) p
{-# LINE 580 "Graphics/X11/Xlib/Extras.hsc" #-}
from_configure <- (\hsc_ptr -> peekByteOff hsc_ptr 48) p
{-# LINE 581 "Graphics/X11/Xlib/Extras.hsc" #-}
return $ UnmapEvent
{ ev_event_type = type_
, ev_serial = serial
, ev_send_event = send_event
, ev_event_display = display
, ev_event = event
, ev_window = window
, ev_from_configure = from_configure
}
| type_ == enterNotify || type_ == leaveNotify -> do
window <- (\hsc_ptr -> peekByteOff hsc_ptr 32) p
{-# LINE 596 "Graphics/X11/Xlib/Extras.hsc" #-}
root <- (\hsc_ptr -> peekByteOff hsc_ptr 40) p
{-# LINE 597 "Graphics/X11/Xlib/Extras.hsc" #-}
subwindow <- (\hsc_ptr -> peekByteOff hsc_ptr 48) p
{-# LINE 598 "Graphics/X11/Xlib/Extras.hsc" #-}
time <- (\hsc_ptr -> peekByteOff hsc_ptr 56) p
{-# LINE 599 "Graphics/X11/Xlib/Extras.hsc" #-}
x <- (\hsc_ptr -> peekByteOff hsc_ptr 64) p
{-# LINE 600 "Graphics/X11/Xlib/Extras.hsc" #-}
y <- (\hsc_ptr -> peekByteOff hsc_ptr 68) p
{-# LINE 601 "Graphics/X11/Xlib/Extras.hsc" #-}
x_root <- (\hsc_ptr -> peekByteOff hsc_ptr 72) p
{-# LINE 602 "Graphics/X11/Xlib/Extras.hsc" #-}
y_root <- (\hsc_ptr -> peekByteOff hsc_ptr 76) p
{-# LINE 603 "Graphics/X11/Xlib/Extras.hsc" #-}
mode <- (\hsc_ptr -> peekByteOff hsc_ptr 80) p
{-# LINE 604 "Graphics/X11/Xlib/Extras.hsc" #-}
detail <- (\hsc_ptr -> peekByteOff hsc_ptr 84) p
{-# LINE 605 "Graphics/X11/Xlib/Extras.hsc" #-}
same_screen <- (\hsc_ptr -> peekByteOff hsc_ptr 88) p
{-# LINE 606 "Graphics/X11/Xlib/Extras.hsc" #-}
focus <- (\hsc_ptr -> peekByteOff hsc_ptr 92) p
{-# LINE 607 "Graphics/X11/Xlib/Extras.hsc" #-}
state <- ((\hsc_ptr -> peekByteOff hsc_ptr 96) p) :: IO CUInt
{-# LINE 608 "Graphics/X11/Xlib/Extras.hsc" #-}
return $ CrossingEvent
{ ev_event_type = type_
, ev_serial = serial
, ev_send_event = send_event
, ev_event_display = display
, ev_window = window
, ev_root = root
, ev_subwindow = subwindow
, ev_time = time
, ev_x = x
, ev_y = y
, ev_x_root = x_root
, ev_y_root = y_root
, ev_mode = mode
, ev_detail = detail
, ev_same_screen = same_screen
, ev_focus = focus
, ev_state = fromIntegral state
}
| type_ == selectionRequest -> do
owner <- (\hsc_ptr -> peekByteOff hsc_ptr 32) p
{-# LINE 634 "Graphics/X11/Xlib/Extras.hsc" #-}
requestor <- (\hsc_ptr -> peekByteOff hsc_ptr 40) p
{-# LINE 635 "Graphics/X11/Xlib/Extras.hsc" #-}
selection <- (\hsc_ptr -> peekByteOff hsc_ptr 48) p
{-# LINE 636 "Graphics/X11/Xlib/Extras.hsc" #-}
target <- (\hsc_ptr -> peekByteOff hsc_ptr 56) p
{-# LINE 637 "Graphics/X11/Xlib/Extras.hsc" #-}
property <- (\hsc_ptr -> peekByteOff hsc_ptr 64) p
{-# LINE 638 "Graphics/X11/Xlib/Extras.hsc" #-}
time <- (\hsc_ptr -> peekByteOff hsc_ptr 72) p
{-# LINE 639 "Graphics/X11/Xlib/Extras.hsc" #-}
return $ SelectionRequest
{ ev_event_type = type_
, ev_serial = serial
, ev_send_event = send_event
, ev_event_display = display
, ev_owner = owner
, ev_requestor = requestor
, ev_selection = selection
, ev_target = target
, ev_property = property
, ev_time = time
}
| type_ == selectionClear -> do
window <- (\hsc_ptr -> peekByteOff hsc_ptr 32) p
{-# LINE 657 "Graphics/X11/Xlib/Extras.hsc" #-}
atom <- (\hsc_ptr -> peekByteOff hsc_ptr 40) p
{-# LINE 658 "Graphics/X11/Xlib/Extras.hsc" #-}
time <- (\hsc_ptr -> peekByteOff hsc_ptr 48) p
{-# LINE 659 "Graphics/X11/Xlib/Extras.hsc" #-}
return $ SelectionClear
{ ev_event_type = type_
, ev_serial = serial
, ev_send_event = send_event
, ev_event_display = display
, ev_window = window
, ev_selection = atom
, ev_time = time
}
| type_ == propertyNotify -> do
window <- (\hsc_ptr -> peekByteOff hsc_ptr 32) p
{-# LINE 673 "Graphics/X11/Xlib/Extras.hsc" #-}
atom <- (\hsc_ptr -> peekByteOff hsc_ptr 40) p
{-# LINE 674 "Graphics/X11/Xlib/Extras.hsc" #-}
time <- (\hsc_ptr -> peekByteOff hsc_ptr 48) p
{-# LINE 675 "Graphics/X11/Xlib/Extras.hsc" #-}
state <- (\hsc_ptr -> peekByteOff hsc_ptr 56) p
{-# LINE 676 "Graphics/X11/Xlib/Extras.hsc" #-}
return $ PropertyEvent
{ ev_event_type = type_
, ev_serial = serial
, ev_send_event = send_event
, ev_event_display = display
, ev_window = window
, ev_atom = atom
, ev_time = time
, ev_propstate = state
}
| type_ == expose -> do
window <- (\hsc_ptr -> peekByteOff hsc_ptr 32) p
{-# LINE 692 "Graphics/X11/Xlib/Extras.hsc" #-}
x <- (\hsc_ptr -> peekByteOff hsc_ptr 40) p
{-# LINE 693 "Graphics/X11/Xlib/Extras.hsc" #-}
y <- (\hsc_ptr -> peekByteOff hsc_ptr 44) p
{-# LINE 694 "Graphics/X11/Xlib/Extras.hsc" #-}
width <- (\hsc_ptr -> peekByteOff hsc_ptr 48) p
{-# LINE 695 "Graphics/X11/Xlib/Extras.hsc" #-}
height <- (\hsc_ptr -> peekByteOff hsc_ptr 52) p
{-# LINE 696 "Graphics/X11/Xlib/Extras.hsc" #-}
count <- (\hsc_ptr -> peekByteOff hsc_ptr 56) p
{-# LINE 697 "Graphics/X11/Xlib/Extras.hsc" #-}
return $ ExposeEvent
{ ev_event_type = type_
, ev_serial = serial
, ev_send_event = send_event
, ev_event_display = display
, ev_window = window
, ev_x = x
, ev_y = y
, ev_width = width
, ev_height = height
, ev_count = count
}
| type_ == clientMessage -> do
window <- (\hsc_ptr -> peekByteOff hsc_ptr 32) p
{-# LINE 715 "Graphics/X11/Xlib/Extras.hsc" #-}
message_type <- (\hsc_ptr -> peekByteOff hsc_ptr 40) p
{-# LINE 716 "Graphics/X11/Xlib/Extras.hsc" #-}
format <- (\hsc_ptr -> peekByteOff hsc_ptr 48) p
{-# LINE 717 "Graphics/X11/Xlib/Extras.hsc" #-}
let datPtr = (\hsc_ptr -> hsc_ptr `plusPtr` 56) p
{-# LINE 718 "Graphics/X11/Xlib/Extras.hsc" #-}
dat <- case (format::CInt) of
8 -> do a <- peekArray 20 datPtr
return $ map fromIntegral (a::[Word8])
16 -> do a <- peekArray 10 datPtr
return $ map fromIntegral (a::[Word16])
32 -> do a <- peekArray 5 datPtr
return $ map fromIntegral (a::[CLong])
_ -> error "X11.Extras.clientMessage: illegal value"
return $ ClientMessageEvent
{ ev_event_type = type_
, ev_serial = serial
, ev_send_event = send_event
, ev_event_display = display
, ev_window = window
, ev_message_type = message_type
, ev_data = dat
}
| rrHasExtension &&
type_ == rrEventBase + rrScreenChangeNotify -> do
window <- (\hsc_ptr -> peekByteOff hsc_ptr 32) p
{-# LINE 742 "Graphics/X11/Xlib/Extras.hsc" #-}
root <- (\hsc_ptr -> peekByteOff hsc_ptr 40) p
{-# LINE 743 "Graphics/X11/Xlib/Extras.hsc" #-}
timestamp <- (\hsc_ptr -> peekByteOff hsc_ptr 48) p
{-# LINE 744 "Graphics/X11/Xlib/Extras.hsc" #-}
config_timestamp <- (\hsc_ptr -> peekByteOff hsc_ptr 56) p
{-# LINE 745 "Graphics/X11/Xlib/Extras.hsc" #-}
size_index <- (\hsc_ptr -> peekByteOff hsc_ptr 56) p
{-# LINE 746 "Graphics/X11/Xlib/Extras.hsc" #-}
subpixel_order <- (\hsc_ptr -> peekByteOff hsc_ptr 66) p
{-# LINE 747 "Graphics/X11/Xlib/Extras.hsc" #-}
rotation <- (\hsc_ptr -> peekByteOff hsc_ptr 68) p
{-# LINE 748 "Graphics/X11/Xlib/Extras.hsc" #-}
width <- (\hsc_ptr -> peekByteOff hsc_ptr 72) p
{-# LINE 749 "Graphics/X11/Xlib/Extras.hsc" #-}
height <- (\hsc_ptr -> peekByteOff hsc_ptr 76) p
{-# LINE 750 "Graphics/X11/Xlib/Extras.hsc" #-}
mwidth <- (\hsc_ptr -> peekByteOff hsc_ptr 80) p
{-# LINE 751 "Graphics/X11/Xlib/Extras.hsc" #-}
mheight <- (\hsc_ptr -> peekByteOff hsc_ptr 84) p
{-# LINE 752 "Graphics/X11/Xlib/Extras.hsc" #-}
return $ RRScreenChangeNotifyEvent
{ ev_event_type = type_
, ev_serial = serial
, ev_send_event = send_event
, ev_event_display = display
, ev_window = window
, ev_root = root
, ev_timestamp = timestamp
, ev_config_timestamp = config_timestamp
, ev_size_index = size_index
, ev_subpixel_order = subpixel_order
, ev_rotation = rotation
, ev_width = width
, ev_height = height
, ev_mwidth = mwidth
, ev_mheight = mheight
}
| rrHasExtension &&
type_ == rrEventBase + rrNotify -> do
window <- (\hsc_ptr -> peekByteOff hsc_ptr 32) p
{-# LINE 776 "Graphics/X11/Xlib/Extras.hsc" #-}
subtype <- (\hsc_ptr -> peekByteOff hsc_ptr 40) p
{-# LINE 777 "Graphics/X11/Xlib/Extras.hsc" #-}
let subtype_ = fromIntegral subtype_
case () of
_ | subtype_ == rrNotifyCrtcChange -> do
crtc <- (\hsc_ptr -> peekByteOff hsc_ptr 48) p
{-# LINE 781 "Graphics/X11/Xlib/Extras.hsc" #-}
mode <- (\hsc_ptr -> peekByteOff hsc_ptr 56) p
{-# LINE 782 "Graphics/X11/Xlib/Extras.hsc" #-}
rotation <- (\hsc_ptr -> peekByteOff hsc_ptr 64) p
{-# LINE 783 "Graphics/X11/Xlib/Extras.hsc" #-}
x <- (\hsc_ptr -> peekByteOff hsc_ptr 68) p
{-# LINE 784 "Graphics/X11/Xlib/Extras.hsc" #-}
y <- (\hsc_ptr -> peekByteOff hsc_ptr 72) p
{-# LINE 785 "Graphics/X11/Xlib/Extras.hsc" #-}
width <- (\hsc_ptr -> peekByteOff hsc_ptr 76) p
{-# LINE 786 "Graphics/X11/Xlib/Extras.hsc" #-}
height <- (\hsc_ptr -> peekByteOff hsc_ptr 80) p
{-# LINE 787 "Graphics/X11/Xlib/Extras.hsc" #-}
return $ RRCrtcChangeNotifyEvent
{ ev_event_type = type_
, ev_serial = serial
, ev_send_event = send_event
, ev_event_display = display
, ev_window = window
, ev_subtype = subtype
, ev_crtc = crtc
, ev_rr_mode = mode
, ev_rotation = rotation
, ev_x = x
, ev_y = y
, ev_rr_width = width
, ev_rr_height = height
}
| subtype_ == rrNotifyOutputChange -> do
output <- (\hsc_ptr -> peekByteOff hsc_ptr 48) p
{-# LINE 805 "Graphics/X11/Xlib/Extras.hsc" #-}
crtc <- (\hsc_ptr -> peekByteOff hsc_ptr 56) p
{-# LINE 806 "Graphics/X11/Xlib/Extras.hsc" #-}
mode <- (\hsc_ptr -> peekByteOff hsc_ptr 64) p
{-# LINE 807 "Graphics/X11/Xlib/Extras.hsc" #-}
rotation <- (\hsc_ptr -> peekByteOff hsc_ptr 72) p
{-# LINE 808 "Graphics/X11/Xlib/Extras.hsc" #-}
connection <- (\hsc_ptr -> peekByteOff hsc_ptr 74) p
{-# LINE 809 "Graphics/X11/Xlib/Extras.hsc" #-}
subpixel_order <- (\hsc_ptr -> peekByteOff hsc_ptr 76) p
{-# LINE 810 "Graphics/X11/Xlib/Extras.hsc" #-}
return $ RROutputChangeNotifyEvent
{ ev_event_type = type_
, ev_serial = serial
, ev_send_event = send_event
, ev_event_display = display
, ev_window = window
, ev_subtype = subtype
, ev_output = output
, ev_crtc = crtc
, ev_rr_mode = mode
, ev_rotation = rotation
, ev_connection = connection
, ev_subpixel_order = subpixel_order
}
| subtype_ == rrNotifyOutputProperty -> do
output <- (\hsc_ptr -> peekByteOff hsc_ptr 48) p
{-# LINE 827 "Graphics/X11/Xlib/Extras.hsc" #-}
property <- (\hsc_ptr -> peekByteOff hsc_ptr 56) p
{-# LINE 828 "Graphics/X11/Xlib/Extras.hsc" #-}
timestamp <- (\hsc_ptr -> peekByteOff hsc_ptr 64) p
{-# LINE 829 "Graphics/X11/Xlib/Extras.hsc" #-}
state <- (\hsc_ptr -> peekByteOff hsc_ptr 72) p
{-# LINE 830 "Graphics/X11/Xlib/Extras.hsc" #-}
return $ RROutputPropertyNotifyEvent
{ ev_event_type = type_
, ev_serial = serial
, ev_send_event = send_event
, ev_event_display = display
, ev_window = window
, ev_subtype = subtype
, ev_output = output
, ev_property = property
, ev_timestamp = timestamp
, ev_rr_state = state
}
| otherwise -> do
return $ RRNotifyEvent
{ ev_event_type = type_
, ev_serial = serial
, ev_send_event = send_event
, ev_event_display = display
, ev_window = window
, ev_subtype = subtype
}
{-# LINE 868 "Graphics/X11/Xlib/Extras.hsc" #-}
| otherwise -> do
window <- (\hsc_ptr -> peekByteOff hsc_ptr 32) p
{-# LINE 873 "Graphics/X11/Xlib/Extras.hsc" #-}
return $ AnyEvent
{ ev_event_type = type_
, ev_serial = serial
, ev_send_event = send_event
, ev_event_display = display
, ev_window = window
}
data WindowChanges = WindowChanges
{ wc_x :: CInt
, wc_y :: CInt
, wc_width :: CInt
, wc_height:: CInt
, wc_border_width :: CInt
, wc_sibling :: Window
, wc_stack_mode :: CInt
}
instance Storable WindowChanges where
sizeOf _ = (40)
{-# LINE 893 "Graphics/X11/Xlib/Extras.hsc" #-}
alignment _ = alignment (undefined :: CInt)
poke p wc = do
(\hsc_ptr -> pokeByteOff hsc_ptr 0) p $ wc_x wc
{-# LINE 899 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 4) p $ wc_y wc
{-# LINE 900 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 8) p $ wc_width wc
{-# LINE 901 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 12) p $ wc_height wc
{-# LINE 902 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 16) p $ wc_border_width wc
{-# LINE 903 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 24) p $ wc_sibling wc
{-# LINE 904 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 32) p $ wc_stack_mode wc
{-# LINE 905 "Graphics/X11/Xlib/Extras.hsc" #-}
peek p = return WindowChanges
`ap` ((\hsc_ptr -> peekByteOff hsc_ptr 0) p)
{-# LINE 908 "Graphics/X11/Xlib/Extras.hsc" #-}
`ap` ((\hsc_ptr -> peekByteOff hsc_ptr 4) p)
{-# LINE 909 "Graphics/X11/Xlib/Extras.hsc" #-}
`ap` ((\hsc_ptr -> peekByteOff hsc_ptr 8) p)
{-# LINE 910 "Graphics/X11/Xlib/Extras.hsc" #-}
`ap` ((\hsc_ptr -> peekByteOff hsc_ptr 12) p)
{-# LINE 911 "Graphics/X11/Xlib/Extras.hsc" #-}
`ap` ((\hsc_ptr -> peekByteOff hsc_ptr 16) p)
{-# LINE 912 "Graphics/X11/Xlib/Extras.hsc" #-}
`ap` ((\hsc_ptr -> peekByteOff hsc_ptr 24) p)
{-# LINE 913 "Graphics/X11/Xlib/Extras.hsc" #-}
`ap` ((\hsc_ptr -> peekByteOff hsc_ptr 32) p)
{-# LINE 914 "Graphics/X11/Xlib/Extras.hsc" #-}
none :: XID
none = 0
{-# LINE 921 "Graphics/X11/Xlib/Extras.hsc" #-}
anyButton :: Button
anyButton = 0
{-# LINE 924 "Graphics/X11/Xlib/Extras.hsc" #-}
anyKey :: KeyCode
anyKey = toEnum 0
{-# LINE 927 "Graphics/X11/Xlib/Extras.hsc" #-}
currentTime :: Time
currentTime = 0
{-# LINE 930 "Graphics/X11/Xlib/Extras.hsc" #-}
foreign import ccall unsafe "XlibExtras.h XConfigureWindow"
xConfigureWindow :: Display -> Window -> CULong -> Ptr WindowChanges -> IO CInt
foreign import ccall unsafe "XlibExtras.h XKillClient"
killClient :: Display -> Window -> IO CInt
configureWindow :: Display -> Window -> CULong -> WindowChanges -> IO ()
configureWindow d w m c = do
_ <- with c (xConfigureWindow d w m)
return ()
foreign import ccall unsafe "XlibExtras.h XQueryTree"
xQueryTree :: Display -> Window -> Ptr Window -> Ptr Window -> Ptr (Ptr Window) -> Ptr CInt -> IO Status
queryTree :: Display -> Window -> IO (Window, Window, [Window])
queryTree d w =
alloca $ \root_return ->
alloca $ \parent_return ->
alloca $ \children_return ->
alloca $ \nchildren_return -> do
_ <- xQueryTree d w root_return parent_return children_return nchildren_return
p <- peek children_return
n <- fmap fromIntegral $ peek nchildren_return
ws <- peekArray n p
_ <- xFree p
liftM3 (,,) (peek root_return) (peek parent_return) (return ws)
data WindowAttributes = WindowAttributes
{ wa_x, wa_y, wa_width, wa_height, wa_border_width :: CInt
, wa_colormap :: Colormap
, wa_map_installed :: Bool
, wa_map_state :: CInt
, wa_override_redirect :: Bool
}
waIsUnmapped, waIsUnviewable, waIsViewable :: CInt
waIsUnmapped = fromIntegral ( 0 :: CInt )
{-# LINE 976 "Graphics/X11/Xlib/Extras.hsc" #-}
waIsUnviewable = fromIntegral ( 1 :: CInt )
{-# LINE 977 "Graphics/X11/Xlib/Extras.hsc" #-}
waIsViewable = fromIntegral ( 2 :: CInt )
{-# LINE 978 "Graphics/X11/Xlib/Extras.hsc" #-}
instance Storable WindowAttributes where
alignment _ = alignment (undefined :: CInt)
sizeOf _ = (136)
{-# LINE 983 "Graphics/X11/Xlib/Extras.hsc" #-}
peek p = return WindowAttributes
`ap` ((\hsc_ptr -> peekByteOff hsc_ptr 0) p)
{-# LINE 985 "Graphics/X11/Xlib/Extras.hsc" #-}
`ap` ((\hsc_ptr -> peekByteOff hsc_ptr 4) p)
{-# LINE 986 "Graphics/X11/Xlib/Extras.hsc" #-}
`ap` ((\hsc_ptr -> peekByteOff hsc_ptr 8) p)
{-# LINE 987 "Graphics/X11/Xlib/Extras.hsc" #-}
`ap` ((\hsc_ptr -> peekByteOff hsc_ptr 12) p)
{-# LINE 988 "Graphics/X11/Xlib/Extras.hsc" #-}
`ap` ((\hsc_ptr -> peekByteOff hsc_ptr 16) p)
{-# LINE 989 "Graphics/X11/Xlib/Extras.hsc" #-}
`ap` ((\hsc_ptr -> peekByteOff hsc_ptr 80) p)
{-# LINE 990 "Graphics/X11/Xlib/Extras.hsc" #-}
`ap` ((\hsc_ptr -> peekByteOff hsc_ptr 88) p)
{-# LINE 991 "Graphics/X11/Xlib/Extras.hsc" #-}
`ap` ((\hsc_ptr -> peekByteOff hsc_ptr 92) p)
{-# LINE 992 "Graphics/X11/Xlib/Extras.hsc" #-}
`ap` ((\hsc_ptr -> peekByteOff hsc_ptr 120) p)
{-# LINE 993 "Graphics/X11/Xlib/Extras.hsc" #-}
poke p wa = do
(\hsc_ptr -> pokeByteOff hsc_ptr 0) p $ wa_x wa
{-# LINE 995 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 4) p $ wa_y wa
{-# LINE 996 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 8) p $ wa_width wa
{-# LINE 997 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 12) p $ wa_height wa
{-# LINE 998 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 16) p $ wa_border_width wa
{-# LINE 999 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 80) p $ wa_colormap wa
{-# LINE 1000 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 88) p $ wa_map_installed wa
{-# LINE 1001 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 92) p $ wa_map_state wa
{-# LINE 1002 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 120) p $ wa_override_redirect wa
{-# LINE 1003 "Graphics/X11/Xlib/Extras.hsc" #-}
foreign import ccall unsafe "XlibExtras.h XGetWindowAttributes"
xGetWindowAttributes :: Display -> Window -> Ptr (WindowAttributes) -> IO Status
getWindowAttributes :: Display -> Window -> IO WindowAttributes
getWindowAttributes d w = alloca $ \p -> do
_ <- throwIfZero "getWindowAttributes" $ xGetWindowAttributes d w p
peek p
foreign import ccall unsafe "XlibExtras.h XChangeWindowAttributes"
changeWindowAttributes :: Display -> Window -> AttributeMask -> Ptr SetWindowAttributes -> IO ()
withServer :: Display -> IO () -> IO ()
withServer dpy f = do
grabServer dpy
f
ungrabServer dpy
data TextProperty = TextProperty {
tp_value :: CString,
tp_encoding :: Atom,
tp_format :: CInt,
tp_nitems :: Word64
{-# LINE 1028 "Graphics/X11/Xlib/Extras.hsc" #-}
}
instance Storable TextProperty where
sizeOf _ = (32)
{-# LINE 1032 "Graphics/X11/Xlib/Extras.hsc" #-}
alignment _ = alignment (undefined :: Word64)
{-# LINE 1033 "Graphics/X11/Xlib/Extras.hsc" #-}
peek p = TextProperty `fmap` (\hsc_ptr -> peekByteOff hsc_ptr 0) p
{-# LINE 1034 "Graphics/X11/Xlib/Extras.hsc" #-}
`ap` (\hsc_ptr -> peekByteOff hsc_ptr 8) p
{-# LINE 1035 "Graphics/X11/Xlib/Extras.hsc" #-}
`ap` (\hsc_ptr -> peekByteOff hsc_ptr 16) p
{-# LINE 1036 "Graphics/X11/Xlib/Extras.hsc" #-}
`ap` (\hsc_ptr -> peekByteOff hsc_ptr 24) p
{-# LINE 1037 "Graphics/X11/Xlib/Extras.hsc" #-}
poke p (TextProperty val enc fmt nitems) = do
(\hsc_ptr -> pokeByteOff hsc_ptr 0) p val
{-# LINE 1039 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 8) p enc
{-# LINE 1040 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 16) p fmt
{-# LINE 1041 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 24) p nitems
{-# LINE 1042 "Graphics/X11/Xlib/Extras.hsc" #-}
foreign import ccall unsafe "XlibExtras.h XGetTextProperty"
xGetTextProperty :: Display -> Window -> Ptr TextProperty -> Atom -> IO Status
getTextProperty :: Display -> Window -> Atom -> IO TextProperty
getTextProperty d w a =
alloca $ \textp -> do
_ <- throwIf (0==) (const "getTextProperty") $ xGetTextProperty d w textp a
peek textp
foreign import ccall unsafe "XlibExtras.h XwcTextPropertyToTextList"
xwcTextPropertyToTextList :: Display -> Ptr TextProperty -> Ptr (Ptr CWString) -> Ptr CInt -> IO CInt
wcTextPropertyToTextList :: Display -> TextProperty -> IO [String]
wcTextPropertyToTextList d prop =
alloca $ \listp ->
alloca $ \countp ->
with prop $ \propp -> do
_ <- throwIf (success>) (const "wcTextPropertyToTextList") $
xwcTextPropertyToTextList d propp listp countp
count <- peek countp
list <- peek listp
texts <- flip mapM [0..fromIntegral count - 1] $ \i ->
peekElemOff list i >>= peekCWString
wcFreeStringList list
return texts
foreign import ccall unsafe "XlibExtras.h XwcFreeStringList"
wcFreeStringList :: Ptr CWString -> IO ()
newtype FontSet = FontSet (Ptr FontSet)
deriving (Eq, Ord, Show)
foreign import ccall unsafe "XlibExtras.h XCreateFontSet"
xCreateFontSet :: Display -> CString -> Ptr (Ptr CString) -> Ptr CInt -> Ptr CString -> IO (Ptr FontSet)
createFontSet :: Display -> String -> IO ([String], String, FontSet)
createFontSet d fn =
withCString fn $ \fontp ->
alloca $ \listp ->
alloca $ \countp ->
alloca $ \defp -> do
fs <- throwIfNull "createFontSet" $
xCreateFontSet d fontp listp countp defp
count <- peek countp
list <- peek listp
missing <- flip mapM [0..fromIntegral count - 1] $ \i ->
peekElemOff list i >>= peekCString
def <- peek defp >>= peekCString
freeStringList list
return (missing, def, FontSet fs)
foreign import ccall unsafe "XlibExtras.h XFreeStringList"
freeStringList :: Ptr CString -> IO ()
foreign import ccall unsafe "XlibExtras.h XFreeFontSet"
freeFontSet :: Display -> FontSet -> IO ()
foreign import ccall unsafe "XlibExtras.h XwcTextExtents"
xwcTextExtents :: FontSet -> CWString -> CInt -> Ptr Rectangle -> Ptr Rectangle -> IO CInt
wcTextExtents :: FontSet -> String -> (Rectangle, Rectangle)
wcTextExtents fs text = unsafePerformIO $
withCWStringLen text $ \(textp, len) ->
alloca $ \inkp ->
alloca $ \logicalp -> do
_ <- xwcTextExtents fs textp (fromIntegral len) inkp logicalp
(,) `fmap` peek inkp `ap` peek logicalp
foreign import ccall unsafe "XlibExtras.h XwcDrawString"
xwcDrawString :: Display -> Drawable -> FontSet -> GC -> Position -> Position -> CWString -> CInt -> IO ()
wcDrawString :: Display -> Drawable -> FontSet -> GC -> Position -> Position -> String -> IO ()
wcDrawString d w fs gc x y =
flip withCWStringLen $ \(s, len) ->
xwcDrawString d w fs gc x y s (fromIntegral len)
foreign import ccall unsafe "XlibExtras.h XwcDrawImageString"
xwcDrawImageString :: Display -> Drawable -> FontSet -> GC -> Position -> Position -> CWString -> CInt -> IO ()
wcDrawImageString :: Display -> Drawable -> FontSet -> GC -> Position -> Position -> String -> IO ()
wcDrawImageString d w fs gc x y =
flip withCWStringLen $ \(s, len) ->
xwcDrawImageString d w fs gc x y s (fromIntegral len)
foreign import ccall unsafe "XlibExtras.h XwcTextEscapement"
xwcTextEscapement :: FontSet -> CWString -> CInt -> IO Int32
wcTextEscapement :: FontSet -> String -> Int32
wcTextEscapement font_set string = unsafePerformIO $
withCWStringLen string $ \ (c_string, len) ->
xwcTextEscapement font_set c_string (fromIntegral len)
foreign import ccall unsafe "XlibExtras.h XFetchName"
xFetchName :: Display -> Window -> Ptr CString -> IO Status
fetchName :: Display -> Window -> IO (Maybe String)
fetchName d w = alloca $ \p -> do
_ <- xFetchName d w p
cstr <- peek p
if cstr == nullPtr
then return Nothing
else do
str <- peekCString cstr
_ <- xFree cstr
return $ Just str
foreign import ccall unsafe "XlibExtras.h XGetTransientForHint"
xGetTransientForHint :: Display -> Window -> Ptr Window -> IO Status
getTransientForHint :: Display -> Window -> IO (Maybe Window)
getTransientForHint d w = alloca $ \wp -> do
status <- xGetTransientForHint d w wp
if status == 0
then return Nothing
else Just `liftM` peek wp
getWMProtocols :: Display -> Window -> IO [Atom]
getWMProtocols display w = do
alloca $ \atom_ptr_ptr ->
alloca $ \count_ptr -> do
st <- xGetWMProtocols display w atom_ptr_ptr count_ptr
if st == 0
then return []
else do sz <- peek count_ptr
atom_ptr <- peek atom_ptr_ptr
atoms <- peekArray (fromIntegral sz) atom_ptr
_ <- xFree atom_ptr
return atoms
foreign import ccall unsafe "HsXlib.h XGetWMProtocols"
xGetWMProtocols :: Display -> Window -> Ptr (Ptr Atom) -> Ptr CInt -> IO Status
setEventType :: XEventPtr -> EventType -> IO ()
setEventType = (\hsc_ptr -> pokeByteOff hsc_ptr 0)
{-# LINE 1206 "Graphics/X11/Xlib/Extras.hsc" #-}
setSelectionNotify :: XEventPtr -> Window -> Atom -> Atom -> Atom -> Time -> IO ()
setSelectionNotify p requestor selection target property time = do
setEventType p selectionNotify
(\hsc_ptr -> pokeByteOff hsc_ptr 32) p requestor
{-# LINE 1225 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 40) p selection
{-# LINE 1226 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 48) p target
{-# LINE 1227 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 56) p property
{-# LINE 1228 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 64) p time
{-# LINE 1229 "Graphics/X11/Xlib/Extras.hsc" #-}
setClientMessageEvent :: XEventPtr -> Window -> Atom -> CInt -> Atom -> Time -> IO ()
setClientMessageEvent p window message_type format l_0_ l_1_ = do
(\hsc_ptr -> pokeByteOff hsc_ptr 32) p window
{-# LINE 1235 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 40) p message_type
{-# LINE 1236 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 48) p format
{-# LINE 1237 "Graphics/X11/Xlib/Extras.hsc" #-}
let datap = (\hsc_ptr -> hsc_ptr `plusPtr` 56) p :: Ptr CLong
{-# LINE 1238 "Graphics/X11/Xlib/Extras.hsc" #-}
poke datap (fromIntegral l_0_)
pokeElemOff datap 1 (fromIntegral l_1_)
return ()
setConfigureEvent :: XEventPtr -> Window -> Window -> CInt -> CInt -> CInt -> CInt -> CInt -> Window -> Bool -> IO ()
setConfigureEvent p ev win x y w h bw abv org = do
(\hsc_ptr -> pokeByteOff hsc_ptr 32) p ev
{-# LINE 1246 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 40) p win
{-# LINE 1247 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 48) p x
{-# LINE 1248 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 52) p y
{-# LINE 1249 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 56) p w
{-# LINE 1250 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 60) p h
{-# LINE 1251 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 64) p bw
{-# LINE 1252 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 72) p abv
{-# LINE 1253 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 80) p (if org then 1 else 0 :: CInt)
{-# LINE 1254 "Graphics/X11/Xlib/Extras.hsc" #-}
setKeyEvent :: XEventPtr -> Window -> Window -> Window -> KeyMask -> KeyCode -> Bool -> IO ()
setKeyEvent p win root subwin state keycode sameScreen = do
(\hsc_ptr -> pokeByteOff hsc_ptr 32) p win
{-# LINE 1258 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 40) p root
{-# LINE 1259 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 48) p subwin
{-# LINE 1260 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 56) p currentTime
{-# LINE 1261 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 64) p (1 :: CInt)
{-# LINE 1262 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 68) p (1 :: CInt)
{-# LINE 1263 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 72) p (1 :: CInt)
{-# LINE 1264 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 76) p (1 :: CInt)
{-# LINE 1265 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 80) p state
{-# LINE 1266 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 84) p keycode
{-# LINE 1267 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 88) p sameScreen
{-# LINE 1268 "Graphics/X11/Xlib/Extras.hsc" #-}
return ()
foreign import ccall unsafe "XlibExtras.h x11_extras_set_error_handler"
xSetErrorHandler :: IO ()
refreshKeyboardMapping :: Event -> IO ()
refreshKeyboardMapping ev@(MappingNotifyEvent {ev_event_display = (Display d)})
= allocaBytes (56) $ \p -> do
{-# LINE 1302 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 0) p $ ev_event_type ev
{-# LINE 1303 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 8) p $ ev_serial ev
{-# LINE 1304 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 16) p $ ev_send_event ev
{-# LINE 1305 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 24) p $ d
{-# LINE 1306 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 32) p $ ev_window ev
{-# LINE 1307 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 40) p $ ev_request ev
{-# LINE 1308 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 44) p $ ev_first_keycode ev
{-# LINE 1309 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 48) p $ ev_count ev
{-# LINE 1310 "Graphics/X11/Xlib/Extras.hsc" #-}
_ <- xRefreshKeyboardMapping p
return ()
refreshKeyboardMapping _ = return ()
foreign import ccall unsafe "XlibExtras.h XRefreshKeyboardMapping"
xRefreshKeyboardMapping :: Ptr () -> IO CInt
anyPropertyType :: Atom
anyPropertyType = 0
{-# LINE 1321 "Graphics/X11/Xlib/Extras.hsc" #-}
foreign import ccall unsafe "XlibExtras.h XChangeProperty"
xChangeProperty :: Display -> Window -> Atom -> Atom -> CInt -> CInt -> Ptr CUChar -> CInt -> IO Status
foreign import ccall unsafe "XlibExtras.h XDeleteProperty"
xDeleteProperty :: Display -> Window -> Atom -> IO Status
foreign import ccall unsafe "XlibExtras.h XGetWindowProperty"
xGetWindowProperty :: Display -> Window -> Atom -> CLong -> CLong -> Bool -> Atom -> Ptr Atom -> Ptr CInt -> Ptr CULong -> Ptr CULong -> Ptr (Ptr CUChar) -> IO Status
rawGetWindowProperty :: Storable a => Int -> Display -> Atom -> Window -> IO (Maybe [a])
rawGetWindowProperty bits d atom w =
alloca $ \actual_type_return ->
alloca $ \actual_format_return ->
alloca $ \nitems_return ->
alloca $ \bytes_after_return ->
alloca $ \prop_return -> do
ret <- xGetWindowProperty d w atom 0 0xFFFFFFFF False anyPropertyType
actual_type_return
actual_format_return
nitems_return
bytes_after_return
prop_return
if ret /= 0
then return Nothing
else do
prop_ptr <- peek prop_return
actual_format <- fromIntegral `fmap` peek actual_format_return
nitems <- fromIntegral `fmap` peek nitems_return
getprop prop_ptr nitems actual_format
where
getprop prop_ptr nitems actual_format
| actual_format == 0 = return Nothing
| actual_format /= bits = xFree prop_ptr >> return Nothing
| otherwise = do
retval <- peekArray nitems (castPtr prop_ptr)
_ <- xFree prop_ptr
return $ Just retval
getWindowProperty8 :: Display -> Atom -> Window -> IO (Maybe [CChar])
getWindowProperty8 = rawGetWindowProperty 8
getWindowProperty16 :: Display -> Atom -> Window -> IO (Maybe [CShort])
getWindowProperty16 = rawGetWindowProperty 16
getWindowProperty32 :: Display -> Atom -> Window -> IO (Maybe [CLong])
getWindowProperty32 = rawGetWindowProperty 32
changeProperty8 :: Display -> Window -> Atom -> Atom -> CInt -> [CChar] -> IO ()
changeProperty8 dpy w prop typ mode dat =
withArrayLen dat $ \ len ptr -> do
_ <- xChangeProperty dpy w prop typ 8 mode (castPtr ptr) (fromIntegral len)
return ()
changeProperty16 :: Display -> Window -> Atom -> Atom -> CInt -> [CShort] -> IO ()
changeProperty16 dpy w prop typ mode dat =
withArrayLen dat $ \ len ptr -> do
_ <- xChangeProperty dpy w prop typ 16 mode (castPtr ptr) (fromIntegral len)
return ()
changeProperty32 :: Display -> Window -> Atom -> Atom -> CInt -> [CLong] -> IO ()
changeProperty32 dpy w prop typ mode dat =
withArrayLen dat $ \ len ptr -> do
_ <- xChangeProperty dpy w prop typ 32 mode (castPtr ptr) (fromIntegral len)
return ()
propModeReplace, propModePrepend, propModeAppend :: CInt
propModeReplace = 0
{-# LINE 1392 "Graphics/X11/Xlib/Extras.hsc" #-}
propModePrepend = 1
{-# LINE 1393 "Graphics/X11/Xlib/Extras.hsc" #-}
propModeAppend = 2
{-# LINE 1394 "Graphics/X11/Xlib/Extras.hsc" #-}
deleteProperty :: Display -> Window -> Atom -> IO ()
deleteProperty dpy w prop = do
_ <- xDeleteProperty dpy w prop
return ()
foreign import ccall unsafe "XlibExtras.h XUnmapWindow"
xUnmapWindow :: Display -> Window -> IO CInt
unmapWindow :: Display -> Window -> IO ()
unmapWindow d w = xUnmapWindow d w >> return ()
data SizeHints = SizeHints
{ sh_min_size :: Maybe (Dimension, Dimension)
, sh_max_size :: Maybe (Dimension, Dimension)
, sh_resize_inc :: Maybe (Dimension, Dimension)
, sh_aspect :: Maybe ((Dimension, Dimension), (Dimension, Dimension))
, sh_base_size :: Maybe (Dimension, Dimension)
, sh_win_gravity :: Maybe (BitGravity)
}
pMinSizeBit, pMaxSizeBit, pResizeIncBit, pAspectBit, pBaseSizeBit, pWinGravityBit :: Int
pMinSizeBit = 4
pMaxSizeBit = 5
pResizeIncBit = 6
pAspectBit = 7
pBaseSizeBit = 8
pWinGravityBit = 9
instance Storable SizeHints where
alignment _ = alignment (undefined :: CInt)
sizeOf _ = (80)
{-# LINE 1431 "Graphics/X11/Xlib/Extras.hsc" #-}
poke p sh = do
let whenSet f x = maybe (return ()) x (f sh)
let pokeFlag b = do flag <- (\hsc_ptr -> peekByteOff hsc_ptr 0) p :: IO CLong
{-# LINE 1435 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 0) p (setBit flag b)
{-# LINE 1436 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 0) p (0 :: CLong)
{-# LINE 1437 "Graphics/X11/Xlib/Extras.hsc" #-}
whenSet sh_min_size $ \(w, h) -> do
pokeFlag pMinSizeBit
(\hsc_ptr -> pokeByteOff hsc_ptr 24) p w
{-# LINE 1440 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 28) p h
{-# LINE 1441 "Graphics/X11/Xlib/Extras.hsc" #-}
whenSet sh_max_size $ \(w, h) -> do
pokeFlag pMaxSizeBit
(\hsc_ptr -> pokeByteOff hsc_ptr 32) p w
{-# LINE 1444 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 36) p h
{-# LINE 1445 "Graphics/X11/Xlib/Extras.hsc" #-}
whenSet sh_resize_inc $ \(w, h) -> do
pokeFlag pResizeIncBit
(\hsc_ptr -> pokeByteOff hsc_ptr 40) p w
{-# LINE 1448 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 44) p h
{-# LINE 1449 "Graphics/X11/Xlib/Extras.hsc" #-}
whenSet sh_aspect $ \((minx, miny), (maxx, maxy)) -> do
pokeFlag pAspectBit
(\hsc_ptr -> pokeByteOff hsc_ptr 48) p minx
{-# LINE 1452 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 52) p miny
{-# LINE 1453 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 56) p maxx
{-# LINE 1454 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 60) p maxy
{-# LINE 1455 "Graphics/X11/Xlib/Extras.hsc" #-}
whenSet sh_base_size $ \(w, h) -> do
pokeFlag pBaseSizeBit
(\hsc_ptr -> pokeByteOff hsc_ptr 64) p w
{-# LINE 1458 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 68) p h
{-# LINE 1459 "Graphics/X11/Xlib/Extras.hsc" #-}
whenSet sh_win_gravity $ \g -> do
pokeFlag pWinGravityBit
(\hsc_ptr -> pokeByteOff hsc_ptr 72) p g
{-# LINE 1462 "Graphics/X11/Xlib/Extras.hsc" #-}
peek p = do
flags <- (\hsc_ptr -> peekByteOff hsc_ptr 0) p :: IO CLong
{-# LINE 1465 "Graphics/X11/Xlib/Extras.hsc" #-}
let whenBit n x = if testBit flags n then liftM Just x else return Nothing
return SizeHints
`ap` whenBit pMinSizeBit (do liftM2 (,) ((\hsc_ptr -> peekByteOff hsc_ptr 24) p)
{-# LINE 1468 "Graphics/X11/Xlib/Extras.hsc" #-}
((\hsc_ptr -> peekByteOff hsc_ptr 28) p))
{-# LINE 1469 "Graphics/X11/Xlib/Extras.hsc" #-}
`ap` whenBit pMaxSizeBit (do liftM2 (,) ((\hsc_ptr -> peekByteOff hsc_ptr 32) p)
{-# LINE 1470 "Graphics/X11/Xlib/Extras.hsc" #-}
((\hsc_ptr -> peekByteOff hsc_ptr 36) p))
{-# LINE 1471 "Graphics/X11/Xlib/Extras.hsc" #-}
`ap` whenBit pResizeIncBit (do liftM2 (,) ((\hsc_ptr -> peekByteOff hsc_ptr 40) p)
{-# LINE 1472 "Graphics/X11/Xlib/Extras.hsc" #-}
((\hsc_ptr -> peekByteOff hsc_ptr 44) p))
{-# LINE 1473 "Graphics/X11/Xlib/Extras.hsc" #-}
`ap` whenBit pAspectBit (do minx <- (\hsc_ptr -> peekByteOff hsc_ptr 48) p
{-# LINE 1474 "Graphics/X11/Xlib/Extras.hsc" #-}
miny <- (\hsc_ptr -> peekByteOff hsc_ptr 52) p
{-# LINE 1475 "Graphics/X11/Xlib/Extras.hsc" #-}
maxx <- (\hsc_ptr -> peekByteOff hsc_ptr 56) p
{-# LINE 1476 "Graphics/X11/Xlib/Extras.hsc" #-}
maxy <- (\hsc_ptr -> peekByteOff hsc_ptr 60) p
{-# LINE 1477 "Graphics/X11/Xlib/Extras.hsc" #-}
return ((minx, miny), (maxx, maxy)))
`ap` whenBit pBaseSizeBit (do liftM2 (,) ((\hsc_ptr -> peekByteOff hsc_ptr 64) p)
{-# LINE 1479 "Graphics/X11/Xlib/Extras.hsc" #-}
((\hsc_ptr -> peekByteOff hsc_ptr 68) p))
{-# LINE 1480 "Graphics/X11/Xlib/Extras.hsc" #-}
`ap` whenBit pWinGravityBit ((\hsc_ptr -> peekByteOff hsc_ptr 72) p)
{-# LINE 1481 "Graphics/X11/Xlib/Extras.hsc" #-}
foreign import ccall unsafe "XlibExtras.h XGetWMNormalHints"
xGetWMNormalHints :: Display -> Window -> Ptr SizeHints -> Ptr CLong -> IO Status
getWMNormalHints :: Display -> Window -> IO SizeHints
getWMNormalHints d w
= alloca $ \sh -> do
alloca $ \supplied_return -> do
status <- xGetWMNormalHints d w sh supplied_return
case status of
0 -> return (SizeHints Nothing Nothing Nothing Nothing Nothing Nothing)
_ -> peek sh
data ClassHint = ClassHint
{ resName :: String
, resClass :: String
}
getClassHint :: Display -> Window -> IO ClassHint
getClassHint d w = allocaBytes ((16)) $ \ p -> do
{-# LINE 1504 "Graphics/X11/Xlib/Extras.hsc" #-}
s <- xGetClassHint d w p
if s /= 0
then do
res_name_p <- (\hsc_ptr -> peekByteOff hsc_ptr 0) p
{-# LINE 1508 "Graphics/X11/Xlib/Extras.hsc" #-}
res_class_p <- (\hsc_ptr -> peekByteOff hsc_ptr 8) p
{-# LINE 1509 "Graphics/X11/Xlib/Extras.hsc" #-}
res <- liftM2 ClassHint (peekCString res_name_p) (peekCString res_class_p)
_ <- xFree res_name_p
_ <- xFree res_class_p
return res
else return $ ClassHint "" ""
foreign import ccall unsafe "XlibExtras.h XGetClassHint"
xGetClassHint :: Display -> Window -> Ptr ClassHint -> IO Status
withdrawnState,normalState, iconicState :: Int
withdrawnState = 0
{-# LINE 1526 "Graphics/X11/Xlib/Extras.hsc" #-}
normalState = 1
{-# LINE 1527 "Graphics/X11/Xlib/Extras.hsc" #-}
iconicState = 3
{-# LINE 1528 "Graphics/X11/Xlib/Extras.hsc" #-}
inputHintBit,stateHintBit,iconPixmapHintBit,iconWindowHintBit,iconPositionHintBit,iconMaskHintBit,windowGroupHintBit,urgencyHintBit :: Int
inputHintBit = 0
stateHintBit = 1
iconPixmapHintBit = 2
iconWindowHintBit = 3
iconPositionHintBit = 4
iconMaskHintBit = 5
windowGroupHintBit = 6
urgencyHintBit = 8
allHintsBitmask :: CLong
allHintsBitmask = 127
{-# LINE 1545 "Graphics/X11/Xlib/Extras.hsc" #-}
data WMHints = WMHints
{ wmh_flags :: CLong
, wmh_input :: Bool
, wmh_initial_state :: CInt
, wmh_icon_pixmap :: Pixmap
, wmh_icon_window :: Window
, wmh_icon_x :: CInt
, wmh_icon_y :: CInt
, wmh_icon_mask :: Pixmap
, wmh_window_group :: XID
}
instance Storable WMHints where
alignment _ = alignment (undefined :: CLong)
sizeOf _ = (56)
{-# LINE 1562 "Graphics/X11/Xlib/Extras.hsc" #-}
peek p = return WMHints
`ap` (\hsc_ptr -> peekByteOff hsc_ptr 0) p
{-# LINE 1565 "Graphics/X11/Xlib/Extras.hsc" #-}
`ap` (\hsc_ptr -> peekByteOff hsc_ptr 8) p
{-# LINE 1566 "Graphics/X11/Xlib/Extras.hsc" #-}
`ap` (\hsc_ptr -> peekByteOff hsc_ptr 12) p
{-# LINE 1567 "Graphics/X11/Xlib/Extras.hsc" #-}
`ap` (\hsc_ptr -> peekByteOff hsc_ptr 16) p
{-# LINE 1568 "Graphics/X11/Xlib/Extras.hsc" #-}
`ap` (\hsc_ptr -> peekByteOff hsc_ptr 24) p
{-# LINE 1569 "Graphics/X11/Xlib/Extras.hsc" #-}
`ap` (\hsc_ptr -> peekByteOff hsc_ptr 32) p
{-# LINE 1570 "Graphics/X11/Xlib/Extras.hsc" #-}
`ap` (\hsc_ptr -> peekByteOff hsc_ptr 32) p
{-# LINE 1571 "Graphics/X11/Xlib/Extras.hsc" #-}
`ap` (\hsc_ptr -> peekByteOff hsc_ptr 40) p
{-# LINE 1572 "Graphics/X11/Xlib/Extras.hsc" #-}
`ap` (\hsc_ptr -> peekByteOff hsc_ptr 48) p
{-# LINE 1573 "Graphics/X11/Xlib/Extras.hsc" #-}
poke p wmh = do
(\hsc_ptr -> pokeByteOff hsc_ptr 0) p $ wmh_flags wmh
{-# LINE 1576 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 8) p $ wmh_input wmh
{-# LINE 1577 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 12) p $ wmh_initial_state wmh
{-# LINE 1578 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 16) p $ wmh_icon_pixmap wmh
{-# LINE 1579 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 24) p $ wmh_icon_window wmh
{-# LINE 1580 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 32) p $ wmh_icon_x wmh
{-# LINE 1581 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 36) p $ wmh_icon_y wmh
{-# LINE 1582 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 40) p $ wmh_icon_mask wmh
{-# LINE 1583 "Graphics/X11/Xlib/Extras.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 48) p $ wmh_window_group wmh
{-# LINE 1584 "Graphics/X11/Xlib/Extras.hsc" #-}
foreign import ccall unsafe "XlibExtras.h XGetWMHints"
xGetWMHints :: Display -> Window -> IO (Ptr WMHints)
getWMHints :: Display -> Window -> IO WMHints
getWMHints dpy w = do
p <- xGetWMHints dpy w
if p == nullPtr
then return $ WMHints 0 False 0 0 0 0 0 0 0
else do x <- peek p; _ <- xFree p; return x
foreign import ccall unsafe "XlibExtras.h XAllocWMHints"
xAllocWMHints :: IO (Ptr WMHints)
foreign import ccall unsafe "XlibExtras.h XSetWMHints"
xSetWMHints :: Display -> Window -> Ptr WMHints -> IO Status
setWMHints :: Display -> Window -> WMHints -> IO Status
setWMHints dpy w wmh = do
p_wmh <- xAllocWMHints
poke p_wmh wmh
res <- xSetWMHints dpy w p_wmh
_ <- xFree p_wmh
return res
foreign import ccall unsafe "XlibExtras.h x11_extras_IsCursorKey"
isCursorKey :: KeySym -> Bool
foreign import ccall unsafe "XlibExtras.h x11_extras_IsFunctionKey"
isFunctionKey :: KeySym -> Bool
foreign import ccall unsafe "XlibExtras.h x11_extras_IsKeypadKey"
isKeypadKey :: KeySym -> Bool
foreign import ccall unsafe "XlibExtras.h x11_extras_IsMiscFunctionKey"
isMiscFunctionKey :: KeySym -> Bool
foreign import ccall unsafe "XlibExtras.h x11_extras_IsModifierKey"
isModifierKey :: KeySym -> Bool
foreign import ccall unsafe "XlibExtras.h x11_extras_IsPFKey"
isPFKey :: KeySym -> Bool
foreign import ccall unsafe "XlibExtras.h x11_extras_IsPrivateKeypadKey"
isPrivateKeypadKey :: KeySym -> Bool
foreign import ccall unsafe "HsXlib.h XSetSelectionOwner"
xSetSelectionOwner :: Display -> Atom -> Window -> Time -> IO ()
foreign import ccall unsafe "HsXlib.h XGetSelectionOwner"
xGetSelectionOwner :: Display -> Atom -> IO Window
foreign import ccall unsafe "HsXlib.h XConvertSelection"
xConvertSelection :: Display -> Atom -> Atom -> Atom -> Window -> Time -> IO ()
type XErrorEventPtr = Ptr ()
type CXErrorHandler = Display -> XErrorEventPtr -> IO CInt
type XErrorHandler = Display -> XErrorEventPtr -> IO ()
data ErrorEvent = ErrorEvent {
ev_type :: !CInt,
ev_display :: Display,
ev_serialnum :: !CULong,
ev_error_code :: !CUChar,
ev_request_code :: !CUChar,
ev_minor_code :: !CUChar,
ev_resourceid :: !XID
}
foreign import ccall safe "wrapper"
mkXErrorHandler :: CXErrorHandler -> IO (FunPtr CXErrorHandler)
foreign import ccall safe "dynamic"
getXErrorHandler :: FunPtr CXErrorHandler -> CXErrorHandler
foreign import ccall safe "HsXlib.h XSetErrorHandler"
_xSetErrorHandler :: FunPtr CXErrorHandler -> IO (FunPtr CXErrorHandler)
setErrorHandler :: XErrorHandler -> IO ()
setErrorHandler new_handler = do
_handler <- mkXErrorHandler (\d -> \e -> new_handler d e >> return 0)
_ <- _xSetErrorHandler _handler
return ()
getErrorEvent :: XErrorEventPtr -> IO ErrorEvent
getErrorEvent ev_ptr = do
_type <- (\hsc_ptr -> peekByteOff hsc_ptr 0) ev_ptr
{-# LINE 1680 "Graphics/X11/Xlib/Extras.hsc" #-}
serial <- (\hsc_ptr -> peekByteOff hsc_ptr 24) ev_ptr
{-# LINE 1681 "Graphics/X11/Xlib/Extras.hsc" #-}
dsp <- fmap Display ((\hsc_ptr -> peekByteOff hsc_ptr 8) ev_ptr)
{-# LINE 1682 "Graphics/X11/Xlib/Extras.hsc" #-}
error_code <- (\hsc_ptr -> peekByteOff hsc_ptr 32) ev_ptr
{-# LINE 1683 "Graphics/X11/Xlib/Extras.hsc" #-}
request_code <- (\hsc_ptr -> peekByteOff hsc_ptr 33) ev_ptr
{-# LINE 1684 "Graphics/X11/Xlib/Extras.hsc" #-}
minor_code <- (\hsc_ptr -> peekByteOff hsc_ptr 34) ev_ptr
{-# LINE 1685 "Graphics/X11/Xlib/Extras.hsc" #-}
resourceid <- (\hsc_ptr -> peekByteOff hsc_ptr 16) ev_ptr
{-# LINE 1686 "Graphics/X11/Xlib/Extras.hsc" #-}
return $ ErrorEvent {
ev_type = _type,
ev_display = dsp,
ev_serialnum = serial,
ev_error_code = error_code,
ev_request_code = request_code,
ev_minor_code = minor_code,
ev_resourceid = resourceid
}
foreign import ccall unsafe "HsXlib.h XMapRaised"
mapRaised :: Display -> Window -> IO CInt
foreign import ccall unsafe "HsXlib.h XGetCommand"
xGetCommand :: Display -> Window -> Ptr (Ptr CWString) -> Ptr CInt -> IO Status
getCommand :: Display -> Window -> IO [String]
getCommand d w =
alloca $
\argvp ->
alloca $
\argcp ->
do
_ <- throwIf (success >) (\status -> "xGetCommand returned status: " ++ show status) $ xGetCommand d w argvp argcp
argc <- peek argcp
argv <- peek argvp
texts <- flip mapM [0 .. fromIntegral $ pred argc] $ \i -> peekElemOff argv i >>= peekCWString
wcFreeStringList argv
return texts
foreign import ccall unsafe "HsXlib.h XGetModifierMapping"
xGetModifierMapping :: Display -> IO (Ptr ())
foreign import ccall unsafe "HsXlib.h XFreeModifiermap"
xFreeModifiermap :: Ptr () -> IO (Ptr CInt)
getModifierMapping :: Display -> IO [(Modifier, [KeyCode])]
getModifierMapping d = do
p <- xGetModifierMapping d
m' <- (\hsc_ptr -> peekByteOff hsc_ptr 0) p :: IO CInt
{-# LINE 1727 "Graphics/X11/Xlib/Extras.hsc" #-}
let m = fromIntegral m'
pks <- (\hsc_ptr -> peekByteOff hsc_ptr 8) p :: IO (Ptr KeyCode)
{-# LINE 1729 "Graphics/X11/Xlib/Extras.hsc" #-}
ks <- peekArray (m * 8) pks
_ <- xFreeModifiermap p
return . zip masks . map fst . tail . iterate (splitAt m . snd) $ ([], ks)
where
masks = [shiftMapIndex .. mod5MapIndex]