eXene Updates
"eXene is a multithreaded X Windows toolkit written in Concurrent ML by John Reppy and Emden Gansner." [eXene] Updates on this page are part of a Master's Project by Dusty deBoer at Kansas State University under the supervision of Dr. Alley Stoughton.
July 6, 2005: Summary of API Changes so far.
Mar 28 2005: eXene.2.tar.gz (703kB). Source code. Change to the following functions:
Widget.parseCommand : optSpec -> string list -> optDb * string list Widget.findNamedOpt : optDb -> optName -> root -> attr_value list Widget.findNamedOptStrings : optDb -> optName -> string listIn particular, note that only function findNamedOpt requires root, and function findNamedOptStrings has been added to obtain the values of named options as unconverted strings (rather than as converted attr_values.)
Mar 08 2005: eXene.1.tar.gz (703kB). Source code. Still a rough release; more code, and documentation coming.
To use this eXene source tree in your project, extract to some directory, say eXene, then include the eXene/eXene.cm compilation manager file in your project compilation file:
Library source(-) is $cml/basis.cm $cml/cml.cm $cml-lib/smlnj-lib.cm eXene/eXene.cm ...To stabilize the eXene library, type:
CM.stabilize true "eXene.cm";
at the SML/NJ prompt, while at the root of the eXene source tree.
Changes:
- Library: Deletion Events: Added a unit CML.chan upon which a receive will be enabled when the X Server sends
the application a (top level) window delete event:
val createSimpleTopWin : Display.screen -> { geom : Geometry.win_geom, border : ColorServer.color, backgrnd : ColorServer.color } -> (window * WindowEnv.in_env * unit CML.chan)
Please Note: this is an API change from the original eXene release; it will require changes in any application that calls createSimpleTopWin. - Widgets: Deletion Events: fun Shell.deleteEvent : shell -> unit CML.event has been added to allow applications to receive notification when the shell's top level window has been notified of deletion.
- Widgets: Deadlock Avoidance: routers in composite widgets now have buffered output channels - that is, if one child widget
of a composite widget is blocked, it will not block other child widgets of the composite widget from
receiving output from composite widget.
Child widgets are recommended to use WidgetBase.wrapQueue to buffer their output channels (output events). Button widgets have been modified to use wrapQueue. - Library: X Resources: functions have been added to simplify/facilitate working with X resources and command-line arguments; see eXene-resources.pdf for more description. A function val ICCC.xrdbofScr : EXB.screen -> string list has been added; this returns the list of strings provided by a user's xrdb service. Additionally, the function Widget.styleFromXRDB : Widget.root -> Widget.style creates a style directly from the information provided by xrdb. The function Styles.mergeStyles : Styles.style * Styles.style -> Style.style merges the information of two styles.
- Library: X Authentication: a bug has been fixed in eXene authentication to X servers, mainly affecting connections to localhost.
- Widgets: Input Focus: In progress.
Currently the FieldEdit widget will obtain a grab on keyboard input when the mouse enters the widget, and does not release until some other window (or widget) grabs keyboard input.Disabled as of Mar 28; changes coming. - Library: X Selections: In progress. Facilitate easier work with X selections.
- More description to come shortly...