X objects (e.g. windows, fonts, pixmaps) are represented as CLX objects rather than the home-brewed representations of CLM. As a consequence, this requires that CLX be present in the core. If this were to cause unacceptable core bloat, a skeletal CLX could be built which only supported the required functionality.
Stricter naming conventions are used, in particular for enumerated
types. A value named XmFOO_BAR in C will be called
:foo-bar in Lisp, consistently. Abbreviations such as
:form (for :attach-form) are not allowed since they
are often ambiguous. Where CLM abbreviates callback names
(e.g. XmNactivateCallback becomes :activate), we do
not (e.g. :activate-callback).
Some differently named functions which can be resolved without undo hassle.
Passing of information to callbacks and event handlers. In CLM, callback handlers are defined as:
(defun handler (widget client-data &rest call-data) .... )
The CLIENT-DATA argument is some arbitrary data which was
stashed with the callback when it was registered by the application.
The call-data represents the call-data information provided by Motif
to the callback handler. Each data item of the callback information
is passed as a separate argument. In our world, callback handlers are
defined as:
(defun handler (widget call-data &rest client-data) .... )
The call-data is packaged into a structure and passed as a single
argument and the user is allowed to register any number of items to be
passed to the callback as client-data. Being able to pass several
items of client-data is more convenient for the programmer and the
packaging of the call-data information is more appealing than
splitting it apart into separate arguments. Also, CLM only transports
a limited subset of the available callback information. We transport
all information. Event handlers differ in the same way. The
client-data is the &rest arg and the event info is packaged
as a single object. Accessing the generating event in a callback
handler is done in the following manner:
(defun handler (widget call-data &rest client-data)
(with-callback-event (event call-data)
;; Access slots of event such as:
;; (event-window event) or
;; (button-event-x event)
))