cjl@AI.MIT.EDU (Chris Lindblad) (05/03/90)
Date: Wed, 25 Apr 90 16:20:19 EDT
From: Bill.Chiles@chiles.slisp.cs.cmu.edu
I think there is a bug in CLX 4.1 regarding how it maps resource ID's and
atom ID's. From page 9 of X Window System Protocol:
The client allocates resource ID's for types WINDOW, PIXMAP, CURSOR,
FONT, GCONTEXT, and COLORMAP by .... An ID must be unique with respect
to the ID's of all all other resources, not just other resources of the
same type. However, note that the value spaces of resource identifiers,
atoms, visualids, and keysyms are distinguishable by context, and as
such, are not required to be disjoint; for example, a given numeric
value might be both a window ID, a valid atom, and a valid keysym.
This says to me that the identifiers used for atoms must be distinct from
resource ID's. The problem is that the code in display.lisp uses the
display's resource-id-map to handle atoms. I think the protocol requires
CLX to use a distinct hash table.
The problem I have is the X11 maintainer at my site recently added MIT
changes and recompiled all of X11 causing it to suddenly begin using ID 35
for the root window. When I get this from the server in an event or data
exchange, it gets mapped to :wm_hints (not a xlib:window). As an aside,
we've been using the R3 CLX with an R4 server, but two things:
1] this has worked for quite some time.
2] the code is exactly the same between the two version regarding this
resource ID's and atom ID's.
Does anyone have a patch for this?
Thanks to patches supplied by Charlie Hornig of Symbolics, a new version of
CLX is now available for FTP from expo.lcs.mit.edu, which fixes this problem.
The new version also conains a few other changes, listed below.
The new version is available for anonymous FTP from:
expo.lcs.mit.edu:/contrib/CLX.R4.2.tar.Z
R4.2 changes:
o Atoms and visuals are now correctly maintained in a separate namespace from
windows, pixmaps, cursors, fonts, gcontexts, and colormaps.
o I have made an attempt to make socket code work for kcl and ibcl. I have
akcl here, but not kcl and ibcl, so it's only guesswork that kcl and ibcl
works.
o compile-clx and load-clx do more pathname merging to work around problems
in some lisp implementations. *default-pathname-defaults* is never bound
anymore.
o Some ansi common lisp stuff. If you have :ansi-common-lisp on *features*,
CLX will:
- Use the common-lisp package instead of the lisp package.
- Use the common lisp condition system, being careful not to stomp on
define-condition and type-error.
- Use declaim instead of proclaim.
- Use the dynamic-extent declaration for rest args and closures.
- Use print-unreadable-object.
o Code compiled with the R4 and R4.1 CLX will work with the R4.2 CLX, provided
you don't have :ansi-common-lisp on your features list. Code compiled with
the R4.2 CLX will NOT work with the R4 CLX.