[comp.windows.x] Summary of Patches 1-60 for X11

david@geac.UUCP (11/19/87)

As a result of a number of people asking me what the 60 patches from
xstuff fixed, I have compiled the following list from by change log
file. If people are interested, I will post updates to this list in
units of 10 (ie: the next list will be posted as patch 70 is reached)
unless someone has a major objection.

------------------------------------------------------------
Patch #60 done. Fixed clients/xpr/xpr.man, clients/xpr/Imakefile,
clients/xpr/xpr.c
Added clients/xpr/xpr.h, clients/xpr/pmp.h, clients/xpr/x2pmp.c

xpr didn't work very well on various machines and in lots of situations
included is the addition of PagePrinter 3812 support
------------------------------------------------------------
Patch #59 done. Fixed server/dix/events.c

If the cursor on a ChangeActivePointerGrab is None, the cursor will
be set to garbage. Also, if the cursor is None, the cursor will be changed
even if the timestamp test fails.
------------------------------------------------------------
Patch #58 done. Fixed server/dix/events.c

mouse control settings from the command line were ignored. control
settings should always be passed down to the device at initialization,
not just when it is "the" input device.
------------------------------------------------------------
Patch #57 done. Fixed server/dix/events.c

cursor confines are not reset when switching screens, causing
havoc if the screen have different dimensions
------------------------------------------------------------
Patch #56 done. Fixed server/dix/events.c

This fix turns up an unpleasant fact, namely that it is not possible
for "other" clients to track the real-estate driven input focus during
a pointer grab (because they will receive no Enter/Leave events). Clients
like xterm will now behave incorrectly (with this fix applied), and need
to be fixed; the only fix seems to be to highlight as if the focus is
always lost on a pointer grab. This is a clear deficiency in the protocol
(since considerable effort was expended to try and give clients sufficient
focus information).
------------------------------------------------------------
Patch #55 done. Fixed server/ddx/mi/mipushpxl.c 

Xfree called on tail rather than head pointer.
------------------------------------------------------------
Patch #54 done. Changed server/ddx/mfb/mfbitblt.c, server/ddx/cfb/cfbbitblt.c,
server/ddx/mi/mibitblt.c, server/ddx/mi/miexpose.c

CopyArea and CopyPlane:
	mfb didn't use screen's region procs
	mfb didn't generate events for zero planemask
	mfb and mi didn't obey IncludeInferiors on src
	graphics exposures didn't obey IncludeInferiors on dst
	mfb and cfb memory leaks
------------------------------------------------------------
Patch #53 done. Fixed server/ddx/sun/sunGC.c, server/ddx/apollo/apolloGC.c

{sun,apollo}LineHelper was bypassing cursor checking by passing wrong GC
{sun,apollo}CopyGC didn't include state changes
{sun,apollo}DestroyClip didn't copy clip residue back
{sun,apollo}CopyClip didn't copy clip back
correct COMPARE_GC debugging
------------------------------------------------------------
Patch #52 done. Fixed server/ddx/mfb/mfbcmap.c, server/ddx/cfb/cfb.h,
server/ddx/cfb/cfbcsrinit.c, server/ddx/cfb/cfbcmap.c,
server/ddx/sun/sunCG2C.c, server/ddx/sun/sunCG4C.c

do reasonable things with (un)install of colormaps in cfb, sun
handle colormaps on multiple screens in mfb and cfb
------------------------------------------------------------
Patch #51 done. Fixed server/dix/colormap.c

FindColor returns status, it doesn't store it in the pixel.
two off-by-1 errors in FindColor.
------------------------------------------------------------
Patch #50 done. Fixed server/ddx/mi/milines.c

memory leak in miWideLine
prefer ALLOCATE_LOCAL to Xalloc
------------------------------------------------------------
Patch #49 done. Fixed server/dix/gc.c

default tile created by CreateGC would never be freed
default tile casues extra ChangeGC call
------------------------------------------------------------
Patch #47 done. Changed server/dix/dispatch.c

KillServerResources() should allow extensions to close down cleanly.
------------------------------------------------------------
Patch #47 done. Fixed server/dix/window.c

share border on CopyFromParent, don't cons
pass correct flag to ddx when border CopyFromParent yields a
pixel
don't flush caches when realizing a window
some nits
------------------------------------------------------------
Patch #46 done. Changed server/dix/window.c.

xsetroot -solid <color> where 'color' translates to pixel value zero,
will cause the server to dump core when the screensaver activates.
------------------------------------------------------------
Patch #45 done. Fixed server/ddx/qvss/qvss_io.c and
server/ddx/ibm/apa16/apa16io.c

VSII: after starting up X, the cursor tracks the mouse but never changes
on window crossings and input always goes to one window (if any)

RT: after starting up X, the cursor does not track the mouse but will
jump to a new position whenever a button is pressed. Cursor never changes,
input goes to single window.
------------------------------------------------------------
Patch #44 done. Changed server/ddx/sun/sun.h and server/ddx/sun/sunKbd.c

Autorepeat had an interaction with the screensaver that caused
the screen to flicker.  Autorepeat was also too slow, so it
was made faster.  Autorepeat and keyclick are now controllable
by the ChangeKbdCtrl.

There were also problems with keyboard translation and SunView;
most of these are now fixed.  Some lint fixes are also included.
------------------------------------------------------------
Patch 43 done. Fixed server/ddx/cfb/cfb.h

cfbPrivGC no longer matches mfbPrivGC. The private data structures
for cfb should always match those of mfb.
------------------------------------------------------------
Patch 42a done. Fixed lib/CLX/dependent.l and lib/CLX/depdefs.l

#1 *clx-cached-names* in clx.cl, was is loaded BEFORE
   dependent, where *clx-cached-names* was defined.

#2 patch dies on the part of the bug fix for attributes.cl
   (patch #2 had one line missing)
------------------------------------------------------------
Patch #42 done. Changed lib/CLX/clx.l, lib/CLX/macros.l, lib/CLX/attributes.l,
and lib/CLX/requests.l

missing values in pixmap-format-bits-per-pixel type
various missing -equal functions
various function symbols not exported that should be
buggy OR type expansion
get-property sometimes returned non-nil when it shouldn't
NOTE: patch to attributes.l was reported as terminating early by patch.
------------------------------------------------------------
Patch #41 done. Changed clients/bitmap/bitmap.c

bitmap had a wrong assumption about the relationship between BlackPixel()
and WhitePixel().
------------------------------------------------------------
Patch #40 done. Fixed lib/X/XParseCol.c

XParseColor fails to set the flags field of the XColor structure, the
way XQueryColor[s] does. This caused anomalies in various applications,
who shouldn't have to think about this.
------------------------------------------------------------
Patch #39 done. Changed lib/Xtk/AsciiSink.c

Makes the text insertion cursor work reasonably.
------------------------------------------------------------
Patch #38 done. Changed lib/Xtk/StringSrc.c

XtStringSourceCreate() uses the wrong arguments for XtGetSubresources().
------------------------------------------------------------
Patch #37 done. Fixed server/dix/dispatch.c

From the name of the function, I assume FlushClientCaches is supposed
to remove all references to a resource id from every active client's
cache, but the statement
    if (client == clients[i])
restricts FlushClientCaches' attention to only the client that
owns the resource.
------------------------------------------------------------
Patch #36 done. Changed lib/X/XEvToWire.c

XSendEvent trashes window ID when sending a KeyPress event.
Also applied patch 36a which moved version 1.11 to 1.12 and
removed a redundant include of stdio.h. The patches should be 
applied in the order 36a then 36
------------------------------------------------------------
Patch #35 done. Changed server/ddx/mi/misetclip.c

miRectsToRegion() uses the protocol constants, such as Unsorted, 
where it should be using the clip type constants, such as CT_UNSORTED.
------------------------------------------------------------
Patch #34 done. Fixed server/dix/window.c

WarpPointer doesn't include inferiors of the source window in its
visibility calculation, but should.
(The spec is ambiguous on this point, and needs rewording.)
------------------------------------------------------------
Patch #33 not done. File clients/xwd/xwd.c

The patch was already applied to the xwd code.
------------------------------------------------------------
Patch #32 done: Fixed lib/X/XOpenDis.c

Modifications to allow for rebinding of shifted function keys.
------------------------------------------------------------
Patch #31 done. Fixed server/os/4.2bsd.oscolor.c

The pointer dbent.ptr returned by the dbm fetch(dbent) is (char *) type,
and is casted to a (short *) which can create buss errors (on some machines)
for the fetch operation in folling assigns like on line 56:
	*pred = prgb->red;
------------------------------------------------------------
Patch #30 done. Changed server/dix/events.c server/ddx/lk201/lk201.c and
server/ddx/sun/sunKbd.c

Lock keys on Vaxen and Suns don't toggle, but act just like vanilla shift
keys. Pressing or releaseing a modifier key on a Sun disables autorepeat
on any "real" key that is down.
------------------------------------------------------------
Patch #29 done. Changed clients/xmodmap/xmodmap.c

xmodmap as written would not allow for an increase in the number of
keycodes per modifier.
------------------------------------------------------------
Patch #28 done. Fixed server/dix/resource.c

If there is more than one class of resource under a given resource ID,
FreeResource will only free the first resource it encounters.
Since FreeResource breaks out of the loop once it has freed a single
resource, rather than proceeding to the end of the chain, if there
is more than one class for a single resource ID (as is done for windows
on the sun server), the previous resource will remain.
It should be noted as a caveat that the DeleteFunc for a resource is 
not allowed to call AddResource (although it is permitted to call
FreeResource)
------------------------------------------------------------
Patch #27 done. Fixed lib/X/XGetHints.c

XGetTransientForHint would free a null pointer if the hint was undefined.
The final "Xfree( (char *) data);" would free a null pointer if the hint
wasn't defined for the window. 
XGetClassHint would also Xfree a null pointer if the property was undefined.
The final Xfree was at fault.
------------------------------------------------------------
Patch #26 done. Changed server/dix/dispatch.c server/dix/gc.c and
server/ddx/apollo/apolloGC.c

Multiple problems with server SetClipRectangles
Missing clip stuff in apollo ddx
SetClipRectangles request had side-effects even on BadMatch, in
violation of the specification
Error value returned from SetClipRects was being ignored
SetClipRectangles was setting the gc serial change wrong
SetClipRects had more uninitialized variables than you could shake a
pointer at.
SetClipRects did not include origin changes in the gc interest mask check.
Apollo gc shadowing was missing PolyClip support, and needed the same
kludge as for Sun for ChangeClip and ValidateGC.
------------------------------------------------------------
Patch #25 done. Fixed server/dix/gc.c server/ddx/sun/sunGC.c and
server/ddx/apollo/apolloGC.c

Using long dash-lists can be hazardous to your server. CopyGC in the server
always allocates a list of length 2, rather than the actual length of the
list. Likewise for the shadow gc's created by sun and apollo ddx's, although
the length just happens to be 2 anyway. SetDashes should be flagging the
gc serial number.
------------------------------------------------------------
Patch #24 done. Modified server/dix/dispatch.c

The server GetImage:
   + dies if you ask for zero width
   + scribbles on memory if a single scanline is larger than IMAGE_BUFSIZE
   + allocates more memory than is needed for small images
   + needlessly kills client on allocation failure
------------------------------------------------------------
Patch #23 done. Fixed lib/CLX/buffer.l

CLX read-sequence-card8/16/32 did not return its result.
------------------------------------------------------------
Patch #22 done. Changed lib/X/XEvToWire.c

Sending a ClientMessage with a known window field caused the contents to
get trashed. (missing break in switch)
------------------------------------------------------------
Local Change: Changed util/imake.includes/Imake.tmpl

Changed USRLIBDIR from .../usr/lib to .../usr/lib/X11
------------------------------------------------------------
Local Change: Changed doc/Xlib/Xman/Imakefile

rule for depend: was missing causing make depend to abort.
------------------------------------------------------------
Local Change: Changed clients/gnuplot/Imakefile

changed reference from -lnm to -lm. -lnm is an MIT special.
Suggested by James Peterson <peterson@MCC.COM>
Confirmed by David Keikorian <dkk@ATHENA.MIT.EDU>
------------------------------------------------------------
Local Change: Changed util/imake.includes/Sun.macros

set DebugLibX to NO in an attempt to speed things up.
Suggested by David R. Stampf <drs@bnl.arpa>
------------------------------------------------------------
Local Change: Imakefile

changed the ln -s ... to -ln -s to avoid stopping a make without the
-k option.
Suggested by David R. Stampf <drs@bnl.arpa>
------------------------------------------------------------
Local Change: Changed server/ddx/sun/sun.h

set AUTOREPEAT_DELAY to 20 from 100 milliseconds. (it was just too slow)
Suggested by Adam R de Boor <deboor@dill.Berkeley.EDU>
------------------------------------------------------------
Patch #21 done. Changed server/dix/gc.c.

Several locations in gc.c call QueryBestSize procedures using integer
parameters. Xproto.h specifies the use of short integers.
------------------------------------------------------------
Patch #20 done. Changed server/dix/grabs.c.

Rtl window manager tickles server bug causing core dump.
We have a Passive Grab (Async) for both Key and Mouse, set
for each client when Rtl recognizes it and Tiles it. The grab activates
when a user types or clicks in the client. We then Ungrab the Key/Pointer,
and AllowEvents (with Replay), so that the client sees the event. The
Passive Grab is restored when the pointer leaves the client window
(upon a LeaveNotify). The fault seems to occur when the Passive Grab
is restored.
------------------------------------------------------------
Patch #19 done. fixed lib/CLX/clx.l. MANUALLY APPLIED.

encode modifier mask
------------------------------------------------------------
Patch #18 done. Changed lib/CLX/attributes.l. MANUALLY APPLIED.

extraneous argument in CLX window-priority setf.
------------------------------------------------------------
Patch #17 done. Fixed lib/X/XPutImage.c

XPutImage did not work with Z format, particularly on subimages and
1-bit Z format with respect to bit order.
------------------------------------------------------------
Patch #16 done. Changed server/ddx/mfb/mfbimage.c.

mfbPutImage was treating ZPixmap format as equivalent to XYBitmap
when it should be equivalent to XYPixmap.
------------------------------------------------------------
Patch #15 done. Fixed server/ddx/mi/miregion.c. MANUALLY APPLIED.

miClipSpans was not handling all aspects of clipping correctly.
------------------------------------------------------------
Patch #14 done. Changed server/dix/colormap.c.

AllocColor was retaining garbage bits of pPix for a TrueColor map.
------------------------------------------------------------
Patch #13 done. Patch to server/dix/gc.c to change an

= to == in an evaluation clause.
------------------------------------------------------------
Patch #12 done. Fixed lib/oldXtk/Command.c

Modified to use 1 instead of calling DefaultDepth.
------------------------------------------------------------
Patch #11 done. Change to server/dix/colormap.c.

colormap entries allocated by AllocColorCells or AllocColorPlanes in
colormaps not owned by the client were never freed on the termination
of the client. The fix also plugs a memory leak found incidentally.
------------------------------------------------------------
Patch #10 done. Fixed server/dix/events.c

Note that this patch attempts to change the header of the file colormap.c
from 1.53 to 1.54. No code changes accompany this change of header. The
colormap.c in the MIT distribution is 1.52. This rejected patch was ignored.
------------------------------------------------------------
Patch #9 not applied. A manual script to set links for System V.

This is not applicable on our BSD sites.
------------------------------------------------------------
Patch #8 done. Fixed lib/oldXMenu/Create.c

XmenuCreate did not read defaults from the .Xdefaults as the
'display' argument in the calls to XGetDefault was missing.
------------------------------------------------------------
Patch #7 done manually.

A change to fonts/bdf/9x15.bdf to change the width of the characters
from 10 to 9 (DWIDTH 10 became DWIDTH 9)
------------------------------------------------------------
Patch #6 done. Fixed lib/X/XKeyBind.c

Extends the key set to allow NUL to be generated by cntrl-@
and cntrl-spacebar.
------------------------------------------------------------
Patch #5 done. Changed clients/bitmap/bitmap.c

Bitmap was dumping core when specifying colors on a color screen.
------------------------------------------------------------
Patch #4 done. Change to lib/X/XSetCRects.c

Missing a semi-colon.
------------------------------------------------------------
Patch #3 done. Corrected server/dix/tables.c
Wrong swapping routine used in MappingNotify events.
------------------------------------------------------------
Patch #2 applied by hand.
Modified lib/CLX/text.l to remove compile warnings to
text-extents-local.
------------------------------------------------------------
Patch #1 was already applied in the standard release tape.
-- 
David Haynes
Geac Computers International Inc. 
UUCP:	{mnetor|yetti|utgpu}!geac!david