module Command(module Command,DrawCommand,Drawable(..)) where import Event(XEvent) import Direction() -- for hbc import Path(Path(..)) import Geometry --import LayoutRequest(LayoutMessage(..)) import Xtypes import DrawTypes --import DialogueIO(Request) import ShowFun() -- Same order as in .../lml/src/lib/xlib/xlib.h data XCommand -- X commands = CloseDisplay Display | DestroyWindow | MapRaised | LowerWindow | UnmapWindow | Draw Drawable GCId DrawCommand | DrawMany Drawable [(GCId,[DrawCommand])] -- use instead of XDoCommands | ClearArea Rect Bool | ClearWindow | ChangeGC GCId GCAttributeList | FreeGC GCId | ChangeWindowAttributes [WindowAttributes] | ConfigureWindow [WindowChanges] | StoreName String | SetNormalHints Point | SetWMHints Bool -- input | UngrabPointer | GrabButton Bool Button ModState [EventMask] | UngrabButton Button ModState | Flush | FreePixmap PixmapId | ShapeCombineMask ShapeKind Point PixmapId ShapeOperation | ShapeCombineRectangles ShapeKind Point [Rect] ShapeOperation Ordering' | ShapeCombineShape ShapeKind Point PixmapId ShapeKind ShapeOperation | RmDestroyDatabase RmDatabase | RmCombineDatabase RmDatabase RmDatabase Bool | RmPutLineResource RmDatabase String | SetWMProtocols [Atom] | SendEvent Window Bool [EventMask] XEvent | SetSelectionOwner Bool Atom | ConvertSelection Selection | ChangeProperty Window Atom Atom Int PropertyMode String | FreeColors ColormapId [Pixel] Pixel{-planes-} | ReparentWindow Window {- parent -} | WarpPointer Point | SetRegion GCId Rect -- !!! modifies a GC -- cache problems! | AddToSaveSet | RemoveFromSaveSet | Bell Int | SetGCWarningHack {gcon,gcoff::PixmapId} -- ONLY Pseudo commands below, add new Xlib command above this line !!! | GrabEvents Bool | UngrabEvents | TranslateEvent (XEvent -> Maybe XEvent) [EventMask] | ReparentToMe Path Window | GetWindowId -- move to XRequest? | SelectWindow Window -- Layout pseudo commands -- | LayoutMsg LayoutMessage -- An I/O request to be passed through the top level (not anymore) -- | DoIO Request -- | DoXRequest XRequest -- -- | DoXCommands [XCommand] -- Drawing speed hack, bypasses caches and resource management. -- Do not put any Alloc/Free, Create/Destroy, Grab/Ungrab type -- of commands inside DoXCommands! -- | MeButtonMachine -- tells menuPopupF where the buttons are deriving (Show,Read) -- layoutRequestCmd = LayoutMsg . LayoutRequest data XRequest = OpenDisplay DisplayName | CreateSimpleWindow Path Rect | CreateRootWindow Rect String -- resource name | CreateGC Drawable GCId GCAttributeList | LoadFont FontName | CreateFontCursor Int | GrabPointer Bool [EventMask] | LMLQueryFont FontId -- doesn't work in Haskell | AllocNamedColor ColormapId ColorName | AllocColor ColormapId RGB | CreatePixmap Size Depth | ReadBitmapFile FilePath | CreateBitmapFromData BitmapData | RmGetStringDatabase String | RmGetResource RmDatabase String String | TranslateCoordinates | InternAtom String Bool | GetAtomName Atom | GetWindowProperty Int Atom Bool Atom | QueryPointer | QueryFont FontId | LoadQueryFont FontName | QueryColor ColormapId Pixel | QueryTree | DefaultRootWindow | GetGeometry | DefaultVisual | Sync Bool -- discard::Bool | QueryTextExtents16 FontId String | ListFonts FontName Int -- pattern, maxnames | ListFontsWithInfo FontName Int -- pattern, maxnames | GetResource RmSpec | DbeQueryExtension | DbeAllocateBackBufferName SwapAction | DbeSwapBuffers SwapAction -- applies only to the fudget's own window. -- ONLY Pseudo requests below: | CreateMyWindow Rect deriving (Eq, Ord, Show, Read) type Command = XCommand data BitmapData = BitmapData Size (Maybe Point) [Int] deriving (Eq, Ord, Show, Read) type DisplayName = String -- Convenient abbreviations: moveWindow (Point x y) = ConfigureWindow [CWX x, CWY y] resizeWindow (Point w h) = ConfigureWindow [CWWidth w, CWHeight h] moveResizeWindow (Rect (Point x y) (Point w h)) = ConfigureWindow [CWX x, CWY y, CWWidth w, CWHeight h] clearWindowExpose = ClearArea (rR 0 0 0 0) True -- Clears the window and generates appropriate -- exposure events.See man page for XClearArea.