4.3BSD/usr/contrib/X/X/README

My thanks go to the Digital Equipment Corporation: without their belief in, and
generous support of, this window system, it would have remained just another
hack used by an MIT research group.  DEC provided support (in the form of
hardware), and yet did not try to exercise any control of rights to the
software.  Other companies would do well to follow DEC's example.

The server has been completely rewritten several times now, and I am reasonably
happy with it.  I have fine-tuned it specifically for the current (sub-optimal)
VAX compiler.  For other machines, faster code may be obtained in some cases
by changing sizes (e.g., to avoid indexing shifts on the 68000) or register
declarations.  Attempts to parameterize along these lines have only been made
for the byte-swapping code.

Unfortunately, a great many invariants are not written down.  Hopefully you
will spend a few weeks understanding the code before you muck with it.  If
something seems easy to add or change, you probably forgot something important.
Almost everything depends on everything else.  It is almost impossible to
devise rigorous test cases.  Innocuous looking changes can have large
performance effects, so watch out.  If you muck with fundamental window
components, a good cross-check is to see how quickly you can manipulate a
window with, say, 100 non-adjacent subwindows.

I would liken the current functionality of the window system with Version 7
in the history of Unix: adequate for many tasks, but missing lots of bells
and whistles.  I have tended not to add a feature until there is a real
application that can't be finished without it.  Now that it is out of my
control, and assuming it survives, no doubt a year or two from now people will
have hacked it into the equivalent of 4.3bsd.  For those who just can't resist
such urges, here is a list (in no particular order) of suggestions people have
already made.  I make no claims about which of them are reasonable.

1.  Redo fonts to handle all the font attributes ever invented.

2.  In X_MoveWindow, X_ChangeWindow, and X_ConfigureWindow, add options for
    lowering the window and for leaving its stacking order unchanged.

3.  Add a request to change the width of a border, with options to raise,
    lower, or leave the stacking order unchanged.  The inside of the window
    should not move.

4.  Add stack push/pop options to X_FocusKeyboard.

5.  Allow an application to send an input event to a window.

6.  Allow transparent windows to have opaque subwindows.

7.  Add MoveWindow, RaiseWindow, LowerWindow, DestroyWindow events.

8.  Add a request to return the event mask for a window.

9.  Allow multiple clients to SelectInput on the same window.

10. Add requests to return the background and border Pixmaps of a window.

11. Add support hooks for automatic placement (e.g., tiling) of windows.

12. Add a request to create a cursor from a Pixmap.

13. Add requests for printing scaled and rotated text.

14. Add a request to draw with a tile.

15. Generalize the notion of GrabServer to GrabWindow.

16. Allow an application to find out if output to (a region of) a window has
    occurred since a given point in time (e.g., since a PixmapSave of (that
    region of) that window).

17. Add support for saving the bits of an obscured window and suspending
    output to it until it is fully exposed.

18. Add support for Bitmap and Pixmap data to come from shared memory segments
    (SysV) and files.

19. Allow keyboard keys to be grabbed.

20. Allow window creation to insert between two existing windows.

21. Add request to return a single plane of a region of a window.



					Robert W. Scheifler
					MIT Laboratory for Computer Science
					August 1985